在Y86中用完寄存器并遇到麻烦

时间:2013-04-12 20:08:17

标签: linux assembly x86 att y86

我目前正在使用一种名为Y86,AT& T语法的教育汇编语言编写函数,并且正在尝试完成/解决这个不支持的问题。我想为存储在内存中的值添加一个数字,出于某种愚蠢的原因,您只能使用addl添加到寄存器中。我不知道为什么会这样。

在一个函数中我想做一些像这样的事情并且不知道如何:

addl $1, -4(ebp)

另外,我似乎遇到了寄存器耗尽的问题。也许是因为我不知道如何为存储局部变量腾出空间。我听说有一个概念,即调用者和被调用者保存寄存器。我非常感谢任何与上述相同但在Y86中的命令。还有关于保存寄存器的任何提示都会很棒!谢谢!我知道看这些东西是一种真正的痛苦。

1 个答案:

答案 0 :(得分:0)

在x86和Y86中,也可以使用push将寄存器推送到堆栈,然后使用pop从堆栈弹出。像这样:

push %ax ; push ax into stack

; some code here that may overwrite ax.

pop %ax  ; pop ax from stack

x86的寄存器数量有限,因此很多时候需要为某些变量使用内存。

要在堆栈中为局部变量创建空间,您需要创建堆栈帧。请参阅What is stack frame in assembly?