アカウント名:
パスワード:
Z80でカウンタと言えばBレジスタだよ~ #LDIRなんて実にCISCな命令だよな
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア
コンピュータはマシン語から (スコア:1)
大人が本気になって取り組むようなものに、むしろ子供は魅力を感じたりする。
そこでZ80マシン語秘伝の書 [yahoo.co.jp]。
いまならエミュレータで Z80 (MSX)も容易に手に入る。
CPUとメモリの関係がイメージできるとコンピュータの理解が飛躍的に伸びると思う。
理解のためにはマシン語がうってつけ。
この本
# mishimaは本田透先生を熱烈に応援しています
Re:コンピュータはマシン語から (スコア:1)
メモリのブロックコピー命令を使うのが
定石だったと記憶していますね。
XOR Aとかもですが、この時代のハックは
簡潔で高速でよく分かる実用的なものが多かったように思います。
Re:コンピュータはマシン語から (スコア:0)
0をPUSHするんだよ。
Re:コンピュータはマシン語から (スコア:1)
>0をPUSHするんだよ。
目から鱗www
512バイト(256ループ)までなら、
ループも大変じゃないからそっちが速いのかな?
あ、PUSH回数増やせばいいか。
256バイトでやってみたらこんな感じ?
ブロック転送の場合
LD HL,0C000H
LD DE,0C001H
LD BC,00FFH
LD (HL),00H
LDIR
PUSHだとこう?
LD HL,0000H
LD A,80H
LOOP:
PUSH HL
DJNZ LOOP
こう?
# 極めて怪しい。だいぶ忘れてた
重箱の隅 (スコア:1)
Z80でカウンタと言えばBレジスタだよ~
#LDIRなんて実にCISCな命令だよな
Re:コンピュータはマシン語から (スコア:1)
> PUSH HL
> DJNZ LOOP
ループしちゃったら、PUSH の恩恵半減ですよ。
そういうときは、アンロールしてPUSH を並べるのが定石。
> LDIR
1ループが19クロックだっけ?
LDIR: フェッチ(8)、データ読み込み(3)、データ書き込み(3)、コンディションチェック(5)
毎回フェッチサイクルが入るあたり、無駄が多いんですよね。
> PUSH HL
> DJNZ LOOP
PUSH: 命令フェッチ(5)、データ書き込み(3)、データ書き込み(3)
DJNZ: 命令フェッチ(5)、ジャンプ先読み込み(3)、コンディションチェック(5)
合計24クロックで2バイトだから、一応LDIRより倍近く速くなるか。
LD HL,0000H
LD B,10H
LOOP:
PUSH HL
PUSH HL
PUSH HL
PUSH HL
PUSH HL
PUSH HL
PUSH HL
PUSH HL
DJNZ LOOP
と並べれば、だいたい1バイトあたり6クロック強で処理できるようになります。
あとは、完全にアンロールしたPUSH命令群から、必要なバイト数転送できる所にジャンプしたりとか。