当前位置:首页 > 微机原理:顺序、分支、循环、子程序设计
INT 21H CODEM ENDS
CODES SEGMENT
ASSUME CS:CODES ;the part of subprogram BCD-16B PROC FAR PUSH BX PUSH AX ADD SI, CX MOV DX, 0 BCDL:
DEC SI PUSH CX MOV AL, [SI] AND AL, 0FH CBW
MOV BX, AX MOV AX, DX MOV CX, 10 MUL CX
MOV DX, AX ADD DX, BX POP CX LOOP BCDL POP AX POP BX RET
BCD-16B ENDP CODES ENDS END START
②使用储存器传递参数
name \STACK SEGMENT STACK DB 256 DUP(?) STACK ENDS
DATA SEGMENT
BCD1 DB 07H, 06H, 07H, 02H, 03H ADSEG DW ? ADOFST DW ? LENG1 DW ? RESULT DW ?
DATA ENDS
CODEM SEGMENT
ASSUME CS:CODEM, DS:DATA, SS:STACK START:
MOV AX, DATA MOV DS, AX
;entrance parameter MOV AX, SEG BCD1 MOV ADSEG, AX
MOV AX, OFFSET BCD1 MOV ADOFST, AX MOV LENG1, 5
CALL FAR PTR BCD-16B MOV AH, 4CH INT 21H CODEM ENDS
CODES SEGMENT
ASSUME CS:CODES ;the part of subprogram BCD-16B PROC FAR PUSH BX PUSH AX PUSH SI PUSH DS
MOV DS, ADSEG MOV SI, ADOFST MOV CX, LENG1 XOR DX, DX ADD SI, CX BCDL:
DEC SI PUSH CX MOV AL, [SI] AND AL, 0FH CBW
MOV BX, AX MOV AX, DX MOV CX, 10 MUL CX
MOV DX, AX ADD DX, BX
POP CX LOOP BCDL POP AX POP BX POP DS POP SI RET
BCD-16B ENDP CODES ENDS END START
③使用堆栈传递参数
name \STACK SEGMENT STACK DB 256 DUP(?) STACK ENDS
DATA SEGMENT
BCD1 DB 07H, 06H, 07H, 02H, 03H LENG1 DW ? RESULT DW ? DATA ENDS
CODEM SEGMENT
ASSUME CS:CODEM, DS:DATA, SS:STACK START:
MOV AX, DATA MOV DS, AX ;push PUSH DS LEA SI, BCD1 PUSH SI
MOV CX, LENG1 PUSH CX
CALL FAR PTR BCD-16B POP DX
MOV RESULT, DX MOV AH, 4CH INT 21H CODEM ENDS
CODES SEGMENT
ASSUME CS:CODES
;the part of subprogram BCD-16B PROC FAR PUSH BP MOV BP, SP PUSH DS PUSH SI PUSH CX PUSH BX PUSH AX
MOV CX, [BP]+6 MOV SI, [BP]+8 MOV DS, [BP]+10 ADD SI, CX MOV DX, 0 BCDL:
DEC SI PUSH CX MOV AL, [SI] AND AL, 0FH CBW
MOV BX, AX MOV AX, DX MOV CX, 10 MUL CX
MOV DX, AX ADD DX, BX POP CX LOOP BCDL POP AX POP BX POP CX POP DS POP SI POP BP RET A BCD-16B ENDP CODES ENDS END START
共分享92篇相关文档