首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

ebp能像esi一样任意使用么?解决办法

2013-01-27 
ebp能像esi一样任意使用么?本帖最后由 weiwuyuan 于 2012-09-09 23:58:38 编辑我在执行一系列运算,但是寄

ebp能像esi一样任意使用么?
本帖最后由 weiwuyuan 于 2012-09-09 23:58:38 编辑 我在执行一系列运算,但是寄存器不够用了,我想知道ebp能不能拿来用?
我不知道它是不是像ess或esp一样,不能随便改?

PS:不要涉及push或pop保存ebp,我只想知道他这个值是不是像ess一样,是系统在用
[解决办法]
刚才拿的代码用 vc2008 看了下,发现还真是小瞧了 vc 的编译器了。你说的对,它确实会分析内嵌汇编部分对通用寄存器的使用并进行适当的保存(进入函数时进行)和恢复(结束函数前)操作,仅指 ebx/esi/dx 这三个(在通用寄存器的使用约定上,eax/ecx/edx 是可以被随意使用的,ebp/esp 则为栈架构指针不能被使用)。如果中间使用了 ebp,编译就会出现 warning:框架指针寄存器“ebp”被内联程序集代码修改。这是 vc2008 的 cl.exe 程序没有附加其它编译选项时的结果。所以,你的实际情况如何,最简单的就是看下生成的代码了,一可以直接生成 asm 文件 /FA 选项吧,或者是用反汇编软件看生成的 obj/exe 文件。

热点排行