我目前正在使用一种名为Y86,AT& T语法的教育汇编语言编写函数,并且正在尝试完成/解决这个不支持的问题。我想为存储在内存中的值添加一个数字,出于某种愚蠢的原因,您只能使用addl添加到寄存器中。我不知道为什么会这样。
在一个函数中我想做一些像这样的事情并且不知道如何:
addl $1, -4(ebp)
另外,我似乎遇到了寄存器耗尽的问题。也许是因为我不知道如何为存储局部变量腾出空间。我听说有一个概念,即调用者和被调用者保存寄存器。我非常感谢任何与上述相同但在Y86中的命令。还有关于保存寄存器的任何提示都会很棒!谢谢!我知道看这些东西是一种真正的痛苦。
答案 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?。