十六进制问题
从键盘输入一个数(十进制),将其转换为十六进制后输出在显示屏上。
请大家给出转换的算法和代码
我觉得无规律可寻
0---9 0---9
10--15 A---F
16--25 10--19
26--31 1A--1F
....
谢了!
[解决办法]
提示:
1、首先可以構造一個十進數與十六進數的映射表:
table db 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
2、根據接收字符串的緩沖區中的字符進行循環操作,(舉個例子如輸入的十進數是26,則用除16取余法分別得到十六數的各位數。)
1).26/16=1 余10 將ah=10傳送給bx,然后再mov dl,[bx]、xor dh,dh取得十六進數最低位,然后壓棧
2).1/16=0 余1 將ah=1傳送給bx,同樣可用mov dl,[bx]、xor dh,dh取得十六進數次低位;
然后壓棧
3).循環出棧顯示即可以屏幕上看到由十進數26轉換後的十六進數1A
3、在第2點中用到了div指令,關於div指令的細節LZ自己看書!
[解决办法]
楼上的说的已经非常详细了:
(1)输入一个数十进制(无符号)将其转换为十六进制的方法是:将十进制数除以16, 保留余数作为当前位十六进制数字的值,重复这个过程直到商为0为止.
(2)如果是有符号的十进制转换为十六进制:则首先将十进制整数的绝对值转换为十六进制,再进一步计算该十六进制数字的补码.(关于补码你查一书就知道了.)
楼上所说的:
( '2 '-30H)*10~1=20
'2 '-30H这是因为数字0的ASCII值为30H,1-9的ASCII值是依次递增的.数字2的ASCII值为32H,
32-30就得到了数字2.