我读了题为“介绍80x86汇编语言与计算机体系结构”,由理查德·C·德默教科书MOV指令 - 大会
我有一个关于立即到内存“MOV”问题e操作码。这里我所指的文本部分也是:
“继续下图4.1,下一行是立即到内存的移动,每条指令都有一个操作码C6,一个ModR/M字节,附加地址字节如果需要的话),最后是一个包含立即数操作数的字节,地址的编码方式如上所述,用于存储器到寄存器的移动,例如,smallCounter引用存储器中的一个字节和指令mov smallCounter,100汇编程序将生成7(3 + 4)字节的目标代码,其中C6 05 xx xx xx xx 64,其中xx xx xx xx代表内存中的地址,64代表字节大小的十六进制版本的ModR/M字节05为00 000 101,Mod = 00和R/M = 101,用于不需要Reg字段并设置为000的直接存储器寻址。作为另一示例,考虑mov BYTE PTR [edx],-1内存目标使用寄存器间接模式。操作码仍然是C6,而立即字节(总是最后一个)现在为FF。第二个字节是ModR/M字节,对于寄存器间接来说,Mod = 00,对于EDX,Reg = 000(未使用)和R/M = 010,使得00 000 010或02.对象代码在那里对于C6 02 FF。 “-page 92,第4章,第1节 - 复制数据
图4.1 - 题为与字节目的地MOV指令 - 是与四列的图表,第一个列出的目的地,所述第二列表的源极,所述第三。列出操作码,和第四列表的目标代码的字节以上部分参照太图表中的行是: 目的地:存储器字节来源:立即字节操作码:对象代码的C6字节: 3 +
原谅我把所有这些放在一边,但我希望你和我能够在我的书所说的同一页上。我理解smallCounter的部分,但是让我困惑的是mov BYTE PTR [edx],-1的目标代码在内存中没有地址。它处于间接模式,所以edx将作为一个指针,为什么目标代码不包含它所指向的内存中的地址?这只适用于像smallCounter的操作码具有地址的变量吗?为什么总体操作码与smallCounter与其他语句相比的方式是?
谢谢 -Dan
谢谢,我现在明白了:) –