我正在学习如何创建组装和链接的实模式程序:
- GCC 汇编器版本 2.25
- Binutils 2.25 版
- GCC 版本 5.2.0
我使用没有指定前缀的 Intel 语法.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的指令。
我的问题:有没有办法强制GCC使用无前缀的英特尔语法将符号的地址加载到寄存器中?