我刚刚开始学习使用 GCC 编译器来组装我的代码的 mac 程序集。不幸的是,如果您是初学者,学习如何做到这一点的资源非常有限。我终于设法找到了一些简单的示例代码,我可以开始琢磨它,并且我得到了它的组装和正确运行。这是代码:
.text # start of code indicator.
.globl _main # make the main function visible to the outside.
_main: # actually label this spot as the start of our main function.
push %rbp # save the base pointer to the stack.
mov %rsp, %rbp # put the previous stack pointer into the base pointer.
subl $8, %esp # Balance the stack onto a 16-byte boundary.
movl $0, %eax # Stuff 0 into EAX, which is where result values go.
leave # leave cleans up base and stack pointers again.
ret
注释解释了代码中的一些内容(我有点理解第 2 - 5 行的作用),但我不明白其中大部分是什么意思。我确实了解寄存器是什么以及每个寄存器(rbp
、和)用于什么以及它们有多大的基础知识rsp
,我也(通常)了解堆栈是什么,但这仍然让我头疼。谁能告诉我这是在做什么?另外,任何人都可以为我指出一个适合初学者的好教程的方向吗?esp
eax