(私のiMac上)メソッド-(BOOL) f { return true; }
ためのアセンブリは、次のとおりです。- (BOOL)fの分解を理解する{trueを返します。 }
test`-[AppDelegate f]:
0x1000014d0 <+0>: pushq %rbp
0x1000014d1 <+1>: movq %rsp, %rbp
0x1000014d4 <+4>: movb $0x1, %al
0x1000014d6 <+6>: movq %rdi, -0x8(%rbp)
0x1000014da <+10>: movq %rsi, -0x10(%rbp)
-> 0x1000014de <+14>: movsbl %al, %eax
0x1000014e1 <+17>: popq %rbp
0x1000014e2 <+18>: retq
(I return文とデバッグにブレークポイントを設定し、これを生成する - >常に分解を示した - >デバッグワークフロー)。
私はそれが8命令であることに驚いた。
pushq %rbp
movq %rsp, %rbp
:
popq %rbp
retq
^これは、スタックを管理して戻るための標準的な定型書であるようです。
movb $0x1, %al
movsbl %al, %eax
^これは、戻り値に使用されるレジスタであるEAXに16進数00 00 00 01をロードします。
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
^これらは何ですか。上記の6行で十分ではありませんか?
編集:http://www.idryman.org/blog/2014/12/02/writing-64-bit-assembly-on-mac-os-x/が役に立ちました。
いいえ、OPは機能のプロローグとエピローグではなく、中間の命令について質問しています。質問から、OPはそれらについて明確に分かっています。 – Kegluneq
実際に彼らは何をしているのか推測しましたが、技術的な名前は分かりませんでした。だから+1。 –