⽤汇编实现⼆进制数和⼗六进制数的相互转换
⽤汇编实现⼆进制数向⼗六进制数的转换
⼀、实现功能
1)实现⼆进制数向⼗六进制数的转换
2)实现⼗六进制数向⼆进制数的转换‘
⼆、设计分析
汇编语⾔中,字符在机器中都是以ascii码的⼆进制格式存储,但是汇编语⾔写的时候常⽤⼗六进制,因此需要好好看看ascii码的⼗六进制表。
特别是进制转换⼀定要注意,机器中存储的是数的⼆进制数本⾝,⽽我们输⼊输出的是数的ascii码的值,因此注意对寄存器中数的加减操作。
四位⼆进制数对应⼀位⼗六进制数,这⾥写的也是四位⼆进制和⼀位⼗六进制之间的的转换。
实现四位⼆进制数向⼗六进制数的转换
1. 先输⼊四位的⼆进制数,每输⼊⼀位⼆进制数就判断输⼊的时0还是1,即将该数和30H做⽐较。
2. 将DL赋值为0。如果输⼊的数是0,则将DL和0进⾏或运算(也可以不进⾏逻辑运算直接移位),将DL的最后⼀位置为0;如果输⼊
的数是1,则将DL和1进⾏或运算,将DL的最后⼀位置为1。然后将DL向左移⼀位。进⾏4次循环,级输⼊4为⼆进制数。四位输⼊完毕后,DL就得到输⼊数的⼆进制。
3. 判断DL是否在0-9之间,如果在则ADD DL,30H;如果⼤于0-9,则ADD DL,37H。(注意输出的字符的值是不等于机器中存放的⼆
进制的值,因此需要进⾏加法)最后输出对应的16进制的ascii码的值。如果⼩于0-9则JMP到程序开始重新输⼊功能序号。
4. ⼆进制转⼗六进制的流程图:
实现⼀个⼗六进制数向⼆进制数的转换
1. 先输⼊⼀个16进制数,判断输⼊字符的ascii码在30H-39H(0-9)之间,还是在41H-46H(A-F)之间,或者是在61H-66H(a-f)之
间。如果是第⼀种情况则SUB DL,30H,如果是第⼆种情况则SUB DL,37H,如果是第三种情况则SUB DL,57H。即可得到输⼊的⼗六进制数的值,⽽不是字符的ascii码的值。
2. 最后需要将DL中的值以⼆进制输出,因为机器⾥存放的就是以⼆进制存放。这⾥我⽤循环左移的⽅式,从⼆进制的⾼位到低位⼀次循
环打印。将循环左移⼀位后的数与1进⾏与运算,得到最低位的⼤⼩(也就是当前准备输出的位置的⼤⼩),然后加上30H,得到0/1的ascii码值,依次将DL的值进⾏输出。
3. 需要注意,第2步进⾏与运算的时候不能再原来的寄存器上进⾏,否则只能得到⼀位⼆进制数,后⾯⼏位都没法求了。
4. ⼀个⼗六进制数向⼆进制数的转换流程图:
三、设计分析
四位⼆进制数向⼗六进制数的转换
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
LEA DX,TIP
MOV AH,09H
INT 21H
MOV CH,4
MOV DL,0
INPUT:
MOV AH,1
INT 21H
CMP AL,30H
ascii是几位二进制编码JA L1 ;输⼊的是1
ROL DL,1
OR DL,0
JMP AGAIN
L1:
ROL DL,1
OR DL,1
AGAIN:
DEC CH
JZ PRINT
JMP INPUT
PRINT:
CMP DL,0
JB EXIT
CMP DL,9
JA COMPER1
ADD DL,30H
JMP HEN
COMPER1:
ADD DL,37H
HEN:
MOV AL,DL
LEA DX,TIP1
MOV AH,09H
INT 21H
MOV DL,AL
MOV AH,02H
INT 21H
EXIT:
MOV AH,4CH
INT 21H
CODE ENDS
END START
实现⼀个⼗六进制数向⼆进制数的转换
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK START:
MOV AX,DATA
MOV DS,AX
LEA DX,TIP
MOV AH,09H
INT 21H
INPUT:
MOV AH,1
INT 21H
CMP AL,30H
JB EXIT
CMP AL,39H
JA COMPER1
JMP CHANGE1 ;在0~9之间COMPER1:
CMP AL,41H
JB EXIT
CMP AL,46H
JA COMPER2
JMP CHANGE2 ;在A-F之间COMPER2:
CMP AL,61H
JB EXIT
CMP AL,66H
JA EXIT
JMP CHANGE3 ;在a~f之间
CHANGE1:
SUB AL,30H
JMP ENT
CHANGE2:
SUB AL,37H
JMP ENT
CHANGE3:
SUB AL,57H
JMP ENT
ENT:
LEA DX,TIP1
MOV AH,09H
INT 21H
MOV CH,8
MOV BL,AL
PRINT:
ROL BL,1
MOV DL,BL
AND DL,1
ADD DL,30H
MOV AH,02H
INT 21H
DEC CH
JZ EXIT
JMP PRINT
EXIT:
MOV AH,4CH
INT 21H
CODE ENDS
END START
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论