汇编语言的指令格式目前有两种不同的标准:Windows下的汇编语言基本上都遵循Intel风格的语法,比如:MASM、NASM,Unix/Linux下的汇编语言基本上都遵循AT&T风格的语法。 下面主要介绍Unix/Linux下的汇编,具体格式如下:
[名称[:]] 指令码 源操作数SRC,目的操作数DST ;注释
开发一个OS,尽管绝大部分代码只需要用C/C++等高级语言,但是和硬件相关部分的代码需要使用汇编语言;由于启动部分的代码有大小限制,使用精练的汇编可以缩小目标代码的Size;另外,对于某些需要被经常调用的代码,使用汇编可以提高性能。
如果我们选择的OS开发工具是GCC以及GAS的话,就必须了解AT&T汇编语言语法,因为GCC/GAS只支持这种汇编语法。下面介绍GCC的内嵌汇编语法。
GCC 支持在C/C++代码中嵌入汇编代码,这些汇编代码被称作GCC Inline ASM——GCC内联汇编。这是一个非常有用的功能,有利于我们将一些C/C++语法无法表达的指令直接潜入C/C++代码中,另外也允许我们直接写 C/C++代码中使用汇编编写简洁高效的代码。
1.基本内联汇编
基本格式如下:
__asm__ [__volatile__] ( assembler template
: [output operand list] /* optional */
: [input operand list] /* opti