はじめに

本書をお手に取っていただきありがとうございます。

本書では、一つ一つ構文を理解していくことで機械語を書いてみます。機械語は、ソフトウェアエンジニアの領域の言語としては低レイヤー中の低レイヤーで、これより下は無いってくらいですが、バイナリ列とはいえちゃんとパターンがあり、構文として捉えることができ、人の手で書くこともできます。

本書の構成

本書は以下の構成です。

  • 第1章 環境構築とはじめてのプログラム
    • ループだけの簡単なプログラムを通して、環境構築をしながら、本書で機械語を理解していく流れを紹介します
    • 開発はテキストベースで行えるように簡単なスクリプトを使います
    • 実行環境はQEMU上です。OSレスで直接動作させます。
    • また、機械語を理解するための補助器具として、シェル上で手軽にアセンブル・逆アセンブルするツールも用意しておきます
      • 以降の章ではこのツールも活用しながら、機械語表現が分からないときは適宜アセンブラからアセンブルしてみます*1
  • 第2章 基本的な演算
    • 基本的な演算命令(四則演算、論理演算等)の機械語における構文を紹介します
  • 第3章 シリアルドライバを作る
    • シリアルドライバを作り、QEMUのシリアル出力画面に文字を表示してみます
  • 第4章 フレームバッファで画面描画
    • フレームバッファと呼ばれる領域へピクセル値を書き込むことで画面描画します
  • 第5章 キーボードドライバを作る
    • キーボードドライバを作り、キーボードからの入力を取得します
  • 付録A 登場した機械語命令と構文の一覧
    • 登場した構文と命令を一覧にまとめています

[*1] 「それなら最初からアセンブラで書けば良いじゃん」は禁句です(笑)。まあ、この本の目的は機械語を勉強して書いてみることであって、何らかの別の言語から変換してきては意味がないので。

開発環境・動作確認環境

筆者が開発や動作確認を行っている環境を以下に記載します。

  • OS: Debian GNU/Linux 9.9 (stretch)
  • binutils: 2.28 (Debian stretchのバージョン)
  • QEMU: 2.8.1 (Debian stretchのバージョン)

本書のPDF版/HTML版やソースコードの公開場所について

これまでの当サークルの同人誌同様、本書もPDF版/HTML版は以下のページで無料で公開しています。

サンプルコードは以下のGitHubリポジトリで公開しています。

サンプルコードのリポジトリ内はディレクトリで分かれています。各ディレクトリが以降の各節あるいは各項で作るものです。節あるいは項の冒頭で「この節/項のサンプルディレクトリはXXです。」と紹介しますので適宜参照してみてください。