首页 > 解决方案 > Linux 内核使用哪个程序集?真的是 NASM 吗?

问题描述

我正在阅读https://0xax.gitbooks.io/linux-insides/content/Booting/linux-bootstrap-1.html它读取了一些程序集,例如

    .section ".reset", "ax", %progbits
    .code16
.globl    _start
_start:
    .byte  0xe9
    .int   _start16bit - ( . + 2 )
    ...

有一行他像这样编译

nasm -f bin boot.nasm && qemu-system-x86_64 boot

所以我认为这是 Linux 的 NASM 程序集。我去发现https://asmtutor.com/#它说它使用 NASM 程序集 for linux。然而,这不是一回事。仅举几例:Linux内核使用.section代替SECTION.globl代替global并且我不知道.byte,.int等做了什么。

那么 linux 使用哪个程序集,我在哪里可以学习呢?

标签: linuxassemblynasm

解决方案


Linux 内核使用 GAS 汇编器(GNU Assembler),它是 GCC 的一部分。您可以在此处找到有关它的参考文档。

如果您已经对装配有基本的了解,您可以在此处找到对 GAS 的非常全面的介绍。

至于.byteand .int.byte将 1 个或多个 1 字节值放在它后面的当前汇编器地址的内存中,并且.int做同样的事情,但对于 32 位整数而不是字节。


推荐阅读