基礎からきっちり覚える 機械語入門


基礎からきっちり覚える 機械語入門


マイナビ出版


はじめに

プロローグ A君の悲劇

01 コンピューターとはなにか
1-1 電卓とコンピューターの違い
ちょっと青春の気分に
逃げられなかった場合
ソフトウェアがなければ…
コンピューターがワープロになれるわけ
果てしなき野望
1-2 ハードウェアの一番基本的な話
もっとも手抜きで描いたコンピューターの構成
CPUとは
メモリとは
外部入出力装置とは
1-3 コンピューターは数しか分からない
基本中の基本
10進法とか2進法とか
なんで2進法などを使うのか?
実際に扱える数の制限
数字が長すぎてうっとうしい
[まとめ]一番基本的なところ
補足 ビットとバイト
補足 10進2進16進法対応表

02 みんな数字で表してみる
2-1 様々な数を表す
大きな整数
負の数の表し方
実数の表し方
コンピューターの数は正確ではない…こともある
2-2 文字を表す
文字コード
一番基本のコード体系:アスキーコード
制御記号
たくさんあるコード体系
こんなに種類があると困らないか?
2-3 画像その1:ビットマップ
ビットマップの概念
色を表すには?
画像サイズの問題
解像度を減らす
色の数を減らす
カラーパレット
データを圧縮する
画像データの種類
動画を表す
2-4 画像その2:メタファイル
メタファイルとは?
この方式の特長
この方式の欠点
どこに応用されているか?
2-5 画像その3:3次元コンピューターグラフィックス
物体のデータ化
3DCGの「描き方」
2-6 音を表す
音をそのままデータにする:PCM
サンプリングレートと音質
MP3とは?
音の鳴らし方をデータにする:MML
音の鳴らし方をデータにする:MIDI
GM規格
[まとめ]数値化できないものは?
補足 データ圧縮について
 データ圧縮とは
 データ圧縮方法1:ランレングス
 単純なランレングスだとうまくいかない例
 データ圧縮方法2:ハフマン符号化
 圧縮したデータをさらに圧縮したら?
 データ圧縮方法3:不可逆圧縮(JPEG)

03 アルゴリズム
3-1 プログラムとアルゴリズム
プログラムとは?
アルゴリズムとは?
3-2 迷宮からの脱出
迷路に閉じこめられた場合
出口に確実に行く方法
左手の法則
3-3 もっと詳しく説明しろだと?
迷宮に入った気分で
左手の法則完成!
のはずが…
3-4 大馬鹿者に噛んで含めて説明する
コンピューターに分かる説明
(1)迷路とは?
(2)道なりとは?
(3)方向とは? 正面とは?
(4)来た方向とは?
(5)進むとは?
(6)分かれ道・行き止まりとは?
(7)道の数の数え方は?
(8)左とは?
(9)引き返すとは?
(10)道なりに進むとは?
やっとできあがったが…
[まとめ]なんだか疲れた気がする…
補足 全然疲れていない人へ
 左手の法則が効かない場合
 あてどなき彷徨
 印を付ける
 これではだめだった
 だめな例1の解決
 だめな例2の解決
 確実な迷宮脱出アルゴリズム
 アルゴリズムのシェイプアップ

04 機械のコトバその1:機械語
4-1 なぜ機械語なのか?
機械語の文法
どんな命令があるか
機械語の表記
偽機械語コンピューター登場
偽機械語コンピューターの仕様
偽機械語の基本文法
4-2 データ転送命令
データ転送命令
間接参照
4-3 算術演算命令
符号反転命令
加算命令・減算命令
フラグ
比較命令
4-4 論理演算命令
否定
論理演算はビット単位で計算する
論理和
論理積
排他的論理和
2進法の数値の桁を操作する
ビット比較
メモリの値を真偽判定に使うには
4-5 ジャンプ命令
無条件ジャンプ
条件付きジャンプ
ジャンプ命令の基本的な使い方
4-6 入出力命令
外部機器との入出力
4-7 その他の命令
データ退避・復帰命令
ビットシフト命令
サブルーチンコール
その他の命令
たったこれだけ?
こんなもんが分かるかぁぁ!
4-8 アセンブリ言語
アセンブリ言語の概要
よく使うアドレスを記号化する
アセンブラ
4-9 基本的な処理の例
条件分岐とループ
2つのメモリを入れ替える
とりあえずの掛け算プログラム
お馬鹿な割り算プログラム
マルチワード計算
4-10 機械語で迷宮から脱出
迷宮脱出プログラム:機械語版
[まとめ]とにかく本気で疲れた…
補足 賢い掛け算と割り算プログラム
 高速な掛け算アルゴリズム
 割り算のアルゴリズム
