| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 15858 人关注过本帖
标题:用汇编语言把二进制转换为十进制
只看楼主 加入收藏
蓝然籽
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2015-4-10
结帖率:40%
收藏
已结贴  问题点数:10 回复次数:13 
用汇编语言把二进制转换为十进制
二进制转化为十进制用除法,就是除以100,然后除以10。假设43H是入口,出口是44H,45H,如果用44H的低四位存放十进制的百位,用45H的高四位和低四位分别存放十进制的十位和个位,应该怎么把分离出来的数分别存进高四位和低四位,应该用什么指令?分离出来的数放在A里面时,是占的高位还是低位?刚学汇编,求指导……
搜索更多相关主题的帖子: 十进制 二进制 
2015-04-28 18:31
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:2 
通常数据是以二进制的方式储存的,显示或打印时才根据需要转换成其他制式。你如果想以十进制的方式来保存数据,存放的格式完全由你自行决定,没有什么标准。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-04-28 22:33
xumengxue
Rank: 2
等 级:论坛游民
帖 子:4
专家分:16
注 册:2015-4-29
收藏
得分:2 
这个问题我朋友懂
2015-04-29 15:33
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
以下是引用xumengxue在2015-4-29 15:33:53的发言:

这个问题我朋友懂
涉嫌灌水

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-04-29 16:50
蓝然籽
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2015-4-10
收藏
得分:0 
回复 2楼 hu9jj
恩,就是为了显示出数字,才用的十进制,现在已经弄出来了~
2015-04-29 20:39
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:2 
    二进制转化为十进制,照楼主说的先除以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 编辑 ]
2015-04-30 12:57
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
以下是引用边小白在2015-5-1 06:51:12的发言:

这行吗?验证没有?
我正在努力学汇编,正努力理解二进制十进制呢,楼主的意思是不是将FF用255表示出来呢?
1、行,我编过这道程序,并在DEBUG里单步跟踪过;
2、对,就是这个意思。
2015-05-01 07:48
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
    个、十、百位指的是十进制数的数位。十进制数字在计算机中是以二进制形式存储的,如十进制数字12,在计算机中的表示就是(以字节为例)0000 1100B,十六进制表示就是0CH,现在我们要把这种计算机中的表示转化成十进制表示形式,即表示成0001 0010B,十六进制就是12h。前面所讲个、十、百位是指转换过程中分离出来的数位值。下面是具体的示例:
    ……
    mov    ax,0C            ;要转化的数字
    mov    bl,0A            ;10作为除数存储在寄存器bl中
    div    bl               ;ax中的数值作为被除数除以bl中存放的除数10,商1(即分离出来的十位上的数字)存放在al中,余数2(即分离出来的个位上的数字)存放在
                            ;ah中            
    mov    cl,4
    shl    al,cl
    mov    [45],al         ;以上3步将存放在al中的商(分离出来的十位上的数字)左移4位,以便存放在[45h]单元的高4位
    or     [45],ah         ;将存放在ah中的余数(分离出来的个位上的数字)存放入[45h]单元的低4位
    ……
    以上代码中的内存寻址采用的是立即寻址,没有段前缀,只能在DEBUG环境下使用,并且DEBUG环境下默认都是十六进制,所以十六进制数45后面不需要加H。

[ 本帖最后由 取名字 于 2015-5-2 15:55 编辑 ]
2015-05-02 00:13
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:2 
按楼主的意思,完成该功能的代码如下:
xor ah,ah
mov bl,10
mov cl,4
mov al,[43h]  //从入口获取需要变换的数字
div bl
mov [45h],ah  //得到个位,放到位置45的低4位
xor ah,ah
div bl
shl ah,cl
or [45h],ah  //得到十位,放到45的高4位
mov [44h],al  //al中是余下的百位,放到44处
int 3         //完成,在debug中验证通过。如果写通用的函数,建议不使用高位低位,应使用si指向二进制数,di指向变换后存储的位置(开始为反序存储,需执行一次反序操作)


能编个毛线衣吗?
2015-05-02 05:49
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
还是wmf2014版主周到仔细!
2015-05-02 08:18
快速回复:用汇编语言把二进制转换为十进制
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017101 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved