如何解决索引寻址的语法通常是逗号
对于组装中通常如何使用索引地址,我已经看到了以下定义(来自《 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 中具有固定索引)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。