アセンブリ言語

アセンブリ言語のサンプルコード

x86アセンブリ言語を使用した簡単なサンプルコードを示します。このサンプルコードは、2つの数値を加算し、その結果を表示するプログラムです。

サンプルコード: 2つの数値を加算するプログラム

このプログラムは、2つの数値をメモリから読み込み、それらを加算し、結果を標準出力に表示します。Linux環境で動作することを前提としています。

アセンブリコード (add.asm)

section .data
    num1 db 5           ; 数値1
    num2 db 10          ; 数値2
    result db 0         ; 結果を格納する場所
    msg db "Result: ", 0 ; 結果表示のメッセージ

section .bss

section .text
    global _start       ; エントリーポイント

_start:
    ; num1を読み込んでeaxにロード
    mov eax, [num1]

    ; num2を読み込んでebxにロード
    mov ebx, [num2]

    ; eaxとebxを加算し、結果をeaxに格納
    add eax, ebx

    ; 結果をメモリに保存
    mov [result], eax

    ; 結果メッセージを表示
    mov ecx, msg       ; メッセージのアドレスをecxにロード
    mov edx, 8         ; メッセージの長さ
    mov ebx, 1         ; ファイルディスクリプタ(標準出力)
    mov eax, 4         ; sys_writeシステムコール
    int 0x80           ; カーネル呼び出し

    ; 結果を表示
    movzx eax, byte [result] ; 結果をeaxにロードしゼロ拡張
    add eax, '0'             ; 数値をASCII文字に変換
    mov [result], al         ; 結果をメモリに保存
    mov ecx, result          ; 結果のアドレスをecxにロード
    mov edx, 1               ; 結果の長さ
    mov ebx, 1               ; ファイルディスクリプタ(標準出力)
    mov eax, 4               ; sys_writeシステムコール
    int 0x80                 ; カーネル呼び出し

    ; プログラム終了
    mov eax, 1         ; sys_exitシステムコール
    xor ebx, ebx       ; 退出ステータス 0
    int 0x80           ; カーネル呼び出し

コンパイルと実行方法

このプログラムをNASM(Netwide Assembler)でコンパイルし、リンクして実行する方法を示します。

1. コードをファイルに保存

上記のコードをadd.asmという名前のファイルに保存します。

2. コンパイル

NASMを使用してアセンブリコードをオブジェクトファイルにコンパイルします。

nasm -f elf32 -o add.o add.asm

3. リンク

LD(リンカ)を使用してオブジェクトファイルを実行可能ファイルにリンクします。

ld -m elf_i386 -o add add.o

4. 実行

作成された実行可能ファイルを実行します。

./add

実行結果

Result: 15

このプログラムは、メモリから2つの数値を読み込み、それらを加算して結果を表示します。movaddint 0x80などの基本的なアセンブリ命令を使用しています。

int 0x80命令は、Linuxシステムコールを呼び出すために使用され、標準出力にメッセージを表示したり、プログラムを終了したりするために使用されます。

スポンサーリンク

-アセンブリ言語