在 MASM 中访问数组

发布于 2024-09-03 19:09:45 字数 129 浏览 10 评论 0 原文

我在 esi 寄存器中得到了数组的地址(作为函数的指针传递)。如何访问数组的特定单元格?即:

my_array[a + b * c]

其中c 是常量。

I've got the address of my array (passed as a pointer to the function) in esi register. How can I access a particular cell of the array? i.e:

my_array[a + b * c]

where c is constant.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

像你 2024-09-10 19:09:45

查找诸如 LEA

这样的说明:

LEA edx,[esi+ebx*4]

Look up instructions such as LEA

Think of it this way:

LEA edx,[esi+ebx*4]
随风而去 2024-09-10 19:09:45

您也可以直接移动它,如下所示:

MOV EDX, [ESI + 4*EBX]

对于静态数组,您实际上可以同时使用两个寄存器来对其进行索引,但使用数组基地址作为 寻址模式。这只适用于非位置无关代码。

MOV EDX, my_array[ECX + 4*EBX]

您可以使用同一寄存器两次来模拟比例因子 3 (ebx + ebx*2)、5 或 9,而不是使用两个不同的寄存器。

You could directly move it as follows also:

MOV EDX, [ESI + 4*EBX]

For a static array, you can actually use two registers at once to index it, but using the array base address as the 32-bit displacement in the addressing mode. This only works for non-position-independent code.

MOV EDX, my_array[ECX + 4*EBX]

Instead of using two different registers, you can use the same register twice to simulate a scale factor of 3 (ebx + ebx*2), 5, or 9.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文