gcc 内联汇编简介
啊
啊
在内联汇编中,标识寄存器的一个%变成了两个%
啊
如图是内联汇编的模板
assembler template 是汇编代码
output operands TODO
input operands TODO
clobbers TODO
啊
如图,这个内联汇编的含义是:
1. 把 cr0 寄存器的内容读入到变量 uint32_t cr0 中
2. 对变量 uint32_t cr0 进行一个或操作
3. 把变量 uint32_t cr0 的值写回到 cr0 寄存器中
下图是编译成汇编代码后的样子
啊
volatile: 表示里面的汇编代码不会被优化,不需要调整顺序
%0: 用来表示第一个、没有特殊名字(比如 cr0)的寄存器,它将受到约束
r: 约束为,任意寄存器,即不限制gcc可以编译成的代码
啊
上面这段内联汇编的含义是:
执行指令 int $0x80, 这是一个特权指令,需要指定 “参数” 和 “返回值”
“=a” (__res) 的意思是:把 int $0x80 指令的返回值(一般通过eax传递),写给 __res 变量 TODO: 感觉这里,已经 ebp 做的减法的减数有点不对劲
“0”(11)表示让 eax=11,作为第一个参数
"b" (arg1) 表示让 ebx = arg1,作为第二个参数
"c"(arg2) 表示让 ecx = arg2,作为第三个参数
"d" (arg3) ...
"S" ....
a