无论如何我可以将c指针加载到像eax这样的特定寄存器中吗?我想把一个数组,比如int array [10],加载数组(或者& array [0],但两种方式都是相同的东西)到寄存器eax中。
答案 0 :(得分:3)
这取决于编译器。 Gcc扩展了register
关键字
register unsigned* p __asm__("eax") = a;
答案 1 :(得分:0)
是的,如果寄存器位置能够访问,您可以将C指针存储到寄存器中。并且寄存器大小足以存储指针值。不同处理器之间的指针大小不同。检查大小,然后尝试。
如果寄存器是字节可访问的,则直接将指针的值放在字节位置。如果位可访问,则需要移位然后需要存储溢出。
答案 2 :(得分:0)
您可以使用内联程序集,该程序集可以由__asm/__asm__
关键字(MSVC / GCC)定义,但它不是可移植的方式。
例如:
int arr[10];
__asm { mov eax, DWORD PTR arr }
注意:现代x64编译器禁止使用内联汇编
您也可以使用register
关键字,但无法保证编译器会将指针精确地放在eax寄存器中