1

无论如何我可以将ac指针加载到像eax这样的特定寄存器中吗?我想取一个数组,如 int array[10],并将数组(或 &array[0],但无论哪种方式它们都是同一件事)加载到寄存器 eax 中。

4

3 回答 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
  1. 您可以使用内联汇编,它可以通过__asm/__asm__关键字(MSVC/GCC)定义,但它不是可移植的方式。例如:

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

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

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

于 2013-09-17T19:30:12.447 回答