为了测试性能,我接到了一项任务,将一小部分asm转换为内部asm。我从来没有为这两种语言开发过任何代码,但我理解asm和c,并且阅读了一些内在语法。但是我找不到关于内在是如何处理访问寄存器的信息。我找到了两个函数:
getReg()和setReg()
getReg()附带了不同寄存器表及其id/编号的表:-General整数寄存器、-Application寄存器、-Control寄存器、-Indirect寄存器,但似乎没有一个与诸如rax、rdi等asm寄存器相对应。
如何在内部寻址寄存器,如rcx、rdi等?或者换句话说,我如何将其转换为:
MOV%0,%rcx
内在等价物?
发布于 2011-10-03 18:55:19
你忽略了内部函数的要点--当你使用内部函数时,你不需要担心寄存器的分配(除了在某些情况下访问特殊寄存器的情况)。一般的想法是让编译器为您处理所有这类低级事务。要将原始asm移植到内部,您需要首先对asm代码进行反向工程,以便了解它的用途,然后使用内部重新实现等效代码。如果你发布一些实际的代码,你可能会得到更具体的建议。
发布于 2011-10-03 19:08:30
看看你是否可以使用其中的任何一个:
GCC:X86 Built-in Functions
MSVC++:Alphabetical Listing of Intrinsic Functions
https://stackoverflow.com/questions/7633899
复制相似问题