


- [e56004474] 我看明白了,我选择做上帝。 03/20 11:37
- [游客] 请问 feiwei 你这个程序到底是xp下模拟或虚拟dos环境还是安装xp和dos双系统?如果是安装 12/17 23:18
- [mywiil] 我们得创造出第二头狮子,给不知道反抗的羊一个选择的权利。 12/08 10:34
- [游客] 北京北大青鸟 http://www.xzhtbenet.com 12/08 13:58
- [qiangzi] 这个怎么访问其他盘呢,我一进入其他盘就提示invalid drive specification,该 02/03 22:06
- [游客] 下不下来 11/11 18:48
- [sissim] 下载下来看看,先谢了! 10/23 15:42
- [游客] 是做什么用的啊? 10/16 13:29
- [mess] 应该也可以吧,也都是绿色版,何不试试 10/09 11:24
- [inuyashall] 只能在xp中用么?有没有能在vista下使用的啊? 08/06 20:59
- [891204dh] 我的XP进不了DOS,这是为什么呢? 08/08 03:29
- [811179242] 那个“纯Dos下的汇编操作环境”提取不了了 系统维护 可以直接传给我吗?多谢了!!!我的油箱8111 12/07 12:31
[2008-02-19 01:01]
相同的汇编指令VS不同的机器代码 分析
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
具体分析在图里
谁来写篇仔细的教程啊,偶 ,困了,晕了,睡了。
看懂的跟些自己造出来的类似情况。
[ 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,可能会出现同名不同实的情况。
我的推断缺少些事实证据,呵呵,饿了 ,回来搜集一下。