第1个回答 2012-12-24
输入之后回车!
ASSUME CS:CODE,DS:DATA,SS:STACK
DATA SEGMENT
TEMP DB 4 DUP(0)
MSG1 DB 10,13,'PLEASE INPUT A HEX NUMBER ',10,13 ,'$'
MSG2 DB 10,13,'THE BINARY NUM IS ',10,13,'$'
ERR DB 10,13,"THE NUM YOU INPUT ISN'T HEX",10,13,'$'
H16 DW 16
DATA ENDS
STACK SEGMENT
DB 128 DUP (0)
TOS DB '$'
STACK ENDS
CODE SEGMENT
CHANGE PROC
MOV CX,0
L:
SHR AX,1
JC P1
MOV BX,30H
PUSH BX
JMP CONT
P1:
MOV BX,31H
PUSH BX
CONT:
INC CX
CMP AX,0
JNE L
O:
POP DX
MOV AH,2
INT 21H
LOOP O
R:
RET
CHANGE ENDP
ERROR PROC
MOV DX,OFFSET ERR
MOV AH,9
INT 21H
RET
ERROR ENDP
P09 PROC
PUSH AX
MOV AX,BX
POP BX
AND BX,000FH
MUL H16
ADD AX,BX
MOV BX,AX
RET
P09 ENDP
Paf2 PROC
PUSH AX
MOV AX,BX
POP BX
AND BX,00FFH
MUL H16
SUB BL,37H
MOV BH,0
ADD AX,BX
MOV BX,AX
RET
Paf2 ENDP
Paf1 PROC
PUSH AX
MOV AX,BX
POP BX
AND BX,00FFH
MUL H16
SUB BL,87
MOV BH,0
ADD AX,BX
MOV BX,AX
RET
Paf1 ENDP
START:
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SP,OFFSET TOS
MOV DX,OFFSET MSG1
MOV AH,9
INT 21H
MOV BX,0
L1:
MOV AH,1
INT 21H
CMP Al,13
JE NEXT
CMP AL,'0'
JB ERRO
CMP AL,'9'
JNG P
CMP AL,'A'
JB ERRO
CMP AL,'F'
JNG PAF
CMP AL,'a'
JB ERRO
CMP AL,'f'
JNG Pa
ERRO:
CALL ERROR
JMP EXIT
Pa :
CALL Paf1
JMP L1
PAF:
CALL PAF2
JMP L1
P :
CALL P09
JMP L1
NEXT:
MOV DX,OFFSET MSG2
MOV AH,9
INT 21H
MOV AX,BX
CALL CHANGE
EXIT:
MOV AX,4C00H
INT 21H
CODE ENDS
END START本回答被提问者和网友采纳
第2个回答 2011-12-13
BEGIN: MOV BX, 0 ;用于存放四位的16进制数
MOV CH, 4
MOV CL, 4
INPUT: SHL BX, CL ;将前面输入的数左移4位
MOV AH, 1 ;从键盘取数
INT 21H
CMP AL, 30H ;<0吗?
JB INPUT ;不是‘0~F’的数重新输入
CMP AL, 39H ;是‘0~9’吗?
JA AF ;不是,转‘A~F’的处理
AND AL, 0FH ;转换为:0000B~1001B
JMP BINARY
AF: AND AL, 1101 1111B ;转换为大写字母
CMP AL, 41H ;又<A吗?
JB INPUT ;不是‘A~F’的数重新输入
CMP AL, 46H ;>F吗?
JA INPUT ;不是‘A~F’的数重新输入
AND AL, 0FH ;转换为:1010B~1111B
ADD AL, 9
BINARY: OR BL, AL ;将键盘输入的数进行组合
DEL CH
JNZ INPUT
DISPN: MOV CX, 16 ;将16位二进制数一位位地转换成ASCII码显示
DISP: MOV DL, 0
ROL BX, 1
RCL DL, 1
OR DL, 30H
MOV AH, 2 ;进行显示
INT 21H
LOOP DISP
STOP: RET