从键盘上接收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
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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.