【发布时间】:2018-09-23 02:11:44
【问题描述】:
在一些用 Intel 语法编写的示例代码中,有一行写着 [org 0x7c00]。我似乎无法弄清楚如何让它与 AT&T 语法一起工作,也无法在网上找到它。
另外,我发现一行包含$$(这可能不被视为汇编程序指令)。据我所知,这引用了二进制文件的开头(?)我似乎也找不到与此等效的 AT&T。
问一个更广泛的问题。找到与(模糊?)英特尔声明的 AT&T 等价物的好方法是什么?
【问题讨论】:
-
如果您直接使用
as进行组装,然后使用链接器ld将您的对象链接到可执行文件,那么org 0x7c00是通过ld命令行选项-Ttext=0x7c00完成的.或者,您可以使用链接器脚本,但这更复杂 -
您使用什么命令来制作引导加载程序?如果您没有链接,那么您可能缺少一个步骤,导致创建不正确的引导扇区。
-
可以使用
gcc在一个命令中完成链接、编译和输出二进制文件。这是你在做什么吗? -
那么您就少了一个步骤。
as输出一个目标文件。如果没有链接步骤,objcopy 将获取您的 elf 对象并在不设置原点的情况下输出它,这会让您感到非常痛苦。通常你可以做类似as --32 boot.s -o boot.old -melf_i386 -Ttext=0x7c00 boot.o -o boot.elf然后你可以使用objcopy和objcopy -O binary boot.elf boot.binboot.bin将是你可以用作引导加载程序的文件
标签: assembly x86-64 gnu-assembler att