📄 hw2-10.asm
字号:
TITLE BINARY TO DECIMAL
DATA SEGMENT
P1 DB 'Input Binary(16 BIT): $'
BIN16 DW ?
DEC5 DB 5 DUP(0)
P2 DB 0AH,0DH,'The Result is: $'
DECASC DB 0AH,0DH,5 DUP(0),'$'
DATA ENDS
STACK1 SEGMENT PARA STACK
DW 20H DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK1,DS:DATA
MAIN: MOV AX,DATA
MOV DS,AX
MOV CH,16 ;设置二进制数ASCII码输入个数
XOR BX,BX ;将BX寄存器清零
LEA DX,P1 ;显示提示信息
MOV AH,09H
INT 21H
LOP1: MOV AH,01H ;DOS系统功能调用,从键盘输入二进制数
INT 21H
CMP AL,'0' ;若输入字符小于‘0’,则重新输入
JE STEP1
CMP AL,'1' ;若输入字符大于‘1’,则重新输入
JNE LOP1
STEP1: SUB AL,30H ;转换成二进制数
SHL BX,1 ;将BX寄存器左移一位
OR BL,AL ;与原二进制数组合成新的二进制数
DEC CH ;输入字符满了16个吗?若没有,继续
JNZ LOP1
MOV BIN16,BX ;保存转换后的二进制数
CALL BINtoDEC ;调用函数
CALL DECtoASC
LEA DX,P2
MOV AH,09H
INT 21H
LEA DX,DECASC
MOV AH,09H
INT 21H
MOV AH,4CH ;结束程序
INT 21H
BINtoDEC PROC
MOV CX,5
LEA DI,DEC5+4
MOV AX,BIN16
MOV BX,10
LOP2: XOR DX,DX
DIV BX
MOV [DI],DL
DEC DI
LOOP LOP2
RET
BINtoDEC ENDP
DECtoASC PROC
LEA SI,DEC5
MOV CH,5
LEA DI,DECASC
LOP3: MOV AL,[SI]
ADD AL,30H
MOV [DI],AL
INC SI
INC DI
DEC CH
JNE LOP3
RET
DECtoASC ENDP
MOV AH,4CH
INT 21H
CODE ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -