【发布时间】:2023-03-20 07:45:01
【问题描述】:
我正在学习如何创建组装和链接的实模式程序:
- 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 使用无前缀的英特尔语法将符号的地址加载到寄存器中?
【问题讨论】:
-
事后我发现了一个相关的问题,Stackoverflow answer 是相似的。根据不同的观点,这个问题可能会被认为是重复的。
标签: assembly x86 gnu-assembler real-mode intel-syntax