使用“.intel_syntax noprefix”如何获取标签的内存地址?
Using ".intel_syntax noprefix" how can I get memory address of a label?
我正在学习如何创建实模式程序汇编和链接:
- GCC 汇编程序版本 2.25
- Binutils 版本 2.25
- GCC 版本 5.2.0
我使用不带 .intel_syntax noprefix
指定前缀的 Intel 语法
我想将一个字符串的地址加载到SI寄存器中。我知道如何引用 NASM 中的内存位置,但是当我在 GNU 汇编程序代码中执行相同操作时,它只会将字符串的一个 WORD 移动到寄存器中而不是标签的地址。
我的代码是:
.code16
.intel_syntax noprefix
mov cx, 11
mov si, name
mov di, 0x7E00
push di
rep cmpsb
pop di
je LOAD
当我用 GCC 编译它时,我可以在调试器中看到处理器执行的操作:
mov si, WORD ptr ds:0x7d2d
但我想将字符串的地址移入寄存器,而不是它指向的数据。
我也试过像这样在名字周围加上方括号:
.code16
.intel_syntax noprefix
mov cx, 11
mov si, [name]
mov di, 0x7E00
push di
rep cmpsb
pop di
je LOAD
没有区别。
来自NASM 我知道这个汇编代码有效:
mov si, name
NASM 将生成将 name
的地址移动到寄存器 SI.[= 的指令17=]
我的问题:有没有办法强制 GCC 使用无前缀的 Intel 语法将符号地址加载到寄存器中?
如果您使用 GNU 汇编代码(通过 GCC)和指令:
.intel_syntax noprefix
然后语法看起来有点不寻常,并且在规范来源中没有很好的记录。此代码:
mov si, name
将标签 name
指向的内存位置的 16 位 WORD 移动到 SI。以下说明做同样的事情,虽然我更喜欢方括号 [
和 ]
因为代码的意图更清楚:
mov si, name
mov si, [name]
mov si, word ptr [name] # This is the same as two above in long form
# The use of "word ptr" here is similar to MASM
要获取 name
的地址并将其放入寄存器,您需要像这样使用 offset
:
mov si, offset name
如果有人有 规范 来源,它实际上描述了可以与 .intel_syntax noprefix
一起使用的语法,请在评论中告诉我。我知道 blogs about the syntax,还有一些蔑视,但不是官方的。
我正在学习如何创建实模式程序汇编和链接:
- GCC 汇编程序版本 2.25
- Binutils 版本 2.25
- GCC 版本 5.2.0
我使用不带 .intel_syntax noprefix
我想将一个字符串的地址加载到SI寄存器中。我知道如何引用 NASM 中的内存位置,但是当我在 GNU 汇编程序代码中执行相同操作时,它只会将字符串的一个 WORD 移动到寄存器中而不是标签的地址。
我的代码是:
.code16
.intel_syntax noprefix
mov cx, 11
mov si, name
mov di, 0x7E00
push di
rep cmpsb
pop di
je LOAD
当我用 GCC 编译它时,我可以在调试器中看到处理器执行的操作:
mov si, WORD ptr ds:0x7d2d
但我想将字符串的地址移入寄存器,而不是它指向的数据。
我也试过像这样在名字周围加上方括号:
.code16
.intel_syntax noprefix
mov cx, 11
mov si, [name]
mov di, 0x7E00
push di
rep cmpsb
pop di
je LOAD
没有区别。
来自NASM 我知道这个汇编代码有效:
mov si, name
NASM 将生成将 name
的地址移动到寄存器 SI.[= 的指令17=]
我的问题:有没有办法强制 GCC 使用无前缀的 Intel 语法将符号地址加载到寄存器中?
如果您使用 GNU 汇编代码(通过 GCC)和指令:
.intel_syntax noprefix
然后语法看起来有点不寻常,并且在规范来源中没有很好的记录。此代码:
mov si, name
将标签 name
指向的内存位置的 16 位 WORD 移动到 SI。以下说明做同样的事情,虽然我更喜欢方括号 [
和 ]
因为代码的意图更清楚:
mov si, name
mov si, [name]
mov si, word ptr [name] # This is the same as two above in long form
# The use of "word ptr" here is similar to MASM
要获取 name
的地址并将其放入寄存器,您需要像这样使用 offset
:
mov si, offset name
如果有人有 规范 来源,它实际上描述了可以与 .intel_syntax noprefix
一起使用的语法,请在评论中告诉我。我知道 blogs about the syntax,还有一些蔑视,但不是官方的。