まとめ
この記事では、NASM アセンブラの歴史と入門レベルの使用法について説明します。
NASM の概要
NASM (The Netwide Assembler) は、x86 および x86-64 プラットフォームで広く使用されているアセンブラーです。そのバージョン履歴は次のとおりです。
0.98 - 1997 年にリリースされたこのバージョンには、x86 シリーズ プロセッサのサポートに加え、一般的に使用されるアセンブリ命令とマクロ定義が含まれており、Linux カーネルをコンパイルできる最初のアセンブラになります。
0.99 - 1998 年にリリースされ、MMX 命令セットのサポートなど、多くの新機能が追加されました。
0.98.39 - 2000 年にリリースされ、最後の DOS 専用バージョンになりました。
1.0rc1 - 2002 年にリリースされ、Windows プラットフォームのサポートが追加されました。
2.0 - 2008 年にリリースされ、x86-64 プラットフォームのサポートが追加され、構文が改善されました。
2.11 - 2014 年にリリースされ、AVX2 命令セットやコンパイラ プラグインのサポートなど、多くの新機能が追加されました。
2.14 - 2017 年にリリースされ、AVX-512 命令セットのサポートとその他の改善が追加されました。2.15 - 2021 年 1 月にリリースされ、最新の命令の一部のサポートが追加され、LLVM IR および LLVM ビットコード出力形式のサポートが追加され、いくつかのコマンド ライン オプションが追加され、NASM の柔軟性とカスタマイズ性が向上しました。エラー情報がより詳細になります。ユーザーによるデバッグとエラーの除去が容易になり、アセンブリの速度と効率が向上し、大規模なプロジェクトをコンパイルする際の NASM の速度が向上します。
現在、NASM の最新バージョンは 2.15 で、x86 および x86-64 プラットフォームで最も広く使用されているアセンブラの 1 つとなっており、効率的なマシン コードと再配置可能なオブジェクト ファイルを生成できます。
NASMのインストール
まず、開発環境に NASM をインストールする必要があります。パッケージ マネージャーを使用して Linux にインストールすることも、Windows では公式 Web サイトからインストーラーをダウンロードすることもできます。
Ubuntu に NASM をインストールします。
sudo apt install nasm
アセンブリコードを書く
任意のテキスト エディタを使用してアセンブリ コードを作成し、ファイルを.asm
その形式で保存します。簡単な例を次に示します。
section .data
hello db 'Hello, world!',0xD,0xA,0
section .text
global _start
_start:
; write the message
mov eax, 4
mov ebx, 1
mov ecx, hello
mov edx, 15
int 0x80
; exit
mov eax, 1
xor ebx, ebx
int 0x80
このコードは、Hello, world!
文字列を標準出力に書き込み、プログラムを終了します。
アセンブリコード
ターミナルまたはコマンド ライン インターフェイスを開き、.asm
ファイルが保存されているディレクトリに移動して、次のコマンドを実行します。
nasm -f elf64 hello.asm
elf64
上記のコマンドは、の形式でターゲット ファイルを生成しますhello.o
。
リンクオブジェクトファイル
アセンブラを実行可能ファイルに変換するには、オブジェクト ファイルを実行可能ファイルにリンクする必要があります。これは、 GNU リンカーを使用してld
実行できます。ターミナルまたはコマンド ライン インターフェイスで次のコマンドを実行します。
ld -s -o hello hello.o
hello
上記のコマンドは、アセンブラの最終バージョンである実行可能ファイルを生成します。
プログラムを実行する
ターミナルまたはコマンド ライン インターフェイスで、次のコマンドを使用してプログラムを実行します。
./hello
が出力されHello world!
、プログラムが正常に実行されたことが示されます。
参考文献
要約する
NASM アセンブリ言語を学習すると、コンピューターの基礎となるアーキテクチャと命令セットを深く理解できるようになり、コンピューター システムの動作原理をよりよく理解できるようになり、高級言語が機械語に変換されるプロセスを理解するのに役立ちます。高級言語の仕組みをより深く理解するためです。