補足 偽機械語の最小セット
 偽機械語最小セット
 パラメータの種類
 ジャンプ命令
 論理演算命令
 ビットシフト命令
 その他の命令
 算術演算
 符号反転
 足し算

05 機械のコトバその2:高級言語
5-1 アセンブリ言語の改良
なぜアセンブリ言語が分かりにくいのか
数値に分かりやすい名前を付ける
アドレスを省く
プログラムを修正する
5-2 アセンブリ言語を超えて
高級言語
高級言語をコンピューターはどうやって理解するか
高級言語ってなにが高級?
5-3 数値やアドレスに名前を付ける
定数:数値に名前を付ける
変数:アドレスに名前を付ける
変数のアドレスは?
変数の型
数値以外の型
5-4 よくある処理を簡便に
式の記述
各種の演算子
5-5 プログラムの流れを分かりやすく
条件分岐
関係演算子と論理演算子
ブロック
一度にたくさんの条件分岐
ループ処理
goto文とラベル
それから?
5-6 複雑な構造に名前を付ける
広い範囲に名前を付ける:配列
複雑な構造に名前を付ける:レコード型
さらにいろいろ
5-7 サブルーチン
同じようなところがいっぱいある
プログラムのブロックに名前を付ける
関数とプロシージャ
関数の定義例
5-8 機械語でサブルーチン
サブルーチンの動作
データ退避・復帰命令
スタック
スタック経由でアドレスを渡す
サブルーチンコール・復帰命令
パラメータの引き渡し
スタックの調整
結果を返す
機械語でサブルーチン呼び出し
ややこしいぞ!
5-9 サブルーチンの別な利点
プログラムの部品化
とりあえず大枠だけ作ってしまえ
よりシンプルな構成要素に還元する
5-10 高級言語で迷宮から脱出
迷宮脱出プログラム:Pascal版
まだまだ長いような…
[まとめ]すばらしき高級言語
補足 自分で自分を呼んでしまったら?
 スタックを使わない値の引き渡し
 再帰アルゴリズム
 再帰の例1:階乗
 再帰の例2:塗りつぶし
 再帰が行えるためには
 ローカルな変数
 変数の退避・復帰
 ローカル変数とスタックフレーム
 バッファオーバーフロー

06 機械のコトバその3:本当の機械語
6-1 本当の機械語について
なんで偽物などを?
本物の機械語と偽機械語はどう違う?
レジスタ
6-2 Z-80命令の簡単な解説
データ転送命令
算術演算命令
シフト・ローテート命令
論理演算命令
ビット演算命令
ジャンプ命令
入出力命令
退避・復帰命令
サブルーチンコール
割り込み処理
その他
というわけで
6-3 Pentiumだとどうなっている?
x86命令セット
x86命令で既存の命令はどうなった?
仮想メモリとマルチタスク用の命令の追加
もっと最新のCPUだと?
[まとめ]機械語はシンプルイズベスト
補足 もう少し突っ込んだハードウェアの話
 もう少しまともに描いたコンピューターの構成
 バス
 CPU←→メモリ間のデータのやりとり
 キャッシュって?
 CPU←→外部入出力装置間のデータのやりとりの概要
 I/Oポートを利用するデータ入出力
 ダイレクトメモリアクセス
 共有メモリを利用するデータ入出力
 割り込み

07 神への長い道のり
7-1 全能なるプログラム
コンピューターにあなたの意志を伝えるためには
塵も積もれば神になる?
不可能な問題
7-2 原理的には可能だが…
有限なる存在の場合
やっぱり不可能な問題
人への長い道のり
補足 チューリングマシンの停止問題

付録 偽機械語エミュレータ&アセンブラ
索引

書籍目次

Posted by shi-n