【发布时间】:2018-06-18 17:21:28
【问题描述】:
我正在阅读一个项目的 LILO 源代码,我偶然发现 这一行
mov dh, [d_dev](bp)
我想知道mov指令在这里做什么,我知道如果是的话
mov dh, [d_dev]
然后 d_dev 指向的值被放置在 dh 但是会发生什么 (bp)。
任何帮助将不胜感激。
来源链接:https://github.com/a2o/lilo/blob/master/src/first.S 第 205 行
【问题讨论】:
-
在组装之前会发生什么宏预处理?这是 GAS
.att_syntax noprefix还是什么?在那种情况下,(bp)将是一个以 BP 寄存器为基数的内存操作数,[d_dev]作为位移。大概[d_dev]被一个宏预处理器取代,比如 M4 什么的。你能链接到出现这个的源文件吗? -
@PeterCordes 我相信早期版本的 LILO 使用 AS86 作为它的汇编器(不是 GNU 的 as)
-
@PeterCordes 我应该更具体一点。实际语法是由 Minix 语法兼容模式下的 as86 解析的。在 Minix 中,方括号和圆括号的含义是相反的。所以它更像是普通 AS86 语法中的
mov dh, (d_dev)[bp]或 NASM 语法中的mov dh, [d_dev+bp] -
@MichaelPetch:谢谢,我对 AS86 一无所知,但这就是在 OP 链接整个文件后我能够从上下文推断的意思。
标签: assembly x86-16 bootloader as86