c语言读取寄存器,将寄存器值读入C变量

-ffixed-reg

Treat the register named reg as a fixed register; generated code should never refer to it (except perhaps as a stack pointer, frame pointer or in some other fixed role).

这可以用更简单的方式复制理查德的答案,

int main() {

register int i asm("ebx");

return i + 1;

}

虽然这是没有意义,因为你不知道ebx寄存器是什么。

如果你把这两个,用gcc -ffixed-ebx编译,

#include

register int counter asm("ebx");

void check(int n) {

if (!(n % 2 && n % 3 && n % 5)) counter++;

}

int main() {

int i;

counter = 0;

for (i = 1; i <= 100; i++) check(i);

printf("%d Hamming numbers between 1 and 100\n", counter);

return 0;

}

您可以确保C变量始终使用驻留在寄存器中以实现快速访问,并且不会被其他生成的代码覆盖。 (Handy,ebx是通常的x86调用约定下的被调用者,所以即使它被调用其他函数编译没有-ffixed- *,它应该被恢复)。

另一方面,这肯定是不可移植的,通常也不是一个性能优势,因为你限制了编译器的自由。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值