二进制转换16进制汇编

mov ch, 4
rotate: mov cl, 4
rol bx, cl
mov al, bl
and al, 0fh
add al, 30h
cmp al, 3ah
jl printit
add al, 7h
printit: mov dl, al
mov ah, 2
int 21h
dec ch
jnz rotate
把AX中的2进制转换成16进制 为什么加的是30H 为什么和3AH比较啊?~~然后为什么加7H?~~

16进制有数字0~9,还有a~f,一共16个数码。转换的时候,先统一加上30h,然后要判断是数字还是字母,数字的ASCII码和字母的ASCII码可不是一样的哦。所以和3ah比较。如果是数字,不变;如果是字母,再加上7h(你的程序是用大写字母表示,若是小写字母,那应该再加上27h)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-12-02
数符在输出时是按其ASIIC码在字库中找到代码后输出的。16进制有数字0-9,还有字母A-F,一共16个数符。数字0-9对应的ASIIC码为30H-3AH,字母A-F对应的ASIIC码为42H-48H(A与9之间相差7)。先将转换所得的数值加30H,然后判断是数字还是字母,如果值不大于3AH则该位16进制数是数字0-9,如大于3AH则该位16进制数是字母A-F,其ASIIC码应该加上7(若是小写字母a-f,则应该加上27H)。
第2个回答  2008-12-02
加30H是为了转化为ascii码,和3AH比较是为了判断对应的是否是A…F的十六进制,而加7H,则是为了转化字符A…F的ASCII码值。
相似回答