« 独習アセンブラ リスト4-3 | トップページ | Perlでコールバック サブルーチンの引数としてサブルーチンの参照を渡す »

2007-11-15

独習アセンブラ リスト4-4

独習アセンブラ 翔泳社の第四章のリスト 4-4です。

スタックは通常、先に積んだ物の上に
後から積む物が、上に載せられるイメージなので、
当然上の物を取り出さない限り、
下の物を取り出す事は出来ませんので、
先に積んだ物は、後から取り出す事になります。

この順序を意図的に変更する事で、
レジスタ内の値を交換します。


01: section .text
02: global  _start
03: 
04: _start:
05:         push    0x31
06: 
07:         mov     edx, 4
08:         mov     eax, 1
09: 
10:         push    edx
11:         push    eax
12: 
13:         pop     edx
14:         pop     eax
15: 
16:         mov     ebx, 1
17:         mov     ecx, esp
18:         int     0x80
19: 
20:         pop     eax
21: 
22:         mov     eax, 1
23:         mov     ebx, 0
24:         int     0x80


Linuxのシステムコールでは、
eaxに4
edxには、出力するバイト数を指定しますが、
ここでは、これを逆にします。
eax = 1
edx = 4
と指定します。

これを一度スタックに積み、
逆の順序で取り出すことで、
eaxとedxの内容を交換します。

5行目と20行目のpushとpopは、
出力される文字 '1' ( 0x31 )です。





|

« 独習アセンブラ リスト4-3 | トップページ | Perlでコールバック サブルーチンの引数としてサブルーチンの参照を渡す »

アセンブラ(nasm)」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 独習アセンブラ リスト4-4:

« 独習アセンブラ リスト4-3 | トップページ | Perlでコールバック サブルーチンの引数としてサブルーチンの参照を渡す »