PUBLIC SWAPSM DATA SEGMENT PUBLIC ; Der Bezeichner DATA darf nicht ver„ndert werden ; --- Erg„nzung Anfang A DW ? B DW ? ; --- Erg„nzung Ende DATA ENDS CODE SEGMENT PUBLIC ASSUME CS:CODE,DS:DATA ; Der Bezeichner CODE darf nicht ver„ndert werden SWAPSM PROC PUSH BP MOV BP,SP ; --- Erg„nzung Anfang PUSH CX MOV A,4711 MOV CX,A MOV B,CX POP CX ; --- Erg„nzung Ende 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 BX,[BP+12] ; Anfangsadresse Tabelle laden 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 gr”áer gleich Maximum ? JGE MAXOK MOV DX,[BX+SI] ; Nein : Maximum korrigieren MAXOK: ADD AX,[BX+SI] ; Tabellenelement aufaddieren INC SI ; n„chstes Tabellenelement bearbeiten (Worttabelle) INC SI LOOP LOOP1 MOV BX,[BP+8] ; Adresse fr Maximum laden MOV [BX],DX ; Maximum setzen MOV SP,BP ; nur bei lokalen Variablen sinnvoll POP BP RET 12 SWAPSM ENDP CODE ENDS END