« 仮想端末ツール screen | トップページ | 独習アセンブラ リスト1-2 »

2007-10-24

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

独習アセンブラのリスト1-1をLinux版に移植してみました。
私の環境ではコンパイル、リンクは以下のようにします。
ソースファイルが1-1.asmで実行ファイル1-1を作る例です。
$ nasm -f elf 1-1.asm
$ ld -s -o 1-1 1-1.o
List1-1
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

まず、はじめにスタックに表示する文字を積みます。
Linuxの出力のシステムコールは、
eax: 4
ebx: 1(標準出力)
ecx: 文字列の先頭のアドレス
edx: 出力する文字数
となるので、それぞれを設定します
スタックのトップを指すespを使って、
ecxには表示対象の文字のアドレスをコピーします。
int 0x80でシステムコールを使います。
add    esp,4は、
はじめにスタックに0x31が積まれているので
espの位置を元に戻しています。

最後の三行は処理終了のシステムコールです。

DOSのシステムコールは、
文字を一文字出力する場合と
末尾に'$'の付く文字列を出力する場合、
それぞれに別の命令が割当てられていますが、
Linuxでは、文字列の出力として、
一文字出力するのか、
それ以上なのかの文字数の違いのみのようです。

|

« 仮想端末ツール screen | トップページ | 独習アセンブラ リスト1-2 »

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

コメント

コメントを書く



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




トラックバック


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

« 仮想端末ツール screen | トップページ | 独習アセンブラ リスト1-2 »