(assembler) Z80 マシン語秘伝の書

日高 徹, 1989年, 啓学出版
1991/1995 MZNT(注文) 1800円 2006-01-17/02-14 ★4
55140

Z80アセンブラのハッキング(テクニック)書。

当時、パソコンに詳しい友人から薦められて購入した。もちろん、本屋に並んでいるはずもないので注文した。現在、ネット上で見るかぎり、かなり高い評価を得ているようだ。

今回、プログラミング言語を学ぶ(おさらいする)目的で、アセンブラから読み直すことにした。アセンブラ関連で最後の3冊目。いま思えば、x86系で勉強した方が良かったかもしれないけど、手元に書籍が無いのであきらめた。

購入当時、ひと通り読んだつもりだったが、最初の部分しか読んでなかったようだ。たぶん、難しかったのだろう。このため、読み直しでもないし、コードを理解するのも難しかったので、ひどく読むのが遅くなった。

アセンブラって、ルービックキューブのようなパズル性が強いと思う。アセンブラで、一度レジスタの内容を退避するところは、ルービックキューブで、いったん90度回転させて、位置が変わらないように退避させるのに似ている。


x86系やMS-DOS環境を理解するのに、次のウェブを読んでおこうと思う。

アセンブラ入門
http://www5c.biglobe.ne.jp/%7Eecb/assembler/assembler02.html
アセンブラMS-DOSの世界〜
http://www5c.biglobe.ne.jp/%7Eecb/assembler2/assembler12.html

Win32 MASM プログラミング入門
http://www7.plala.or.jp/keny01/asm/win32/


つか、MASMが無償で配布されてたのね

ダウンロードの詳細 : Microsoft Macro Assembler 8.0 (MASM) パッケージ (x86 用)
http://www.microsoft.com/downloads/details.aspx?FamilyID=7A1C9DA0-0510-44A2-B042-7EF370530C64&displaylang=ja

目次

正誤表:http://njprog.com/toruhidaka/permit_3.htm#hidenz8 2010-07-10追記

一の章 秘伝の書を読む前に

ニの章 秘伝の問答80

  • その1 マイナスの数値
  • その2 慣用句的論理演算
  • その3 B=0の調べ方
  • その4 RAMの特徴を活かす
  • その5 HL=0の調べ方
  • その6 無駄命令とは
  • その7 「ADD HL,A」を表現
  • その8 「ADD HL,1234H」を表現
  • その9 「SUB HL,DE」を表現
  • その10 JRとJPの違い
  • その11 +/−を交互に
  • その12 LD命令を減らす
  • その13 ビット転送
  • その14 サブルーチンへのジャンプ
  • その15 命令の書き換え
  • その16 フラグで合図を送る
  • その17 範囲のある比較
  • その18 ペアレジスタの値を2倍に
  • その19 マイナスの値を1/2にする
  • その20 かけ算を分解して高速化
  • その21 ブロック転送
  • その22 CP命令でのジャンプ
  • その23 共通項のあるジャンプ
  • その24 テーブルを利用したジャンプ
  • その25 スタックを利用したジャンプ
  • その26 ビット別のジャンプ
  • その27 2つのプログラムを共有する
  • その28 DJNZ命令の特徴
  • その29 P/Vフラグとは
  • その30 基礎的な擬似乱数
  • その31 実用的な擬似乱数
  • その32 擬似乱数利用の基礎
  • その33 擬似乱数の応用
  • その34 擬似乱数に変化をつける
  • その35 裏レジスタとは
  • その36 表/裏レジスタの共用
  • その37 メモリを埋める
  • その38 データ転送
  • その39 データ高速転送
  • その40 3バイトの加減算
  • その41 十六進数を十進数に
  • その42 BCD数値の加減算
  • その43 データの左右反転
  • その44 実用できる左右反転プログラム
  • その45 Hフラグ、Nフラグとは
  • その46 いち度のCP命令で5つの条件判断
  • その47 「CP HL,DE」を実現
  • その48 「CP BC,DE」を実現
  • その49 ペアレジスタのNEG命令
  • その50 ジャンプ代わりにリターン
  • その51 「LD HL,SP」を実現
  • その52 CPIR命令について
  • その53 CPIR命令の効果的用法
  • その54 CPDR命令とテーブル
  • その55 ベスト5のチェック
  • その56 1バイト数値ソート
  • その57 2バイト数値ソート
  • その58 ブロック単位の文字列サーチ
  • その59 連続データからの文字列サーチ
  • その60 ブロック単位の文字列ソート
  • その61 A×B=HL(標準タイプ)
  • その62 A×B=HL(筆算タイプ)
  • その63 HL×BC=HL(筆算タイプ)
  • その64 A÷B=C(小数第一位七捨八入)
  • その65 HL÷DE=BC(小数第一位七捨八入)
  • その66 HL÷DE=BC.A(小数第三位七捨八入)
  • その67 BC.A×HL'=HL(小数第一位七捨八入)
  • その68 HL÷DE=BC.A(筆算タイプ)
  • その69 アスキーコードからHLレジスタへ変換
  • その70 アスキーコードからBCDの数値へ変換
  • その71 BCDの数値をアスキーコードへ変換
  • その72 BCDをシフトする
  • その73 BCD数値の四捨五入
  • その74 BCD数値×A
  • その75 BCDうしのかけ算(筆算タイプ)
  • その76 HLレジスタの値をBCDに変換
  • その77 BCDうしの割り算(割る数の桁数固定)
  • その78 BCDうしの割り算(割る数の桁数不定
  • その79 BCDに関するミニ・テクニック
  • その80 テーブル処理で複雑な計算を

三の章 正しいマシン語のために