如何将此内联汇编代码转换为x64程序集

时间:2014-10-20 16:01:32

标签: c++ assembly

我有内联汇编的C ++函数:

void getMemAddrFromBIOSbySMI(int& bResult, unsigned long& addr,unsigned long& dataLength){
    __asm {              
        mov eax, 0x000000E3               
        mov ebx, 0x00000001               
        mov ecx, 0xFAFAFAFA               
        mov edx, 0x000000B2              
        out dx,al               
        mov bResult, eax              
        mov addr,  ebx            
        mov dataLength, ecx        
    }

    if((bResult & 0x000000FF) == 0){
        bReSult = 1;        
    } 
    else { 
        bResult = 0;       
    }
}

我想让这段代码可以支持x64,但VC ++ x64不支持内联汇编,我不知道如何将此代码转换为x64汇编格式......

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

您可以使用编译器内在__outbyte来写入端口。

答案 1 :(得分:0)

您可以使用__asm _emit对x64指令进行编码。另外,因为在x64上,通过寄存器RCX和RDX的参数需要在MOV之前保存,然后在访问参数时恢复。