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
) が何に使用され、どのくらいの大きさであるかの基本は理解しています。また、(一般的に) スタックが何であるかも理解していますが、これはまだ頭を悩ませています。誰がこれが何をしているのか正確に教えてもらえますか? また、初心者向けの優れたチュートリアルの方向性を教えてもらえますか?