寄存器在汇编中的括号中是什么意思?

时间:2014-12-22 21:14:57

标签: assembly x86

我正在学习32位8086程序集(用于课程),而且我正在查看其中一个示例程序。将寄存器括在括号中是什么意思?

mov ebx, [ebx + 4]

另外,4是字面意思吗? (我们正在移动" ebx的价值加上4"进入ebx?)

3 个答案:

答案 0 :(得分:2)

它等同于以下C代码(假设32位int):

ebx = // whatever puts a value into ebx
ebx = *(int *)((char *)ebx + 4)

或者,如果您愿意,

ebx = *((int *)ebx + 1) // with C's type-aware pointer arithmetic

所以我们最终得到以下结论:

unsigned char *memory; // byte-addressable machine memory

EBX = [memory[ebx + 7] | memory[ebx + 6] | memory[ebx + 5] | memory[ebx + 4]]
       most significant byte                          least significant byte

请注意,如果x86是big-endian而不是little-endian,则此结果会有所不同。

您可能认为将ebx用作指针和值都很奇怪,但事实并非如此。指针不再需要,所以我们重新使用它的寄存器来保存一个值。汇编语言没有类型。

答案 1 :(得分:0)

存储在ebx加上四个字节的地址的内存中的值。

答案 2 :(得分:0)


mov ebx, [ebx + 4]
 意味着我们从ebx寄存器中的值加4指定的地址中取4个字节。  例如,如果ebx = 040404040h,我们将从内存位置040404044h(040404040h + 04h)开始占用4个字节,并将其放入寄存器ebx。