2026年08月01日

今更 Z80マシン語 #6

  こんにちは〜、8/1 今日は港まつり・夜は花火があがります、会場への道路脇に住んでいるので、夕方からの
 大渋滞は見ものです!?。

  現在まだお昼なので、そうでもないですが、15時・16時になると・・・。

  知り合いは会場近くに住んでいますが、歩いて10〜15分のところ、車だと帰りは2時間くらい掛かるって言ってたな〜。

  私は部屋でインターネット中継観ます、でも実物をリアルで観るほうが、音とともに迫力は大違いなんだけどね!。

  今は日本全国各地で、花火大会は開かれていますが、観てみたければ、『三津浜 港まつり 花火 2026』などで
 検索すれば見つかるでしょう、日が沈んでからなので、時間は19:30〜21:00位じゃないかな〜??。

  完全にタイトル詐欺で始まった、”今更 Z80マシン語 #6” 今日のお題は『定型句的』な事について幾つか書いてみます。

  例1 Aレジスタは8ビット計算の主役です、ADD A,B (A=A+B)のニーモニックは有りますが、ADD B,C は無い。

  完全に覚えている訳ではないので、確認しましたが、合っていました・・、8ビットの演算はAレジスタに対してのみ
 のようです、最近のCPUだとレジスタは多いので、この制限はないのだと思います?。

  例2 上記の制限から、演算前にAレジスタをクリアする(0にする)ことも多いと思われますが、この場合XOR A,A
 など書くことが多いです、LD A,0 でもAレジスタを0に出来ますが、これだとマシン語では 3E 00 の2バイト必用です、
 ですが、XOR A,Aだと1バイトで済む上、実行速度も早いはずです。

  例3 特定回数のループを実現する場合、ループ数のカウンタには、Bレジスタがよく使われます、これはBレジスタを
 カウンタとした専用の命令、DJNZ (デクリメント・ジャンプ・ノンゼロ)命令が備わっているからです。
  他のレジスタをカウンタ(ループの)に使っても出来ますが、特別な事情のない場合、Bレジスタを使います。

  他にも色々有ると思いますが、思いつかないので?、本日はこの程度にしておくことにします。

  それではまた次回まで・・。

 
posted by Terra at 12:59| 愛媛 | Comment(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2026年07月30日

今更 Z80マシン語 #5

  こんにちは、毎日暑いですね!。

 こんな暑い季節に、お勉強?なんて出来な〜い、ってことです?、

 Z80インストラクションコード(ニーモニックコード)見て、Print文もFor文もIf文無いじゃないか!、こんなのでどうやって
 プログラムしろって言うんだ!?、って思いましたよね?。

 私は入門当初そう思いました、レジスタに数値をセットしたり、コピーしたりで一体どうしろっていうんだ〜!。

 って思ったものです、BASICで覚えた命令みたいなのは無いのか?、解説されている本を読んでみても、ロードだのストアだの
 フラグだののカタカナ語ばかり・・。

 ニーモニックコード眺めて沢山の種類の命令が用意されているのは、解りましたが全く意味が解りませんでした。

 こんなまま、何ヶ月かまったく理解は進みませんでした・・。

 未だに全て理解できてる訳でもないんですが、ある程度の行数のコードを書けば一定の仕事(操作)を行うことは出来るのが
 解ってきました・・。

 BASICのダイレクトモードで、Print 1+2 みたいな簡単な(単純な)ことならなんとか理解できてきました。

 上の例なら

 ニーモニック            BASIC風
 LD A,1               A=1
LD B,2               B=2   
 LD HL,8000h            HL=$8000
 ADD A,B               A=A+B
 LD (HL),A              POKE $8000,A

 みたいに書いてやればいいのが、なんとなく解ってきました、上の例だと答えの3が8000h番地のメモリに保存される、
 のが解りましたが、たったこれだけのことに手間がかかりすぎ・・!

 更に言うとCPUは上記のニーモニックコードを実行できませんので、マシン語に変換しなくてはダメです。

http://njprog.com/z80_007.htm
この表から LD A,1 は 3E 01 LD B,2 は 06 02 LD HL,8000hは 21 00 80 ADD A,Bは 80 LD(HL),Aは 77となるようです。

 モニタなどで、$7000 から 3E 01 06 02 21 00 80 80 77 C9 と打ち込んで J 7000でプログラムを走らせると、$8000に
 計算結果の03hがストア(メモリに書き込むこと)されているはずです。

 LD HL,8000h がマシン語で21 80 00 でなく 21 00 80 となるのは、インテル系列特有のスモールエンディアンの特徴で
 アドレスの16バイトの前後を入れ替えて、書くルールになっています。

 3E 01 06 02 21 00 80 80 77 C9 の最後のC9はモニタに戻れ RETURN の意味のマシン語で、RET のマシン語です。

 メモリ.bmp

 実行してみましたが、うまくいっているようで、一安心でした・・。(笑)

 走らせてモニタに帰ってきた後、$8000を確認すると、03hになっているのを確認できました。
 
 本日はここまでです・・。
posted by Terra at 15:20| 愛媛 ☀| Comment(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2026年07月28日

今更 Z80マシン語 #4

  はい、4回目で〜す。

 #3でニーモニックとアセンブラについてを観てもらいました、ここまで一通り観てもらった方なら、ニーモニック(命令コード)
 を見てもらっうのもいいかな?、とおもいます・・。

 ニーモニックコードなど
  ↓ ↓ ↓
 http://njprog.com/z80_room.htm

 この中の機械語・ニーモニック対応表(1)〜(3)がZ80機械語(命令)の全てです。

 PrintfもForもありません00〜FFまで1バイトの命令が列挙されています。

 これだけで256種類の命令(インストラクションコード)があるってことです。

 でもこれだけでは、足りないので命令を2バイトに拡張して512種類分に増やしました。

 機械語・ニーモニック対応表(1)は隙間無く並んでいましたが、機械語・ニーモニック対応表(2)には抜けている部分があります。

 これ全部覚えないといけないの?、当時の技術職の人は暗記してたのでしょうね?、ま〜暗記しなくてもこの表を持ってればOK
 だったかも知れません。

 これじゃ機械語でプログラム書ける人なんて生まれないわけで?、実際にニーモニックでプログラム書く場合には

 ニーモニック⇔機械語対照表の方を参照したと思います、これらを組み合わせて目的の処理を実現します。

 あ・・地震だ!、九州の人大丈夫だと良いな。

 本日はここまでにします、ニーモニック⇔機械語対照表を眺めて楽しんでください!?。
posted by Terra at 16:47| 愛媛 ☀| Comment(0) | プログラミング | このブログの読者になる | 更新情報をチェックする