das指令的疑惑

dingwood 2011-11-23 11:42:47
das 指令的用法
如下:
mov ax,f
mov bl,2
sub al,bl
das

执行sub al,bl后,查看ax 的结果为ax=000D
但das后为什么变成ax=0007了呢。
我认为会降000D变成0013啊。十进制啊。
请大侠明示。
...全文
167 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dingwood 2011-11-25
  • 打赏
  • 举报
回复
BCD码我明白,
先听我说说我的理解啊。

mov al,15 ;我理解是将al的内容置为15H,是16进制的,内存中对应的AL的二进制表示为0001 0101,巧合的16进制表示和BCD码的编码一致。 。。。至于为什么一致,我认为对于BCD码采用8421码,和16进制的权值一样大。而高低位的影响也不存在了。
mov bl,9 ;将bl 的内容置为2H,内存中对应的BL二进制表示为0000 1001 ,
sub al,bl ;将al的值减去bl,显然15H-9H得到的是CH, 运算后AL中的值为0000 1100 ,
das ;

我的理解错误在das将结果转为BCD码表示。
而经过我搜索后发现定义是这样的:
执行之前必须先执行SUB或SBB指令,减法指令必须把两个压缩的BCD码相减,并将结果存放在AL寄存器中。
我的理解是:将15和9看成10进制的数,然后做减法得到6.

你认为这么理解对嘛?
gsy999 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dingwood 的回复:]
BCD码我明白,
先听我说说我的理解啊。

mov al,15 ;我理解是将al的内容置为15H,是16进制的,内存中对应的AL的二进制表示为0001 0101,巧合的16进制表示和BCD码的编码一致。 。。。至于为什么一致,我认为对于BCD码采用8421码,和16进制的权值一样大。而高低位的影响也不存在了。
mov bl,9 ;将bl 的内容置为2H,内存中对应的BL二进制表示为000……
[/Quote]
“将15和9看成10进制的数,然后做减法得到6.” 是的。

数值在计算机中是死的,就是0,1的序列,关键是程序员将它们作为什么概念的对象来管理。你把它作为无符号数,就要按规定使用适用无符号数的指令和操作顺序,..,把它作为BCD数,就要按照规定使用适用BCD数的指令和操作。这是我的理解。




dingwood 2011-11-25
  • 打赏
  • 举报
回复
恩。谢谢你。
gsy999 2011-11-24
  • 打赏
  • 举报
回复
什么是BCD码?就是用二进制编码来表示10进制数形式
10进制的15,压缩的BCD码来表示就是:
0001 0101 ,就是前四位表示1,后四位表示5,合起来就表示10制的15
未压缩的就是一个字节表示一个10进制数,那10进制的15
00000101 00000001(前5后1)
你超过了9,那就不是BCD码了
dingwood 2011-11-24
  • 打赏
  • 举报
回复
不明白。。。为什么 你说的15 和2 都是压缩的BCD码呢。我认为是16进制的 。sub al,bl后
al的值为000C,但das后为什么就变成0006了呢。我搞不懂这。用二进制体现十进制。我觉的首先得把000C变成十进制的,然后转化成二进制的吧?
那应该是000C改成 十进制的为 12,然后改成二进制的,变成了 1100,为什么会事0006呢。
gsy999 2011-11-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 dingwood 的回复:]
das 指令的用法
如下:
mov ax,f
mov bl,2
sub al,bl
das

执行sub al,bl后,查看ax 的结果为ax=000D
但das后为什么变成ax=0007了呢。
我认为会降000D变成0013啊。十进制啊。
请大侠明示。
[/Quote]

mov al,15 ;这个15就是压缩的BCD,不能用F,电脑不管什么BCD,但程序员头脑要清楚此时al代表什么玩艺儿。
mov bl,2 ;虽是2,但是就看作是压缩过的BCD数
sub al,bl ;指令还是那个指令,结果自然是 al = 0013
das ;al = 0013 (这是因为举例不具特殊性,所以看不出什么改变)
;------------------------
mov al,15 ;这个15就是压缩的BCD,不能用F
mov bl,9 ;虽是9,但是就看作是压缩过的BCD
sub al,bl ;指令还是那个指令,结果自然是 al = 000C ,SUB不管什么BCD
das ;al = 0006 这回清楚作用了

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