汇编语言指令中的地址和指令中的地址码的区别

来源:百度知道 编辑:UC知道 时间:2024/06/17 22:45:08
如题,分别解释指令中的地址和指令中的地址码,以及区别。2009年6月25号中午12点此题目过期,有最佳答案变采纳。
答非所问。

指令中的地址,就是和指令中的立即数类似的东西,写在指令里面一个数。
指令中的地址码不知道什么概念,Intel的参考手册上就没有定义!
最接近的是Codes for Addressing Method
参考:
Intel,Software Developer's Manual Volume 2
我简要的说一下,有好几页纸。

指令可能包括几个部分,一般有
Opcode ,操作字(必须)
寻址方式字,说明操做数是内存/寄存器/立即数
编码,根据寻址方式字不同,可能是寄存器编码/内存地址编码/立即数编码

附录B有机器码编码格式,其中
地址受到ModRM的影响(尤其是段跨越之类)。所以完整的地址不仅仅包括一个立即数,还要包括段地址。是否这个是你说的地址码呢?总之地址码的概念很局限,不知道从哪里来。

唯一的有地址码的解释:
http://baike.baidu.com/view/178200.htm
按照里面的解释,寄存器/立即数/内存/寻址方式都是地址码的一部分

一、单字节指令,只有操作码,没有地址码,或者说,地址码是含在操作码之中。如,

1、CLD、STI等对状态寄存器操作的指令,地址就是状态寄存器,是隐含的。

2、LODSB、LODSW、LODSD等字符串操作指令,指令中没有地址码,其操作数地址隐含在DS:SI、AL、AX、EAX中;而STOSB、STOSW、STOSD等字符串操作指令,操作数地址隐含在ES:DI、AL、AX、EAX中;而数据块传送指令REP MOVS,操作数地址隐含在DS:SIES:DI中。

二、多字节指令,操作码与地址码是组合在一起的。若有立即数,立即数直接写在指令码之后。同样的操作,其指令码与寻址方式有关。凡涉及寄存器的,每个寄存器都有其固定的地址码。参见下图:

同样的数据传送指令MOV,不同的操作数有不同