Z80のアセンブリ言語をハンドアセンブル
プログラム中に足し算に使う数字を書いてしまうと、数字を変えたいときにいちいちプログラムを書き換えなくてはなりません。数字はデータとしてプログラムの外に置くようにします。例として16進数でA3と17を足してみましょう。
まずはプログラム本体から。KENTAC 800Z mk2のメモリーエリアは8000h以降が使用可能なので、スタートの番地は8000hにします。数値を入れておくデータのエリアはどこでもいいんですが、メモリーの8050h番地と8051h番地にしてみました。そこの入っている数字を足して、結果を8052hに書き込みます。
使う言語はZ80のアセンブリ言語。
CPUが直接理解できるプログラムは0110110111100010のような1と0の連なりで、人間にはまったく理解不能なので、4ビット(4桁)ずつ区切って16進数に変換して表示します。この場合だと0110 1101 1110 0010=6 D E 2ですね。実際には6D E2のように2桁ずつくっ付けて8ビット(8桁)にして表示し、この8桁の2進数を1バイトと呼びます。そう、メガバイト(MB)やギガバイト(GB)などでおなじみのバイトです。
でも、じゃあ6D E2って書かれていたら意味がわかるのかと言ったらこれまた普通の人には全然わかりません。こういうコンピューターにしか理解できない言葉を機械語と呼びます。
で、それでは困るので考え出されたのがアセンブリ言語です。アセンブリ言語はニーモックと呼ばれる命令の羅列で、簡略化された英語みたいな感じ。CPUごとに異なるので、Z80のプログラムをつくるにはZ80のアセンブリ言語で書く必要があります。
というわけで、そのアセンブリ言語で書いた足し算のプログラムがこちら。
■足し算するだけのプログラム
ORG 8000h ;プログラムの開始番地
LD A,(8050h) ;8050h番地に書かれている値をAレジスタにコピー
LD B,A ;Aレジスタの値をBレジスタにコピー
LD A,(8051h) ;8051h番地に書かれている値をAレジスタにコピー
ADD A,B ;AレジスタにAレジスタ+Bレジスタの結果を書き込む
LD (8052h),A ;8052h番地にAレジスタの値を書き込む
HLT ;CPUを停止させる
END
8050h A3h
8051h 17h
レジスタは計算のために数字を格納しておく領域で、Z80には8ビットのものが8個用意されています。2つの数字をそれぞれAレジスタ、Bレジスタに入れればよさそうなものですが、いったんAレジスタに入れたあとBレジスタにコピーしています。これはLD B,(番地)という命令がないからなのです。Aレジスタだけ特別なんですね。
アセンブリ言語は人間が理解できるかわりにコンピューターには理解できません。なので、機械語にしてあげます。このときアセンブラという変換プログラムを使うのですが、今回はハンドアセンブルをします。っていうとなんだかカッコよさげですが、自分の手で変換するっていうだけです。
「LD A,(アドレス)」という命令は機械語で「3A」というように、順番に変換していきます。
8000h 3A5080 ;3AはLD命令 5080は8050hをひっくり返したもの
8003h 47 ;A→Bへ数値をコピー
8004h 3A5180 ;3AはLD命令
8008h 325280 ;32はADD命令
800Bh 76 ;HALT(停止)命令
8050h A3
8051h 17
なんで8050hを5080とひっくり返しているかというと、そういう決まりだからです。これをポチポチと入力していきます。
まずはリセットしてからプログラムを入力。
この連載の記事
-
最終回
デジタル
本物の元素を1cm角キューブにした”標本セット”を買いました -
第352回
デジタル
全9種類! ミリタリー風「蚊取り線香」ホルダーでどんな線香が使えるのか試してみました -
第351回
デジタル
ミリタリーテイスト満点の「蚊取り線香」ホルダー、こんなモノまでタクティカル! -
第350回
デジタル
「スキンヘッド専用シェーバー」は今年買ってよかったもの大賞、金賞候補です -
第349回
デジタル
スキンヘッド専用シェーバーで頭ツルツル -
第348回
デジタル
靴底補修剤でカカトに空いた穴を直してみました -
第347回
デジタル
ダイヤルを回すだけでフィットするシューズ「DICTATOR」を衝動買い! -
第346回
デジタル
ハンヴィーのシート交換で若干のトラブルが! -
第345回
デジタル
未使用新品&中古美品のハンヴィー用シートをまとめ買い! -
第344回
デジタル
Beatsのヘッドホンが手放せなくなりました -
第343回
デジタル
そっぽを向いていたハンヴィーのタイヤが直りました! - この連載の一覧へ