アセンブラの読み方
お世話になります。
アセンブラを勉強しています。
下記について教えていただけないでしょうか。
よろしくお願いいたします。
1 .file
2 .data
3 var: .long 0x1234
4.text
5 .global main
6 main:
7 movb $1, %al // 値1をレジスタalに代入
8 push %eax // レジスタeaxの内容をスタックに格納
9 call IncReg // 関数呼び出し
10 pop %eax // スタックからレジスタeaxに引き出し
11 push var // 変数varの内容をスタックに格納
12 call IncReg // 関数呼び出し
13 pop %ecx // スタックからレジスタecxに引き出し
14 ret // リターン
15 IncReg:
16 movl %esp, %ebp // pushによって動いたスタックの先頭アドレスをレジスタ ebp に代入
17 movl 4(%ebp), %edx // mainから渡された eax(var) の値をレジスタ edx に代入
18 incw %edx // レジスタ edx の値を2増やす
19 movl %edx, 4(%ebp) // 2増やしたものを引数のあるスタックの場所に代入
20 ret // リターン
(質問)
7 でレジスタ al に 1 を代入したのは何か意味があるのでしょうか。
17 の4(%ebp)はスタックポインタの1つ下、つまりmainから渡された引数でよろしいでしょうか。
18 の incw %edx はレジスタ edx の値を 2 増やすという意味でよろしいでしょうか。
13 でレジスタ ecx の値は 1236 になるので正しいでしょうか。
お礼
回答ありがとうございます 両方ともベースレジスタで、役割が違っていたのですね すっきりしました