📄 从键盘输入两个十六进制数,转换为十进制显示在屏幕.asm
字号:
DATA SEGMENT ;从键盘输入两个十进制数,相加后结果显示在屏幕上
ECH01 DB "INPUT THE FIRST NUMBER A:$" ;算法实现:先把两个十进制数转化为十六进制,相加后在转化为十进制
ECH02 DB "INPUT THE NEXT NUMBER B:$"
ECH03 DB "A ADD B EQU:$"
ECH04 DB "TOO BIG!$"
DATA ENDS
CRLF MACRO
MOV AH,2
MOV DL,0AH
INT 21H
MOV AH,2
MOV DL,0DH
INT 21H
ENDM
CODE SEGMENT
ASSUME CS:CODE
START: MOV AX,DATA
MOV DS,AX
REPEAT: MOV AH,9
MOV DX,OFFSET ECH01
INT 21H
CALL DECBIN
MOV SI,BX
XOR BX,BX
XOR AX,AX
MOV AH,9
MOV DX,OFFSET ECH02
INT 21H
CALL DECBIN
CALL CHGN
CRLF
MOV AH,9
MOV DX,OFFSET ECH03
INT 21H
CALL BINHEX
JMP REPEAT
DECBIN: MOV BX,0
MOV BP,10
NEW1: MOV AH,1
INT 21H
SUB AL,30H
JB EXIT
CMP AL,9
JA EXIT
CBW
XCHG AX,BX
MUL BP
JC ERROR
ADD BX,AX
JC ERROR
JMP NEW1
EXIT: RET
ERROR: MOV AH,9
MOV DX,OFFSET ECH04
INT 21H
MOV AH,4CH
INT 21H
CHGN: MOV AL,0 ;将两个十六进制数相加
ADD BX,SI
JC ERROR
MOV AX,BX ;将两数之和的十六进制数转化为十进制
XOR BX,BX
MOV CH,4
MOV CL,4
RETRY: SHR BX,CL
MOV DX,0
DIV BP
ROR DX,CL
OR BX,DX
DEC CH
JNZ RETRY
MOV SI,AX
ENCH: RET ;转换结束
BINHEX: MOV CH,4 ;输出结果
MOV CL,4
MOV AX,SI
CMP AL,0
JG PRINT
ROTATE: DEC CH
ROL BX,CL
MOV DL,BL
AND DL,0FH
CMP DL,0
JG PRINT
CMP CH,0
JNG PRINT
JMP ROTATE
ROTATE1:DEC CH
ROL BX,CL
MOV DL,BL
AND DL,0FH
PRINT: ADD DL,30H
MOV AH,2
INT 21H
CMP CH,0
JG ROTATE
RET
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -