汇编语言16进制到10进制转换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 A L,30H
JL EXIT ;小于,不是数字也不是字母
CMP AL,9
JG E222;大于9,为字母
JMP E333;小于9,为数字
E222: SUB A L,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
ROTA TE: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