汇编语言16进制到10进制转换

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档