无论如何我可以将ac指针加载到像eax这样的特定寄存器中吗?我想取一个数组,如 int array[10],并将数组(或 &array[0],但无论哪种方式它们都是同一件事)加载到寄存器 eax 中。
问问题
1169 次
3 回答
3
这取决于编译器。Gcc 对register
关键字进行了扩展
register unsigned* p __asm__("eax") = a;
于 2013-09-17T19:40:49.577 回答
0
是的,如果寄存器位置可以访问,您可以将 C 指针存储到寄存器中。并且寄存器大小足以存储指针值。指针大小因不同处理器而异。检查大小,然后尝试。
如果寄存器是字节可访问的,则直接将指针的值放在字节位置。如果位可访问,那么您需要移位,然后需要存储溢出。
于 2013-09-17T19:28:47.890 回答
0
您可以使用内联汇编,它可以通过
__asm/__asm__
关键字(MSVC/GCC)定义,但它不是可移植的方式。例如:int arr[10]; __asm { mov eax, DWORD PTR arr }
注意:现代 x64 编译器禁止使用内联汇编
您也可以使用
register
关键字,但不能保证编译器会将指针准确地放置在 eax 寄存器中
于 2013-09-17T19:30:12.447 回答