欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

南邮汇编第一次实验(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