DEC2HEX SEGMENT
xp DB 0H
ASSUME CS:DEC2HEX
REPEAT: CALL DEC2BIN
CALL CRLF
CALL BIN2HEX
CALL CRLF
JMP REPEAT
DEC2BIN PROC NEAR
XOR BX,BX ;bx=0
NEWCHAR: MOV AH,1 ;输入指令,存放在al
INT 21H
SUB AL,30H
JL EXIT ;小于,不是数字也不是字母
CMP AL,9
JG E222;大于9,为字母
JMP E333;小于9,为数字
E222: SUB AL,7H;将字母代
的值转化为10进制下的数值
CMP AL,15
JG EXIT;大于十五,则不是16进制数,退出.
JMP E333;输入的是a到f,为16进制的数
E333: CBW ;ah=0000 0000
XCHG AX,BX ;ax=0000 0000 0000 0000 bx=0000 0000 0000 ****
;bx存放先输入的值,即高位.
MOV CX,16;cx=0001 0000
MUL CX ;cx*ax, dx放高16位, ax放低16位 (把ax左移4位)
; ax,bx互换,把之前的高位左移到更高位
XCHG AX,BX ;换回来,bx还是用来存放高位
ADD BX,AX
JMP NEWCHAR
EXIT: RET
DEC2BIN ENDP
BIN2HEX PROC NEAR
MOV CX,BX;存放的16进制的值给cx
ROTATE:XOR DX,DX;dx=0000 0000 0000 0000
MOV AX,CX;
MOV BX, 0AH
DIV BX;dx取余,ax取整
MOV CX,AX;取整的值给cx
ADD DL,30H
PUSH DX
INC XP
AND CX,CX
JNE ROTATE
PRINTIT: POP DX
DEC XP
CMP DL,20H
JE PRINTIT ; 这两句似乎没有用
MOV AH,2
INT 21H
CMP XP,0
JNE PRINTIT
RET
BIN2HEX ENDP
CRLF PROC NEAR
MOV DL,0DH;回车 ;
MOV AH,2 ;输出字符,dl
INT 21H
MOV DL,0AH ;换行
MOV AH,2
INT 21H
RET
CRLF ENDP
DEC2HEX ENDS
END REPEAT