微机原理——十进制数转十六进制
实验环境依旧是
下面是我给出的代码,代码行数比较多但是很容易理解
小伙伴们可以尝试利用循环结构或者子程序,缩短代码行数
DATA SEGMENT
X DW 456 ; 测试数据
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DW 512 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV BX,X
AND BX,0F000H ;保留前四位,注意0F000H不能写成F000H(此时也可利用右移取出前四位,有兴趣的小伙伴可以尝试着改一下)
MOV CL,12
SHR BX,CL
MOV DL,BL
CMP BX,0009H ;与9作比较(小于等于9时,,输出为0~9,此时将数加上30H转化为字符后输出,大于9时则应输出A~F,此时需要加37H转化为字符后输出)
JBE DIS
ADD DL,0007H
DIS:ADD DL,30H
MOV AH,2
INT 21H
MOV BX,X
AND BX,0F00H ;保留高八位中的后四位
MOV CL,8
SHR BX,CL
MOV DL,BL
CMP BX,0009H
JBE NEXT1
ADD DL,0007H
NEXT1:ADD DL,30H
MOV AH,2
INT 21H
MOV BX,X
AND BX,00F0H ;保留低八位中的前四位
MOV CL,4
SHR BX,CL
MOV DL,BL
CMP BX,0009H
JBE NEXT2
ADD DL,0007H
NEXT2:ADD DL,30H
MOV AH,2
INT 21H
MOV BX,X
AND BX,000FH ;保留末尾四位
MOV DL,BL
CMP BX,0009H
JBE LAST
ADD DL,0007H
LAST:ADD DL,30H
MOV AH,2
INT 21H
MOV AH,2
MOV DL,'H' ;在末尾输出H,表示输出结果为16进制数
INT 21H
MOV AX,4C00H
INT 21H
CODE ENDS
END START
测试结果如下
希望对初学微机原理的小伙伴有帮助!