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

没有ebx会怎么? 程序就不能寻址了吗

2012-06-14 
没有ebx会如何? 程序就不能寻址了吗?感觉C程序运行过程中主要用esp,ebp只是用来保存esp的旧值的吗?32位下d

没有ebx会如何? 程序就不能寻址了吗?
感觉C程序运行过程中主要用esp,ebp只是用来保存esp的旧值的吗?

32位下ds和es没有区别了吧,flat模式不再有"段"的概念?
但是又说x86是段页式的寻址。

那么32位到底还有没有段的概念? ds/es段的概念还存不存在?

C程序的函数入口通常是这样的:
  push ebp ;保存当前ebp
  mov ebp,esp ;EBP设为当前堆栈指针
  sub esp, xxx ;预留xxx字节给函数临时变量.

我怎么感觉ebp在这里多余,保存esp的内容不就行了吧(用于恢复堆栈),所以只需要:
push esp;
sub esp,xxx

为什么要用到ebp呢,作用是什么?


[解决办法]
标题说的是 ebx ,帖子正文里说的是 ebp 。
确实,ebp 并不是必须的,用它只是为了程序更坚固些,代码看着更直观明了些;有些编译器的模式就不使用 ebp 而直接使用 esp 进行对参数和局部变量的访问,只是这样对同一项的访问,在不同的场合 esp 跟随的偏移量也可能不同,人看着会比较晕,但对程序的功能并没有任何问题,因为编译器对计算这些还是很得心应手的。
[解决办法]
段还在,不过段变成"选择子"用于GDT中,但是WINDOWS采用页式管理,所以段基本固定

热点排行