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

请告诉小弟我一上push和pushl的区别,thx

2012-09-06 
请告诉我一下push和pushl的区别,thx请告诉我一下push和pushl的区别,thx[解决办法]可能是我上面没说清楚:当

请告诉我一下push和pushl的区别,thx
请告诉我一下push和pushl的区别,thx

[解决办法]
可能是我上面没说清楚:
当要压栈的对象已经确定(也就是说已经知道是字节、字或者双字),那么使用push就不会产生歧义,也就是说汇编器可以自己判断自己要操作的是什么长度的操作对象;但是当汇编器不能自己判断操作对象长度时,就需要使用pushl之类的指令来指明操作对象长度;
上面的%ebp指的是esp寄存器吧,这是一个32位的寄存器,汇编器是知道这个寄存器存放的是dworld,不需要显式的指明也没有歧义;而 0xfffffff8(%ebp)是使用基址寻址方式指向的一个内存空间,内存是连续的,汇编器不能仅仅根据一个内存地址就判断出那里存放的数据的长度,所以直接这样写就会产生歧义,所以要使用pushl之类的指令来指明要操作的数据的长度;

其实说白了:pushl就相当于intel汇编中的push dworld;

错误例子:"push 01h";nasm汇编器会提示一个警告。
正确例子:Intel格式的"push dworld 01h"或者AT&T格式的"pushl 01h";

热点排行