南邮汇编第一次实验(3.1).从键盘输入一个16位二进制数,然后转换成等值的十进制显示
程序员文章站
2022-06-20 20:23:24
...
.586
CMPD MACRO X ;宏定义比较法法实现二进制转化为十进制
LOCAL LAST,NEXT
MOV DL,0 ;存储十进制的值
LAST:CMP BX,X
JC NEXT
INC DL
SUB BX,X ;依次算出BX中有多少X
JMP LAST
NEXT:ADD DL,30H ;显示BX中X个数
MOV AH ,2
INT 21H
ENDM
DATA SEGMENT USE16
MSG DB 'Please Input A 16-bit Binary Number:',0DH,0AH,'$' ;设置请输入信息
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
BEG: MOV AX,DATA
MOV DS,AX
MOV AH,9
MOV DX,OFFSET MSG ;显示请输入
INT 21H
MOV CX,16 ;CX控制LOOP循环次数
MOV BX,0 ;BX作为存储二进制的值
AGA: MOV AH,1 ;逐个二进制数字输入,并显示
INT 21H
SUB AL,30H ;将ASCII值转化为数字
SHL BL,1 ;每输入一个二进制数字,逻辑左移一位
ADD BL,AL ;将数据累加存入到BL中,
CMP CX,9 ;CX小于9,说明存满8位,而BL只能存8位,所以将BL移入BH中
JZ MOVE
LPA: LOOP AGA
MOV AH,2
MOV DL,'B'
INT 21H
MOV AH,2
MOV DL,'='
INT 21H
CMPD 10000 ;二进制一共16位,最大是65536,所以从10000开始比较
CMPD 1000
CMPD 100
CMPD 10
CMPD 1
JMP EXIT
EXIT: MOV AH,2
MOV DL,'D'
INT 21H
MOV AH,4CH
INT 21H
MOVE PROC
MOV BH,BL ;将BL内容移入BH
MOV BL,0 ;将BL归0,重新保存输入的二进制数
JMP LPA ;跳转回到循环中
MOVE ENDP
CODE ENDS
END BEG
上一篇: 南邮微机实验1