Assembly 内核*.S文件使用x64汇编还是32位?

Assembly 内核*.S文件使用x64汇编还是32位?,assembly,linux-kernel,x86-64,gnu-assembler,Assembly,Linux Kernel,X86 64,Gnu Assembler,在这个问题中:,是x64中“hello world”的一个示例。我之所以这么做,是因为我找到了一本关于x64体系结构的GAS asm的好书(为什么要学习旧的32位asm),但大多数导师和书都是针对32位的。(例如,这是非常推荐的)。我的目的,或者为什么我想学习asm(GAS而不是nasm),是为了让我能够理解内核*.S文件。但在上面的示例中(第一个url),在x64中显示了完全不同的hello world,然后在32中显示 所以我的问题是:x64与32位x86有多大的不同?内核之间的相互使用程度

在这个问题中:,是x64中“hello world”的一个示例。我之所以这么做,是因为我找到了一本关于x64体系结构的GAS asm的好书(为什么要学习旧的32位asm),但大多数导师和书都是针对32位的。(例如,这是非常推荐的)。我的目的,或者为什么我想学习asm(GAS而不是nasm),是为了让我能够理解内核*.S文件。但在上面的示例中(第一个url),在x64中显示了完全不同的hello world,然后在32中显示


所以我的问题是:x64与32位x86有多大的不同?内核之间的相互使用程度如何(这就是我想学习x64的原因)?

gas手册,英特尔手册,abi pdf,内核源代码。对于通用内核驱动程序,除了已经提供的内联函数外,您几乎不需要任何asm。但是为什么您的x64程序与x86程序有很大不同?这取决于您对“很多”的定义。它使用不同的约定,有更多的寄存器,当然是64位的。尽管如此,人们还是倾向于说它没有太大的不同,因为您仍然可以使用大多数相同的指令,并且仍然有32/16/8位寄存器。内核已经具备了它所需要的所有asm,例如设置代码、中断、系统调用和信号处理、任务切换。它还通过内联函数提供同步原语和i/o访问。设备驱动程序只需使用这些驱动程序,除非您正在为虚拟化或硬件加密等特殊事物编写驱动程序。@访问设备接口或一般特定体系结构接口(例如虚拟化)需要牧民程序集。但一旦抽象了这些访问,就不再需要汇编了。示例:要访问x86上的IO端口,可以使用
in/out
,但一旦有了
READ\u port\u BYTE
(以及类似内容),就不再需要
in
。抽象很好:可移植性和可读性。