OPTION SCOPED
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
MAIN PROC
; Sicherstellen von ASSUME DS:DSEG
MOV AX,DSEG
MOV DS,AX
; X := UP1(A,B)
PUSH A
PUSH B
CALL UP1
MOV X,AX
; WriteLn(X)
PUSH X
CALL DOUT
CALL CRLF
; X := UP2(A,B)
MOV AX,SEG A
PUSH AX
MOV AX,OFFSET A
PUSH AX
MOV AX,SEG B
PUSH AX
MOV AX,OFFSET B
PUSH AX
CALL UP2
MOV X,AX
; WriteLn(X)
PUSH X
CALL DOUT
CALL CRLF
; X := UP3(T)
MOV AX,SEG T
PUSH AX
MOV AX,OFFSET T
PUSH AX
CALL UP3
MOV X,AX
; Write(X)
PUSH X
CALL DOUT
; Programmende
MOV AX,4C00h
INT 21h
MAIN ENDP
; Function UP1(Y,Z:Word):Word;
; Begin
; UP1 := Y+Z
; End
UP1 PROC
PUSH BP
MOV BP,SP
MOV AX,[BP+6]
ADD AX,[BP+4]
POP BP
RET 4
UP1 ENDP
; Function UP2(Var Y,Z:Word):Word;
; Begin
; UP2 := Y+Z
; End
UP2 PROC
PUSH BP
MOV BP,SP
PUSH DS
PUSH BX
MOV DS,[BP+10]
MOV BX,[BP+8]
MOV AX,[BX]
MOV DS,[BP+6]
MOV BX,[BP+4]
ADD AX,[BX]
POP BX
POP DS
POP BP
RET 8
UP2 ENDP
; Function UP3(Var Y:tTabelle):Word;
; Var F,I : Word;
; Begin
; F := 0;
; For I := 0 To 9 Do
; F := F+Y[I];
; UP3 := F
; End
UP3 PROC
PUSH BP
MOV BP,SP
SUB SP,4
PUSH DS
PUSH BX
PUSH SI
MOV WORD PTR [BP-2],0
MOV WORD PTR [BP-4],0
LOOP1:
CMP WORD PTR [BP-4],9
JA LOOP2
MOV AX,[BP-2]
MOV DS,[BP+6]
MOV BX,[BP+4]
MOV SI,[BP-4]
SHL SI,1
ADD AX,[BX+SI]
MOV [BP-2],AX
INC WORD PTR [BP-4]
JMP LOOP1
LOOP2:
MOV AX,[BP-2]
POP SI
POP BX
POP DS
MOV SP,BP
POP BP
RET 4
UP3 ENDP
DOUT PROC
; Write(Y)
PUSH BP
MOV BP,SP
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AX,[BP+4]
MOV BX,10
MOV CX,0
LOOP1:
MOV DX,0
DIV BX
PUSH DX
INC CX
CMP AX,0
JNE LOOP1
MOV AH,2
LOOP2:
POP DX
ADD DL,'0'
INT 21h
LOOP LOOP2
POP DX
POP CX
POP BX
POP AX
POP BP
RET 2
DOUT ENDP
CRLF PROC
; WriteLn
PUSH AX
PUSH DX
MOV AH,2
MOV DL,13
INT 21h
MOV DL,10
INT 21h
POP DX
POP AX
RET
CRLF ENDP
CSEG ENDS
DSEG SEGMENT
; Var A : Word
A DW 19
; Var B : Word
B DW 23
; Type tTabelle = Array[0..9] of Word
; Const T : tTabelle = (2,3,5,7,11,13,17,19,23,29)
T DW 2,3,5,7,11,13,17,19,23,29
; Var X : Word
X DW ?
DSEG ENDS
SSEG SEGMENT STACK
DW 1024 DUP (?)
SSEG ENDS
END MAIN