为了测试性能,我已经完成了将一小段asm转换为内在的任务。 我从来没有为任何一个开发任何代码,但我理解asm和c,并阅读内在语法。但我无法找到内在处理访问寄存器的信息。我发现了2个功能:
getReg()和setReg()
getReg()附带一个包含不同寄存器表及其id / number的表: - 一般整数寄存器 - 申请注册 - 控制寄存器 - 间接注册 但它们似乎都不对应于像rax,rdi等asm寄存器。
如何在内在函数中寻址寄存器,例如rcx,rdi等? 或者换句话说,我该如何转换它:
mov%0,%rcx
与内在的等价物?
答案 0 :(得分:4)
你错过了内在函数 - 在使用内在函数时你不必担心寄存器分配(在某些情况下可能会访问特殊寄存器)。一般的想法是让编译器为您处理所有这种低级别的内务管理。要将原始asm移植到内在函数,您需要首先对asm代码进行反向工程,以便了解它的用途,然后使用内在函数重新实现等效代码。如果您发布一些实际代码,那么您可能会得到更具体的建议。
答案 1 :(得分:1)
看看你是否可以使用以下任何一种:
海湾合作委员会:X86 Built-in Functions
MSVC ++:Alphabetical Listing of Intrinsic Functions