二进制转化为十进制,照楼主说的先除以100,再除以10,那只能用于已知被转化数为多少的情况,如果不知道被转化数为多少的话,这种方法就不适用了,应该用被转化数不断的除以10,将每次的余数存储起来(每次的余数就是被转化数各个数位上的值,第一次除以10得到的余数是个位上的,第二次除以10得到的余数是十位上的,依此类推),直到商为0说明除完了。但因为这样先得到的是个位上被分离出来的数字,所以数字分离的顺序就是个位、十位、百位……,我们可以利用栈将这个顺序理顺:将每次得到的余数依次入栈,完成之后再依次出栈。利用这种方法,要注意当被转化数较大时可能发生除法溢出,这种情况的解决办法在王爽老师《汇编语言》一书中有提到。
用上述方法分离出来的数字按题目要求存储的话可以按如下操作:
xor ax,ax ;ax清零,以暂存分离出来的个位和十位上的数字
mov al,个位
mov ah,十位
mov cl,4 ;cl中为移位的位数
shl ah,cl
or al,ah ;将ah中存储的十位上的数字与al中存储的个位上的数字合并到一块,
mov [45h],al ;按要求存储到指定内存单元,执行后,45h字节单元的低4位就是分离出来的个位上的数字,45h单元的高4位就是分离出来的十位上的数字
mov al,百位
mov [44h],al ;将分离出来的百位上的数字存储到44h字节单元
数据在内存单元中存储时都是从低位到高位的。
[
本帖最后由 取名字 于 2015-4-30 12:58 编辑 ]