独習アセンブラ リスト4-2
01: section .data
02:
03: msg db 'Hello, assembler', 0x0a
04:
05: section .text
06: global _start
07:
08: _start:
09: mov eax, [msg]
10: push eax
11: mov eax, 4
12: mov ebx, 1
13: mov ecx, esp
14: mov edx, 1
15: int 0x80
16: pop eax
17:
18: mov eax, [msg + 7]
19: push eax
20: mov eax, 4
21: mov ecx, esp
22: int 0x80
23: pop eax
24:
25: mov eax, 1
26: mov ebx, 0
27: int 0x80
02:
03: msg db 'Hello, assembler', 0x0a
04:
05: section .text
06: global _start
07:
08: _start:
09: mov eax, [msg]
10: push eax
11: mov eax, 4
12: mov ebx, 1
13: mov ecx, esp
14: mov edx, 1
15: int 0x80
16: pop eax
17:
18: mov eax, [msg + 7]
19: push eax
20: mov eax, 4
21: mov ecx, esp
22: int 0x80
23: pop eax
24:
25: mov eax, 1
26: mov ebx, 0
27: int 0x80
9行目はmsgのアドレスの値を得ます。
msgの値は、以下のような感じになっています。
msg + 0 = 'H'msgの値は、以下のような感じになっています。
msg + 1 = 'e'
msg + 2 = 'l'
msg + 3 = 'l'
msg + 4 = '0'
msg + 5 = ','
msg + 6 = ' '
msg + 7 = 'a'
msg + 8 = 's'
msg + 9 = 's'
msg + 10 = 'e'
msg + 11 = 'm'
msg + 12 = 'b'
msg + 13 = 'l'
msg + 14 = 'e'
msg + 15 = 'r'
msg + 16 = 0x0a
なので、18行目の[msg + 7]の値はaになります。
本文の例の説明には、
msgが指すメモリアドレスの文字とmsgの8番目の文字[msg + 7]を参照して、
MOVで移動するコードを含む
とあるので、一度eaxに移動してからスタックにプッシュしています。
eaxに移動しないでも、push dword [msg + 7]とする事で、
同じ事ができました。
本文の例の説明には、
msgが指すメモリアドレスの文字とmsgの8番目の文字[msg + 7]を参照して、
MOVで移動するコードを含む
とあるので、一度eaxに移動してからスタックにプッシュしています。
eaxに移動しないでも、push dword [msg + 7]とする事で、
同じ事ができました。
| 固定リンク
「アセンブラ(nasm)」カテゴリの記事
- 独習アセンブラ リスト5-2(2007.12.04)
- 独習アセンブラ リスト5-1(2007.12.04)
- 独習アセンブラ リスト4-4(2007.11.15)
- 独習アセンブラ リスト4-3(2007.11.15)
- 独習アセンブラ リスト4-2(2007.11.12)
この記事へのコメントは終了しました。
コメント