当前位置: 代码迷 >> 汇编语言 >> 内嵌汇编代码 用保留寄存器么
  详细解决方案

内嵌汇编代码 用保留寄存器么

热度:7399   发布时间:2013-02-26 00:00:00.0
内嵌汇编代码 用保存寄存器么
我内联了以下汇编代码
用不用 先写如下代码
push edi
push eax
push ecx
_asm
{
mov edi, selbase
mov eax, [edi]
push 0
push 1
push 0x44e
mov ecx, edi
mov eax, [eax + 4]
call eax
}
在末尾
pop edi
pop eax
pop ecx




有这个必要么

------解决方案--------------------------------------------------------
探讨

只要是改变了值的寄存器,就要保存。这是纪律,必须服从。如果用了会改变标志位的指令,标志寄存器也要保存一下。如果你保存了,肯定不会因为没保存出问题,如果没保存,就可能会出问题。不过你要是看过整个程序的汇编代码保不保存就看你的心情了。
不过如果你是在极端优化的话,可以看一下插入汇编代码的位置的前后部分,如果是插入到一个函数中的话,一般在这个函数的开头是会保存寄存器的。如果这个函数已经保存了你所用到……

------解决方案--------------------------------------------------------
内嵌汇编除非需要,不要动与栈相关的寄存器。最主要的是,内嵌汇编尽量做成一个函数,而不是一段代码。这种情况是不用保护常规寄存器的。
------解决方案--------------------------------------------------------
内联汇编,有函数框架,编译后编译器自动帮你完成。
  相关解决方案