索引寻址的语法通常是逗号

问题描述

对于组装中通常如何使用索引地址,我已经看到了以下定义(来自《 Group Up编程》一书):

search_column

我在数组(我最近的问题)上使用了类似的方法来做类似的事情:

movl BEGINNINGADDRESS(,%INDEXREGISTER,WORDSIZE)

第一个逗号之前的第一个元素是什么,或者通常留空? “开始地址”是否始终是变量名,还是经常使用其他名称?是否使用了绝对内存地址或立即值而不是movl my_array(,%rdi,4),%r10 # move the int at the start of my_array into %r10


此外,这是一个与此相关的好答案:Referencing the contents of a memory location. (x86 addressing modes)。我想我的主要问题是出于%INDEXREGISTER项的目的(在上面的说明/示例中留为空白)。

解决方法

实际语法为 offset base index scale ),其中 offset 和 base 是可选的,并且 index scale 也是可选的(但是如果存在,则两个都必须存在)。

offset 是8或32位常量,而 base index 是寄存器,而 scale 是1、2、4或8

这些都很灵活,因此可以使用许多不同的方式。

  • base 可以是任何寄存器,因此它可以是某个段的基址(偏移量是该数组在该段中的位置),也可以是该数组的地址(因此offset将为0,或数组的某个固定索引)
  • index 可以是除 rsp(堆栈指针)之外的任何寄存器,并在将其添加到 base 之前与比例因子相乘。和偏移量。因此它可能是数组的索引,或者可能是数组地址计算的一部分(在 offset 中具有固定索引)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...