0
[端末]$ ./yis a.yo
PC=0x2cで11ステップ停止。ステータス「HLT」、CC Z=1 S=0 O=0
レジスターの変更:
%eax: 0x00000000 0x00000004
%ebx: 0x00000000 0x00000005
%esp: 0x00000000 0x00000023
%ebp: 0x00000000 0x0000002f

メモリへの変更:
0x0020: 0x2c803fa0 0x27803fa0
0x0024: 0x20000000 0x05000000
0x0028: 0x905fb054 0x04000000
0x002c: 0x45205fa0 0x37000000
0x0030: 0x32200120 0x0d000000
0x0034: 0x00905fb0 0x00000000
[端末]$ cat a.yo
  0x000: | .pos 0
  0x000: | 初期化:
  0x000: 30f437000000 | irmovl スタック、%esp
  0x006: 2045 | rrmovl %esp, %ebp
  0x008: 800e000000 | メインを呼び出す
  0x00d: 00 | やめる
                      | |
  0x00e: | 主要:
  0x00e: a05f | pushl %ebp
  0x010: 2045 | rrmovl %esp,%ebp
                      | |
  0x012: 30f004000000 | 移動 $4,%eax
  0x018: a00f | pushl %eax
  0x01a: 30f305000000 | 移動 $5,%ebx
  0x020: a03f | pushl %ebx
  0x022: 802c000000 | コールサム
                      | |
  0x027: 2054 | rrmovl %ebp,%esp
  0x029: b05f | popl %ebp
  0x02b: 90 | 戻る
                      | |
  0x02c: | 和:
  0x02c: a05f | pushl %ebp #ここに
  0x02e: 2045 | rrmovl %esp,%ebp
                      | |
  0x030: 2001年 | rrmovl %eax,%ecx
  0x032: 2032年 | rrmovl %ebx,%edx
                      | |
  0x034: b05f | popl %ebp
  0x036: 90 | 戻る
  0x037: | スタック:

y86 アセンブリをコンパイルして実行するために、yas シミュレーターを使用しています。プログラムが 0x2c で停止する理由を理解しようとしています。パラメーターになる値を他のレジスタに移動するだけの関数 (使用されていない) に 2 つの定数を送信する以外は何もしません。

4

1 に答える 1