将指针存储在特定寄存器中的c中

时间:2013-09-17 19:18:07

标签: c pointers assembly cpu-registers

无论如何我可以将c指针加载到像eax这样的特定寄存器中吗?我想把一个数组,比如int array [10],加载数组(或者& array [0],但两种方式都是相同的东西)到寄存器eax中。

3 个答案:

答案 0 :(得分:3)

这取决于编译器。 Gcc扩展了register关键字

register unsigned* p __asm__("eax") = a;

答案 1 :(得分:0)

是的,如果寄存器位置能够访问,您可以将C指针存储到寄存器中。并且寄存器大小足以存储指针值。不同处理器之间的指针大小不同。检查大小,然后尝试。

如果寄存器是字节可访问的,则直接将指针的值放在字节位置。如果位可访问,则需要移位然后需要存储溢出。

答案 2 :(得分:0)

  1. 您可以使用内联程序集,该程序集可以由__asm/__asm__关键字(MSVC / GCC)定义,但它不是可移植的方式。 例如:

    int arr[10]; __asm { mov eax, DWORD PTR arr }

    注意:现代x64编译器禁止使用内联汇编

  2. 您也可以使用register关键字,但无法保证编译器会将指针精确地放在eax寄存器中