addw (%edx,%ecx,4), %ax # базово-индексная адресация
# %edx - базовый регистр, адрес массива Numbers,
# %ecx - счетчик по элементам, 4 — т. к.
# в call-S был объявлен как массив int
这个寻址是如何工作的?更准确地说,不,我理解它是如何工作的,但我不明白 4 它负责什么以及负责什么。
键入,仅仅因为我们有一个整数数组,并且要到达下一个元素,我们需要添加 4?或者我们用它做什么?
英特尔手册中的此类寻址描述如下:
在汇编语言语法中,Intel 的写法与手册中的完全一样:
在你的情况下,它会是
AT&T 汇编语言的语法与 Intel 的语法有很大的不同,这样的寻址方式可以写成如下:
因此,在您的情况下:
它是如何使用的
假设我们有一个
int32_t
由 32 个元素组成的类型数字(4 个字节)数组:然后,要引用数组的第五个元素,我们可以使用以下寻址方式:
这是有效的,因为当我们将元素的索引乘以其大小时,我们会得到元素所在数组开头的偏移量。而当我们把这个偏移量加到数组的地址上时,我们就得到了元素本身的地址。
虽然,要访问一维静态数组的元素,英特尔文档建议使用(Index × Scale) + Displacement,编译器会这样做:
编译器将对数组元素的访问转换为以下代码: