读书人

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

发布时间: 2012-08-13 13:21:53 作者: rapoo

内嵌汇编代码 用保存寄存器么
我内联了以下汇编代码
用不用 先写如下代码
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




有这个必要么

[解决办法]

探讨

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

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

读书人网 >汇编语言

热点推荐