;将AX中的值以十进制形式输出
ASSUME DS:data1,SS:stack1
data1 SEGMENT
decimal DB 6 DUP(?),'$(编译时去掉此处括号)'
temp DB 6 DUP(?)
data1 ENDS
;
stack1 SEGMENT STACK
DB 256 DUP(?)
stack1 ENDS
;不同段的子程序——output in decimal
;好像只能放在主程序的前面
code2 SEGMENT
outDec PROC FAR
ASSUME CS:code2
;BEGIN:寄存器保护,将子程序中用到的寄存器保存
PUSH DI
PUSH BX
PUSH CX
PUSH DX
PUSH SI
;END
LEA DI,temp
MOV BX,10
MOV CX,0 ;记录十进制数的位数
again: XOR DX,DX
DIV BX
MOV [DI],DL ;保存余数
INC DI
INC CX
CMP AX,0
JNE again
MOV SI,OFFSET decimal
ADD SI,CX
MOV [SI],'$(编译时去掉此处括号)' ;字符串结束符
DEC SI
LEA DI,temp
next: MOV AL,[DI]
MOV [SI],AL
ADD [SI],30H ;转为ASCII码
DEC SI
INC DI
DEC CX
CMP CX,0
JNE next
LEA DX,decimal
MOV AH,9
INT 21H
;BEGIN:寄存器恢复
POP SI
POP DX
POP CX
POP BX
POP DI
;END
RET
outDec ENDP
code2 ENDS
;主程序
code1 SEGMENT
ASSUME CS:code1
start: MOV AX,data1
MOV DS,AX
;
MOV AX,0FFFFH ;设置AX的值;不能写成FFFFH
CALL FAR PTR outDec
MOV AH,4CH
INT 21H
code1 ENDS
END start