« けいおん見立てごっこ | トップページ | 久しぶりにシビれる発言を見た »

Z80 で乗算

 本当は Z80 より 8086 の方が得意なのだが。

   ORG  8000H
   LD   H,200    ;H = 掛ける数
   LD   L,220    ;L = 掛けられる数

   LD   IX,0     ;IX に計算結果が入る
   LD   E,L      ;掛けられる数の下位を E
   LD   D,0      ;掛けられる数の上位を D

J1:BIT  0,H      ;最下位ビットをテスト
   JP   Z,J2     ;ビットが立っていなければスキップ

   ADD  IX,DE    ;掛けられる数を加算

J2:SLA  E        ;下位をシフト。最上位はキャリーに
   RL   D        ;上位をシフト。最下位はキャリーから
   SRL  H        ;掛ける数をシフト
   JP   NZ,J1    ;掛ける数がゼロになったら終わり

   HALT
   END 

 一応シミュレータでは動作した。確か乗算器もこれに近いロジックだったはず。

(余談だけど、このシミュレータの Vector にある方はバージョンが古くて、一部の命令が正しく動かないので、作者のホームページからダウンロードした方がよい。)

 8086 だとジャンプがむやみと遅かったイメージがあったので、ジャンプを使わずに SBC A,A でマスクを作って AND をとるなんて方法も考えたけど、Z80 は意外とジャンプが速いようなので素直にジャンプにしてみた。

 これならさすがに、ループで 255 回足し算を繰り返すとかよりは速いだろう。8 ビット固定だから、展開すればもっと速くなるけどね。実用ではなくロジックを示すのが目的なので見やすさを優先した。

 サイクル数は目の子で大雑把に勘定しただけ。シミュレータにサイクル数を計算する機能がついていればいいと思うのだが、今時 Z80 でもないからねえ。検索しても資料もなかなか出てこない。ぼくが最後に Z80 を手がけたのも、かれこれ 20 年近く前で、しかも組み込み用途だった。 

 念のために書いておくけど、これは特殊な裏技でもなんでもなくて、ある意味最も標準的な方法である。だからこれを知らない奴がもしいたら、そいつは少なくともこの分野に関してはド素人と断定して間違いない。

 関係ないけど「エロバリ」がんばれ! 我欲の天罰だとか言ってる糞馬鹿に負けるな! 応援するぞ!

 関係ないけど、蜂谷はやっぱり糸谷なのか。あんなにモデルまるわかりで大丈夫か。

|

« けいおん見立てごっこ | トップページ | 久しぶりにシビれる発言を見た »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/67762/52269027

この記事へのトラックバック一覧です: Z80 で乗算:

« けいおん見立てごっこ | トップページ | 久しぶりにシビれる発言を見た »