【问题标题】:How to access elements of an integer array如何访问整数数组的元素
【发布时间】:2020-06-11 19:11:43
【问题描述】:

我是汇编语言的初学者,我对如何寻址数组有点困惑。

假设有一个包含 100 个整数(每个 4 个字节)的数组(名为“列表”)存储在某个位置(例如 0x10010010)。如何找到其元素的地址,例如 list[3] 或 list[16]?

另外,我如何编写一个汇编指令来指定这个数组的内存?

【问题讨论】:

  • 我建议查看编译器输出以了解它们是如何做到的,对于您拥有 C 编译器的任何 ISA。 How to remove "noise" from GCC/clang assembly output?。如果您有特定的 ISA 和汇编程序语法(例如 x86-64 NASM),则可能会有更具体的答案。

标签: assembly


【解决方案1】:

你自己说的;每个整数是 4 个字节长。它们连续存储在内存中。 list 是其中第一个的地址(准确地说是第零个)。 假设您在说list[3] 时使用从零开始的索引,那么list[3] 的地址将是list + 3*4list+12。一般公式为base+index*4,其中base是数组的地址,索引从0到99。4来自整数大小。

以您的示例为例,如果数组位于 0x10010010,则 list[3] 将位于 0x1001001C,list[16] 将位于 0x10010050。

至于程序集,您没有告诉我们您使用的是哪个 CPU/模拟器。组装的方式不止一种。

某些类型的程序集,尤其是 Intel x86 和 ARM,具有用于访问整数数组的索引缩放的内置逻辑 - CPU 将为您将索引(存储在寄存器中)乘以 4。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 2020-11-03
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多