从键盘上接收4位16进制数,并在屏幕上显示与之等值的二进制数

;从键盘上接收4位16进制数,并在屏幕上显示与之等值的二进制数
DATA SEGMENT
NUM  DW 0
CRLF DB 0AH,0DH,'$'
DATA ENDS

STACK SEGMENT PARA STACK
      DW 128 DUP(?)
TOP   LABEL WORD
STACK ENDS

CODE SEGMENT
          ASSUME CS:CODE,SS:STACK,DS:DATA
MAIN PROC FAR
START:
         MOV AX,DATA
MOV DS,AX
 
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
 
MOV CX,4       ;循环接收4位16进制数
L0: MOV AH,1
INT 21H
CMP AL,40H     ;若为A,B,C,D,E,F,则要先减去7再减去30H才能转化为实际数
JG  L1         ;若为数字,则直接减去30H可转化为实际数
JL  L2
L1:    SUB AL,07H
L2:    SUB AL,30H
         PUSH AX
 
MOV AX,NUM     ;原有的16进制数向左移动一位,即*16
MOV BX,16      ;再加上当前从键盘输入的数
MUL BX         ;举一反三,输入为8进制数时则*8
POP BX
ADC AL,BL      ;从键盘输入的数实际上存放在低8位中,相加时用ADC
MOV NUM,AX
LOOP L0
 
MOV AH,9
LEA DX,CRLF
INT 21H
 
MOV CX,16
MOV BX,NUM
L4: MOV DL,31H      ;移位输出,CF=1时直接输出1,CF=0时将DL-1->DL再输出0
SAL BX,1        ;进制之间的转化多与移位运算相关
JC  L3
         DEC DL
L3:  MOV AH,2
INT 21H
LOOP L4
 
MOV AX,4C00H
INT 21H
CODE ENDS
MAIN ENDP
         END START
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章