PUBLIC SWAPSM DATA SEGMENT PUBLIC ; hier ueberfluessig ; Der Bezeichner DATA darf nicht veraendert werden DATA ENDS CODE SEGMENT PUBLIC ASSUME CS:CODE,DS:DATA ; DS:DATA hier ueberfluessig ; Der Bezeichner CODE darf nicht veraendert werden SWAPSM PROC PUSH BP MOV BP,SP PUSH DS ; DS sichern MOV DI,[BP+4] ; Obergrenze laden SHL DI,1 ; Index := DI*2 (Worttabelle) MOV SI,[BP+6] ; Untergrenze laden SHL SI,1 ; Index := SI*2 (Worttabelle) MOV DS,[BP+14] ; Anfangsadresse Tabelle laden MOV BX,[BP+12] MOV AX,[BX+SI] ; Wort an Untergrenze mit XCHG AX,[BX+DI] ; Wort an Obergrenze vertauschen MOV [BX+SI],AX MOV DX,[BX+SI] ; DX : Maximum , hier Initialisierung MOV AX,0 ; AX : Summe (Funktionswert) , hier Initialisierung MOV CX,[BP+4] ; CX : Differenz (Von,Bis) plus eins SUB CX,[BP+6] INC CX LOOP1: CMP DX,[BX+SI] ; Tabellenelement groesser gleich Maximum ? JGE MAXOK MOV DX,[BX+SI] ; Nein : Maximum korrigieren MAXOK: ADD AX,[BX+SI] ; Tabellenelement aufaddieren INC SI ; naechstes Tabellenelement bearbeiten (Worttabelle) INC SI LOOP LOOP1 MOV DS,[BP+10] ; Adresse fuer Maximum laden MOV BX,[BP+8] MOV [BX],DX ; Maximum setzen POP DS ; DS restaurieren MOV SP,BP ; nur bei lokalen Variablen sinnvoll POP BP RET 12 SWAPSM ENDP CODE ENDS END