[C.C++] c语言读取寄存器,将寄存器值读入C变量

668 0
Honkers 2025-3-22 10:31:48 | 显示全部楼层 |阅读模式

-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- *,它应该被恢复)。

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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4010
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行