我目前正在使用一种称为Y86的教育汇编语言编写函数,AT&T语法,并试图完成/绕过它不支持的东西。我想把一个数字加到存储在内存中的一个值上,但是由于一些愚蠢的原因,你只能使用addl来加到一个寄存器中。我不知道为什么会这样。
在一个函数中,我想做这样的事情,但不知道怎么做:
addl $1, -4(ebp)另外,我似乎遇到了寄存器耗尽的问题。也许是因为我不知道如何腾出空间来存储局部变量。我听说有一个概念,寄存器是由调用者和被调用者保存的。我非常感谢任何与上面相同但在Y86中的命令。另外,任何关于保存寄存器的技巧都会很棒!谢谢!我知道看这些东西真的很痛苦。
发布于 2013-04-13 04:41:04
在x86和Y86中,也可以使用push将寄存器推送到堆栈,并使用pop从堆栈中弹出寄存器。如下所示:
push %ax ; push ax into stack
; some code here that may overwrite ax.
pop %ax ; pop ax from stackx86的寄存器数量有限,所以很多时候需要使用内存来存储一些变量。
要在堆栈中为局部变量创建空间,您需要创建堆栈帧。参见What is stack frame in assembly?。
https://stackoverflow.com/questions/15980017
复制相似问题