汇编2转16

来源:百度知道 编辑:UC知道 时间:2024/05/15 13:14:09
二进制转十六进制
BINIHEX PROC NEAR
PUSH CX
PUSH DX
MOV CH,4
ROTATE :MOV CL,4
ROL BX,CL 循环右移4位
MOV AL,BL 既然这里是把低8位送AL,那刚才的右移4位有什么意义?能不能只送4位?
AND AL,0FH 保存低4位 有什么意义?
ADD AL,30H
CMP AL,3AH 只要判断ASCII码>9即可 判断是否为A~F
JL PRINT
ADD AL,7H 是A~F就加7 为什么要加7?
高手帮帮我吧 我很困惑 越仔细越好

我就给你说说你注释的那几句嘛

ROTATE :MOV CL,4 ;cl装入移位的值,当移位大于一时必须要用CL存放
ROL BX,CL;循环右移4位——错,是循环左移四位,将最高四位移到BL低四位中
MOV AL,BL;既然这里是把低8位送AL,那刚才的右移4位有什么意义?能不能只送4位? ——刚才是左移的四位,是将最高四位移到BL中低四位了。不能单独传四位。最小单位是8位(一个字节)
AND AL,0FH;保存低4位 有什么意义? ——保存低四位的意义在于提取出第一个十六进制数的四个二进制位(前面你理解错了),只要你知道这句的功能是保存低四位,你想想另外的方面,它屏蔽了高四位
ADD AL,30H
CMP AL,3AH; 只要判断ASCII码>9即可 判断是否为A~F ——3A对应的字符‘:’,它之前就是十进制9,判断AL和‘:’的大小关系做进一步操作
JL PRINT ;AL比字符‘:’大就转到字符输出
ADD AL,7H;是A~F就加7 为什么要加7? ——比‘:’小就加7,加之后就编程A~F中的字符,充‘:’到A刚好相差7个字符。

你明白没有……?

decihex SEGMENT
ASSUME CS:decihex
main proc far
re: call decibin
call crlf
call binihex
call crlf
jmp re
main endp
decibin proc far
mov bx,0
newchar:
mov ah,01h
int 21h
sub al,30h
jl exit
cmp al,9d
jg exit
cbw
xchg ax,bx
mov cx,10d
mul cx
xchg ax,bx
add bx,