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" ....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值