Jun's Homepage

Linux でアセンブリプログラミング

copyright (C) 2000-2009 Jun Mizutani

はじめに.

アセンブラを使って Linux のプログラミングで遊んでみます.アセンブラには NASM を使用して,カーネルを直接利用することにします.

いまさらアセンブラでプログラムを作成することは,時代錯誤と感じる人も 多いかもしれません.「アセンブラでプログラミングなんて職人芸でしょう」 と思うかもしれません.

20年前では趣味のプログラミングは BASIC か アセンブラしか選択肢がありません でしたが,今ではPerl, Ruby からアセンブラまでの間に非常に多くの言語があって, アセンブラは普通では不要な最下層の知識となっていると思います. 10BaseT のツイストペアケーブルのインピーダンスを気にする人はほとんどいない ようなものでしょうか?

アセンブリ言語の学習で最も困難なのは,最近では書籍が見つからないこと かもしれません.

…と書いていましたが、また増えてきているようですね。

インテルの公式のマニュアルは日本語の情報として https://www.intel.co.jp/jp/download/index.htm 付近から以下のファイルがダウンロードできます.

  • IA-32 インテル・アーキテクチャ最適化リファレンス・マニュアル(日本語PDF, 約 4.7Mバイト)
  • IA-32 インテル・アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル
    • 上巻: 基本アーキテクチャー [日本語: PDF 形式 5,056 KB]
    • 中巻 A: 命令セット・リファレンス A-M [日本語: PDF 形式 5,251 KB]
    • 中巻 B: 命令セット・リファレンス N-Z [日本語: PDF 形式 4,215 KB]
    • 下巻: システム・プログラミング・ガイド [日本語: PDF 形式 9,669 KB]

量が多すぎるかもしれませんが必要な部分をひろい読みすればいいでしょう.
(どんどんファイルサイズが大きくなっていくような気が...)

また英語ですが,The Art of Assembly Language という PDF形式のファイルが https://webster.cs.ucr.edu/AoA/index.html からダウンロードできます. 4.5M と大きいですが,PDFをZIP形式でまとめたもので 提供されています. インテルのCPUに関するアセンブラの基礎から1400ページにわたって 分かりやすく解説されています.書籍とする予定がないようなのが残念です. 16ビット版は書籍になっていませんが、32bit用は書籍になっています。ただし、 HLA (High Level Assembler) という独自のアセンブラが使用されています。 16ビット版を強く推薦します. 読みとおせば,私自身よりはるかに詳しくなれるでしょう (^^;

さて,DOS でMASM, TASMを使ってプログラムを作成していた(いる)人は問題ないとして Windows で C++ や Delphi, VB の経験はあるがアセンブラの経験がない人は上記の資料 を参考にしてサンプルを1命令ずつ追っていって下さい. アセンブリ言語は非常に単純な動作をする命令が並んでいるだけです. つまり習うより慣れろです.

ここでは,とにかく 無理をしない(私が)で80x86系のアセンブラを少しでも理解できる人を 主な対象として,次のような順序で進めていく予定ですが,どうなることやら ;-)

ARMバージョンも始めました。


目次

  • 1. 最初のプログラム (4/12/2000)
  • 2. nasm のインストールと特徴 (02/07/2009)
  • 3. 少し実用的なプログラム -- ウィンドウサイズの取得 -- (4/12/2000)
  • 4. Linux カーネルとシステムコール (4/12/2000)
  • 5. 標準入出力用のサブルーチンの作成 (3/11/2001更新)
  • 6. コマンドライン引数と環境変数の処理 (5/8/2000)
  • 7. 任意のファイルの読み書き (5/21/2000)
  • 8. メモリを実行時に確保する (6/10/2000)
  • 9. 子プロセスの起動 (7/21/2000)
  • 10. コンソール入力の編集 -- termios を使う --(8/22/2000)
  • 11. 浮動小数点演算 その1(11/04/2000 更新)
  • 12. 浮動小数点演算 その2 -- 電卓 --(11/04/2000)
  • 13. デバッグ(12/10/2000)
  • 14. フレームバッファでグラフィックス(2/22/2001)
  • 15. 乱数生成 -- Mersenne Twister --(3/11/2001)

  • 付録 A. システムコールとカーネルの関数 (8/3/2000更新)
  • 付録 B. システムコールの仕組み (6/17/2000)
  • 付録 C. インタプリタの作成(7/17/2002)
  • 付録 D. インタプリタで書いたコンパイラ(5/2/2006)

  • サンプルコードのダウンロードexasm.tar.gz (51KB) (3/11/2001 15章まで)

Jun's Homepage

  • HOME に戻る
  • 次のページ
  • webg:WebGPU 3Dライブラリ
  • Blender
  • Raspberry Pi メモ
  • rvtl:Tiny Basic
  • ARM64 アセンブリ
  • ARM アセンブリ
  • x86 アセンブリ
  • x86-64 アセンブリ
  • PowerPC アセンブリ

x86 アセンブリ

  • 0. はじめに
  • 1. 最初のプログラム
  • 2. nasm のインストールと特徴
  • 3. ウィンドウサイズの取得
  • 4. Linux カーネルとシステムコール
  • 5. 標準入出力用のサブルーチンの作成
  • 6. コマンドライン引数と環境変数の処理
  • 7. 任意のファイルの読み書き
  • 8. メモリを実行時に確保する
  • 9. 子プロセスの起動
  • 10. コンソール入力の編集 -termios を使う-
  • 11. 浮動小数点演算 その1
  • 12. 浮動小数点演算 その2 -電卓-
  • 13. デバッグ
  • 14. フレームバッファでグラフィックス
  • 15. 乱数生成 -Mersenne Twister-
  • A. システムコールとカーネルの関数
  • B. システムコールの仕組み
  • C. インタプリタの作成
  • D. インタプリタで書いたコンパイラ

アセンブリ言語シリーズ

  • PowerPC アセンブリ
  • ARM アセンブリ
  • ARM64 アセンブリ
  • x86 アセンブリ
  • x86-64 アセンブリ

ご意見・ご感想は,こちらの掲示板まで。

196051