【问题标题】:How to use a 1 byte memory as an array index?如何使用 1 字节内存作为数组索引?
【发布时间】:2015-03-06 20:00:00
【问题描述】:

我有一个字节数组,其中[ebp - 4](4 个字节)存储其第一个元素的地址。我还有另一个变量[ebp - 5](1 字节),用于存储该数组的当前索引。

现在我想使用 base+index 的组合访问这个数组的一个元素,但是这种格式要求两个寄存器都是 32 位的(例如 eax 而不是 al),所以我所做的是归零eax 寄存器,然后将 mov 1 字节 [ebp - 5] 放入 al,然后使用整个 eax 寄存器作为索引:

mov eax, 0
mov al, [ebp - 5]

这种事情通常是这样做的吗?有没有其他方法可以直接mov一个1字节的内存入寄存器?

【问题讨论】:

    标签: arrays assembly x86 nasm


    【解决方案1】:

    虽然有效,但有一条 movzx 指令以零扩展名移动:

    movzx eax, byte [ebp - 5].

    还有movsx 用于符号扩展,但这对数组索引没有用处。

    【讨论】:

    • 不应该是movzx eax, BYTE [ebp - 5]吗?
    • 对于微软/英特尔汇编,它是 movzx eax,byte ptr [ebp-5] 。
    • 作为替代方案,您可以指定一个 511 字节数组或分配它,然后将指向该数组的指针向上舍入到 256 字节边界(在 c 中,这将是 ptr256 = (ptr+255) &(~0x100); ) 。然后只使用 ptr256 的低位字节作为索引,而保留高位 3 个字节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    相关资源
    最近更新 更多