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