Linux内核使用哪个程序集?真的是NASM吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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/#,说它使用Linux的NASM程序集。但是,这不是同一回事。仅举几例:linux内核使用.section代替SECTION.globl代替global,并且我不认识.byte.int等。

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

答案

Linux内核使用GAS汇编程序(GNU汇编程序),它是GCC的一部分。您可以在其中找到参考文档here

只要您已经对汇编有基本的了解,就可以找到关于GAS here的详尽介绍。

[对于.byte.int.byte将在其后的1个或多个1字节值放在当前汇编器地址处,并且.int进行相同的操作,但使用32位整数而不是字节。] >

以上是关于Linux内核使用哪个程序集?真的是NASM吗?的主要内容,如果未能解决你的问题,请参考以下文章

linux应用开发和linux内核开发有区别吗,哪个有前途

将两个32位数相乘并将64位结果打印为十进制NASM程序集

NASM 程序集将输入转换为整数?

为啥 Xcode 命令行 nasm 程序集发出错误:unknown use of instruction mnemonic without a size suffix

真的有用吗?(GitHub)

为啥使用任务集在一组独立的内核上运行多线程 Linux 程序会导致所有线程在一个内核上运行?