在%esp上推送寄存器和子时堆栈是如何工作的? (IA-32集会)

时间:2018-06-14 13:03:41

标签: c assembly x86 stack microprocessors

我在程序集IA-32中进行编码,当我在subl上使用%esp并且push注册%ebx时,我遇到了一些问题,{{1 },%esi)。

我知道如果我需要调用函数,我必须使用%edi上的subl%esp的大小是函数有4次的参数个数(大小sub)。

我们通常需要推送一些寄存器,因为当我们调用函数int时,%eax%ecx会丢失其内容。

现在我知道在代码的最后我们必须<{>>添加 %edx我们减去的内容和esp寄存器。这与开头的顺序相反。

这是我的问题:如果我在程序集(IA-32)中重写带有2个参数的C函数,我需要推送3个寄存器pop%ebx%esi和来自%edi的{​​{1}},因为我的C函数调用了另一个函数(我使用sub 12,因为我不知道其他解决方案)堆栈的哪个点是我的C函数的第一个参数是什么? (我的意思是%esp)。谢谢大家,这对我来说是一个很大的问题,我不明白%esp%esp如何处理sub

代码:

push

0 个答案:

没有答案