请告诉我一下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";