【问题标题】:NASM Assembly Programming - Incrementing an AddressNASM 汇编编程 - 增加地址
【发布时间】:2013-06-02 15:29:24
【问题描述】:

我又在学习汇编编程的基础知识了。我正在通过Assembly Language Step-by-Step: Programming with Linux 慢慢努力。

我正在使用 NASM 开发 64 位 Slackware 机器 (x86-x64)。

我对增加地址的含义有点困惑。在我的bss 部分,我有一个Buffer resb 4096 缓冲区。在text 部分,我将地址分配给esi

mov esi, Buffer

后来,我inc esi。这似乎将esi 推进到下一个字节偏移量。我有点惊讶 - 我期待 esi 提前 4 个字节,因为它是一个 32 位寄存器。

我可以假设增加地址总是一次移动一个字节吗?我会使用add esi, 4 推进 32 位吗?

当我想填充 32 位寄存器时,是否必须明确要求 4 个字节? mov eax, DWORD [esi] 之类的东西?

【问题讨论】:

    标签: assembly nasm increment memory-address


    【解决方案1】:

    %esi 是一个寄存器。它可以包含地址、您的银行账户余额或其他任何内容。 cpu 无法知道它包含什么样的值。 inc 只是一个算术指令,它将存储在寄存器中的值加 1。

    是的,如果你想增加 32 位,你必须加 4。

    加载和存储时不同,您将选择的寄存器(例如 %al 或 %eax)将指示加载/存储的大小。如果有任何歧义,或者如果您想更改加载/存储的大小,则需要使用大小限定符(word/dword 等)

    【讨论】:

    • 这实际上让我的工作变得容易多了。我担心我必须一次处理 4 个字节。
    猜你喜欢
    • 1970-01-01
    • 2021-07-06
    • 2018-09-08
    • 2014-01-03
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多