0

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

在函数内部,我想做这样的事情,但不知道如何:

addl $1, -4(ebp)

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

4

1 回答 1

0

在 x86 和 Y86 中,寄存器也可以通过 using 推入堆栈,并通过 usingpush从堆栈中弹出pop。像这样:

push %ax ; push ax into stack

; some code here that may overwrite ax.

pop %ax  ; pop ax from stack

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

要在堆栈中为局部变量创建空间,您需要创建一个堆栈帧。请参阅汇编中的堆栈框架是什么?.

于 2013-04-12T20:41:03.653 回答