MC6800のプログラミングテクニック(23) 除算の再検討 32bit版
32bit版の除算を考える。考え方は8/16bit版と一緒だが、32bitだとレジスタが全く足りない。32bit加減算が必要なのに、AccAB合わせても16bit幅しかない。 被除数とワーク領域(剰余)だけで合計8バイトものシフトが発生する ...
MC6800のプログラミングテクニック(22) 除算の再検討 16bit版
こんどは16bit版の除算を考える。考え方は8bit版と一緒だが、16bitだとレジスタが足りないので工夫が必要になる。 ワーク領域(剰余)は加減算が必要なので、レジスタに置く。16bit除算なので加減算も16bit幅だ。これでAccABを ...
MC6800のプログラミングテクニック(21) 除算の再検討・データの性質
整数除算の商のビットの0,1を数えると、0になるビットが多く 1は少ない。その性質が整数除算の高速化に使える。 被除数(a)と除数(d)がランダムに分布していると仮定してみよう(実際には扱うデータによって異なるはずだが、簡単に考えてみる)。 ...
MC6800のプログラミングテクニック(20) 除算の再検討 8bit版
1978年に発表された Intel 8086 には乗除算命令が搭載されていた。それ以前の8bitマイクロプロセッサでは、MC6801やMC6809に8bit乗算命令があるぐらい。 初期のRISCであるSPARCでも パイプラインを乱さないよ ...
chibicc compiler を6800向けに改造する (14) アドレッシングと最適化(2)
chibicc compiler を6800向けに改造する (5) アドレッシングと最適化 の続き。 MC6800で良いコードを生成するには、Acc A,B と IX,SP の使い分けが必要だと書いたが、もっと場合分けが必要なことに気がつい ...
chibicc compiler を6800向けに改造する (13) strcpy その2
chibicc compiler を6800向けに改造する (4) strcpy | ず@沖縄 の続きです。 前回も書いたように、MC6800の泣きどころはインデックスレジスタが1つしかないことと、スタック操作が苦手なこと。例としてstrc ...
MC6800で16bit整数の平方根を求める
Z80での高速な平方根処理: PICマイコンは面白い にZ80で平方根を高速に求める記事があった。 記事で参照されているRetro Programming: A Fast Z80 Integer Square Rootにあったのは以下のよう ...
Amsterdam Compiler Kit を6800向けに改造する (6) 色々悩んでいる
Amsterdam Compiler Kit を改造してMC6800用のコードを出力する試みの6回目。実はスタックマシンの動作が思っていたのと違っていてテストが動きません。 関数引数が1バイトのときのendian問題のときにもっと調べておけ ...
Amsterdam Compiler Kit を6800向けに改造する (5) デモが動作するようになった
Amsterdam Compiler Kit を改造してMC6800用のコードを出力する試みの5回目。ackに含まれているexampleのいくつかが 動くようになりました。 標準入力からの入力が必要なので、emu6800にパッチを当てて使っ ...
Amsterdam Compiler Kit を6800向けに改造する (4) 関数引数がcharのとき
Amsterdam Compiler Kit を改造してMC6800用のコードを出力する試みの4回目。今回は関数引数がcharのときの処理 davidgiven/ack: The Amsterdam Compiler Kit EM code ...
MC6800のプログラミングテクニック(19) AccABと0の比較
Amsterdam Compiler Kit の生成する中間言語(EM code)では、Top of Stack と0を比較し、ToSに0,1を入れる命令がある。 tlt,tle,teq,tne,tge,tgt がそれだ。6800では To ...
Amsterdam Compiler Kit を6800向けに改造する (3) 関数呼び出し
Amsterdam Compiler Kit を改造してMC6800用のコードを出力する試みの3回目。今回は関数呼び出しについて。 davidgiven/ack: The Amsterdam Compiler Kit 引数の受け渡し スタッ ...



