0

特に何もしないメイン関数の gdb 逆アセンブリ出力を見てきましたが、次のようになります。

1  push    %rbp
2  mov     %rsp, %rbp
3  sub     $0x10,%rsp
4  movl    $0x0, -0x8(%rbp)    ;
5  mov     -0x8(%rbp), %eax    ;
6  mov     %eax, -0x4(%rbp)    ;
7  mov     -0x4(%rbp), %eax    ;
8  add     $0x10, %rsp
9  pop     %rbp
10 retq

私は Mac ユーザーではありませんが、気になるのは、4 行目から 7 行目までは何をしているのかということです。.次のようなものであってはなりません:

push    %rbp
mov     %rsp, %rbp
sub     $0x10, %rsp
xor     %eax, %eax
add     $0x10, %rsp
pop     %rbp
retq

:質問のタイトルを自由に改善してください。より良いタイトルが見つかりませんでした。

4

1 に答える 1

0

このアセンブリ コードを見ると、64 ビット マシンのように見えます。

 4  movl    $0x0, -0x8(%rbp)    ;
 5  mov     -0x8(%rbp), %eax    ;
 6  mov     %eax, -0x4(%rbp)    ;
 7  mov     -0x4(%rbp), %eax    ;

それらは正しい指示です。ここの%rbpレジスタには、への参照が含まれていStack segmentます。この表記-08x(%rbp)は、メモリ位置、特にスタック ポインタからの 8 番目のインデックスを指します。
したがって、4行目から5行目は次のようになります。

4 put 0 in the 8th index of the stack segment
5 put the value of the 8th index of the stack segment in %eax

6行目から7行目も同じです。
私が間違っていなければ、最初のプログラムは割り当てだけで構成されています...

于 2012-07-06T22:55:12.367 に答える