汇编网首页登录博客注册
feiwei的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
好友圈
文章收藏
友情链接

[2008-02-19 01:01] 推荐博文 相同的汇编指令VS不同的机器代码 分析

图片载入中
01c0 add ax,ax
03c0 add ax,ax
简单的来说,就是 01 03都是add
01d8  add ax,bx
03c3  add ax,bx
简单的来说
就是 01 03都是add
    d8 c3 是bx+ax 结果放入 ax
          和ax+bx 结果放入 ax
具体分析在图里

谁来写篇仔细的教程啊,偶 ,困了,晕了,睡了。

看懂的跟些自己造出来的类似情况。
评论次数(6)  |  浏览次数(2175)  |  类型(汇编作业) |  收藏此文  | 

[  mayawenming   发表于  2008-02-19 10:22  ]

受教了。

[  starrynight   发表于  2008-02-19 10:51  ]

那是不是每一个带有两个操作数的汇编语言操作符都对应着不同的机器码,并且每一条双操作数运算指令都有两个机器码与之对应?

类似情况,我造了一个 mov cx,ax
对应两组机器码:
89C1
8BC8

[  cnm12365   发表于  2008-02-19 23:49  ]

貌似没看明白,等我学好在说咯。

[  游客   发表于  2008-03-20 10:48  ]

好像有点明白了。
在将一条双操作数(寄存器)的汇编指令,在编译成机器指令的时候,并不是一定按照我们汇编指令指定的顺序,比如说add ax,bx 就可以被解释成
1.将ax与bx相加,结果放到ax中
2.将bx与ax相加,结果放到ax中
这两种,结果相同,但是过程略有差别。到底采用了那种,可能跟cpu当时处理的具体情况有差别,在某种处理方式下,在不影响计算结果的前提下,找到一个更好的策略进行运算。
不知道这么理解对不对呢?

[  游客   发表于  2008-03-20 11:02  ]

错了。我理解错了!
应该是对于不同的机器码在统一汇编指令集和的规范下,有可能出现两个机器码对应一条指令的情况。
机器码代表的操作
1.将ax与bx相加,结果放到ax中 
2.将bx与ax相加,结果放到ax中 
自然有两组不同的机器码,但是,在我们现在学习的8086汇编中,add reg1,reg2 指令的结果是将reg1+reg2的结果放入到reg1中(即前面的那个操作数)。显然,机器码的操作过程1和我们的汇编指令的顺序是一致的,但是,机器码的操作过程2和我们的汇编指令有点出入,但是,其结果是完全一样的。假如我们的汇编指令有一个类似addx的指令,将reg2+reg1的结果放到reg2里面,那么对应的反汇编就会显得更精确了吧。

[  游客   发表于  2008-03-26 11:34  ]

通过这个推出cpu的指令集是不能简单用汇编指令来表征的。

机器指令的设置或者说cpu指令的设置实根据相应功能确定的,(当一个操作是处理同一问题,比如 计算一个reg1加另一个reg2,势必要关心结果的保存,哪么当同时出现两个可以选择的reg时,是选择结果送reg1,送reg2,还是在两个reg1,reg2都保存,我想这个抉择是cpu制造者必须考虑的。看博主文章中的情况,可见出现了前两种,此外一条汇编指令是有两种解读的,汇编这可能乱了。好在有两种机器码。
说明一个问题,汇编指令只是指令的标示,不是指令的身份ID,可能会出现同名不同实的情况。

我的推断缺少些事实证据,呵呵,饿了 ,回来搜集一下。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码