📄 add.asm
字号:
CODE SEGMENT
MAIN PROC FAR ;段定义伪操作
ASSUME CS:CODE
START:
PUSH DS ;将原有数据段入栈保存
SUB AX,AX ;将累加器?
PUSH AX ;保存到栈中
;------------------
CALL DECIBIN ;子程序调用,十进制转换为二进制子程序
PUSH BX ;将原有基址寄存器的内容保存
CALL DECIBIN
POP AX
ADD BX,AX
CALL BINIDEC ;子程序调用,二进制转换为十进制子程序
;------------------
RET
MAIN ENDP
;--------------------
DECIBIN PROC NEAR ;段内调用
MOV BX,0 ;BX置零
NEWCHAR:
MOV AH,1 ;累加器赋初值
INT 21H ;中断,标志寄存器.代码段.指针的内容进栈保存。重置IF TF AC IP CS
SUB AL,30H ;累加器
CMP AL,0
JB EXIT1 ;与零比较是否会小于零
CMP AL,9
JNBE EXIT1 ;与九比较是否会大于九
CBW ;AL扩展到AH
XCHG AX,BX ;交换
MOV CX,10D ;计数器置十
MUL CX ;与当前计数器相乘
XCHG AX,BX ;交换内容
ADD BX,AX
JMP NEWCHAR
EXIT1:
RET
DECIBIN ENDP
;----------------
BINIDEC PROC NEAR
PUSH BX
PUSH CX
PUSH SI
PUSH DI
MOV DI,0
MOV CX,10000D
CALL DEC_DIV
MOV CX,1000D
CALL DEC_DIV
MOV CX,100D
CALL DEC_DIV
MOV CX,10D
CALL DEC_DIV
MOV CX,1
CALL DEC_DIV
POP DI
POP SI
POP CX
POP BX
RET
BINIDEC ENDP
;---------------------
DEC_DIV PROC NEAR ;把BX中的一个二进制数除以相应的十的幂,并且在屏幕上显示一位商,余数保存在BX寄存器中
MOV AX,BX
MOV DX,0
DIV CX
MOV BX,DX
MOV DL,AL
ADD DL,30H
MOV AH,2
INT 21H
RET
DEC_DIV ENDP
;---------------------
CRLF PROC NEAR ;回车换行子程序
MOV DL, 0DH
MOV AH, 2
INT 21H
MOV DL, 0AH
INT 21H
RET
CRLF ENDP
;---------------------
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -