CSEG SEGMENT 'CODE' ASSUME CS:CSEG,DS:DSEG HAUPT PROC ; program haupt; ; var a,b,cc : integer; ; begin ; a := 10; ; b := 20; ; cc := addi1(a,b); ; a := 10; ; b := 20; ; cc := addi2(a,b) ; end. MOV AX,DSEG ; DS initialisieren MOV DS,AX MOV A,10 ; A := 10 MOV B,20 ; B := 20 PUSH A ; Wertparameter A auf den Stack PUSH B ; Wertparameter B auf den Stack CALL ADDI1 ; CC := ADDI1(A,B) MOV CC,AX MOV A,10 ; A := 10 MOV B,20 ; B := 20 PUSH A ; Wertparameter A auf den Stack PUSH B ; Wertparameter B auf den Stack CALL ADDI2 ; CC := ADDI2(A,B) MOV CC,AX MOV AX,4C00h ; Programmende mit Exitcode 0 INT 21h HAUPT ENDP ADDI1 PROC ; function addi1(x,y:integer):integer; ; begin ; addi := x+y ; end; PUSH BP ; BP sichern MOV BP,SP ; Anker werfen MOV AX,[BP+6] ; ADDI := X+Y ADD AX,[BP+4] POP BP ; BP ruecksichern RET 4 ; Ruecksprung und zwei 16-Bit Wertparameter vom Stack ADDI1 ENDP ADDI2 PROC ; function addi2(x,y:integer):integer; ; var z,zz : integer; ; begin ; z := x+y; ; zz := z; ; addi2 := zz ; end; PUSH BP ; BP sichern MOV BP,SP ; Anker werfen SUB SP,4 ; Platz fuer zwei 16-Bit lokale Variablen schaffen MOV AX,[BP+6] ; Z := X+Y MOV [BP-2],AX MOV AX,[BP+4] ADD [BP-2],AX MOV AX,[BP-2] ; ZZ := Z MOV [BP-4],AX MOV AX,[BP-4] ; ADDI2 := ZZ MOV SP,BP ; Platz lokaler Variablen freigeben POP BP ; BP ruecksichern RET 4 ; Ruecksprung und zwei 16-Bit Wertparameter vom Stack ADDI2 ENDP CSEG ENDS DSEG SEGMENT 'DATA' A DW ? B DW ? CC DW ? DSEG ENDS SSEG SEGMENT STACK DW 256 DUP (?) SSEG ENDS END HAUPT