独習アセンブラ リスト1-1
独習アセンブラのリスト1-1をLinux版に移植してみました。
私の環境ではコンパイル、リンクは以下のようにします。
ソースファイルが1-1.asmで実行ファイル1-1を作る例です。
私の環境ではコンパイル、リンクは以下のようにします。
ソースファイルが1-1.asmで実行ファイル1-1を作る例です。
$ nasm -f elf 1-1.asm
$ ld -s -o 1-1 1-1.o
List1-1$ ld -s -o 1-1 1-1.o
section .text
global _start
_start:
push 0x31
mov eax,4
mov ebx,1
mov ecx,esp
mov edx,1
int 0x80
add esp,4
mov eax,1
mov ebx,0
int 0x80
global _start
_start:
push 0x31
mov eax,4
mov ebx,1
mov ecx,esp
mov edx,1
int 0x80
add esp,4
mov eax,1
mov ebx,0
int 0x80
まず、はじめにスタックに表示する文字を積みます。
Linuxの出力のシステムコールは、
eax: 4
ebx: 1(標準出力)
ecx: 文字列の先頭のアドレス
edx: 出力する文字数
となるので、それぞれを設定します
スタックのトップを指すespを使って、
ecxには表示対象の文字のアドレスをコピーします。
int 0x80でシステムコールを使います。
add esp,4は、
はじめにスタックに0x31が積まれているので
espの位置を元に戻しています。
最後の三行は処理終了のシステムコールです。
DOSのシステムコールは、
文字を一文字出力する場合と
末尾に'$'の付く文字列を出力する場合、
それぞれに別の命令が割当てられていますが、
Linuxでは、文字列の出力として、
一文字出力するのか、
それ以上なのかの文字数の違いのみのようです。
Linuxの出力のシステムコールは、
eax: 4
ebx: 1(標準出力)
ecx: 文字列の先頭のアドレス
edx: 出力する文字数
となるので、それぞれを設定します
スタックのトップを指すespを使って、
ecxには表示対象の文字のアドレスをコピーします。
int 0x80でシステムコールを使います。
add esp,4は、
はじめにスタックに0x31が積まれているので
espの位置を元に戻しています。
最後の三行は処理終了のシステムコールです。
DOSのシステムコールは、
文字を一文字出力する場合と
末尾に'$'の付く文字列を出力する場合、
それぞれに別の命令が割当てられていますが、
Linuxでは、文字列の出力として、
一文字出力するのか、
それ以上なのかの文字数の違いのみのようです。
| 固定リンク
「アセンブラ(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)
この記事へのコメントは終了しました。
コメント