X86 这个ASM代码段是什么意思?
我一直试图从这个()教程中了解Linux引导过程,很早就遇到了下面的代码片段X86 这个ASM代码段是什么意思?,x86,boot,linker-scripts,X86,Boot,Linker Scripts,我一直试图从这个()教程中了解Linux引导过程,很早就遇到了下面的代码片段 SECTIONS { _ROMTOP = 0xfffffff0; . = _ROMTOP; .reset . : { *(.reset) . = 15 ; BYTE(0x00); } } 我以前没有和ASM打过交道,但我从未见过这样的事情。它有什么作用?花括号是什么意思?这不是程序集,而是链接器脚本的一部分。那个教程真的不应该说明这一点,
SECTIONS {
_ROMTOP = 0xfffffff0;
. = _ROMTOP;
.reset . : {
*(.reset)
. = 15 ;
BYTE(0x00);
}
}
我以前没有和ASM打过交道,但我从未见过这样的事情。它有什么作用?花括号是什么意思?这不是程序集,而是链接器脚本的一部分。那个教程真的不应该说明这一点,它不是真正相关的,只是让人困惑 他们正在使用它作为一个来自
coreboot
项目的例子,这是一个开源BIOS的替代品。他们试图说明第一条指令是如何在地址0xfffffff0
处执行的。链接器脚本片段基本上指示链接器合并从该地址开始的所有对象文件的.reset
部分。此外,该部分填充为16字节,并定义了符号\u ROMTOP
。本节内容来自您省略的程序集片段:
.section ".reset"
.code16
.globl reset_vector
reset_vector:
.byte 0xe9
.int _start - ( . + 2 )
正如您所看到的,此代码被放置在名为
.reset
的部分中,假设这是全部内容,链接器脚本将确保它最终位于正确的地址。这是一个手动编码的接近实际入口点的跳转,名为\u start
,它不是程序集,是链接器脚本的一部分。那个教程真的不应该显示这一点,它不是真正相关的,只是让人困惑。谢谢!这确实把我搞糊涂了。我想我会跳过那部分。