+ -
当前位置:首页 → 问答吧 → 内嵌汇编的问题。

内嵌汇编的问题。

时间:2011-11-25

来源:互联网

我在C++代码里内嵌汇编的时候,要不要备份相关寄存器??
还是说编译器会帮我备份??

作者: weiwuyuan   发布时间: 2011-11-25

看你程序自身要不要备份。

作者: haojiahuo50401   发布时间: 2011-11-25

被你修改了的,都要备。还要维持堆栈平衡。

作者: zara   发布时间: 2011-11-25

引用 2 楼 zara 的回复:
被你修改了的,都要备。还要维持堆栈平衡。



那我下面这个代码,寄存器eax也要保存么?
C/C++ code

void Swap(int* a, int* b)
{
    __asm
    {
        mov edi, a
        mov esi, b
        mov eax, [edi]
        xchg eax, [esi]
        mov [edi], eax
    }
}



要加上一句push eax,然后最后再pop eax??

作者: weiwuyuan   发布时间: 2011-11-25

你这里是不需要的。主要是因为你这个子程非常的简单,就是这么段内嵌汇编。否则,象这段代码,如果函数里还有其它内容的话,尤其是要对 esi 和 edi 进行保存和恢复;eax 最好也做。

作者: zara   发布时间: 2011-11-25

如果使用了esi,edi,ebx,ebp要备份,eax通常作为返回值。

作者: G_Spider   发布时间: 2011-11-25