LDIRは、毎回、命令をフェッチしていた。。(汗)

http://slashdot.jp/askslashdot/comments.pl?sid=358970&cid=1145732

色々、調べていると、どうやら、LDIRという命令は、毎回命令をフェッチしていることが分かりました。



さて、問題です。 下記のコードを実行すると、どうなるでしょうか?

ORG 0D000h
LD  HL,0D000h
LD  DE,0D001h
LD  BC,0FFFFh
LDIR
RET
HALT

マシン語でいうと、こんな感じ。

D000: 21 00 D0 11 01 D0 01 FF FF ED B0 C9 FF


どんどん、メモリーが、21h で埋まっていき、暴走する。?

いえいえ、答えは、下記のようになって止まる。。でした。


D000: 21 21 21 21 21 21 21 21 21 21 B0 C9 FF

  • D000の内容で、メモリーが書き換えられていく
  • ED B0 が、21 B0 C9 になった瞬間に、LD HL,0C9B0h が実行される
  • 次の、FF (HALT) で、止まる。


これから、導かれる答えとしては、LDIRって、毎回命令フェッチしているんだ!!
ということでした。(^^;;

へぇ。。しらんかった。。
エミュレータとか、そういう風に組んでないよ。。

まぁ、LDIR自身を書き換えようとしたら、止まるようにはしてあるので、似たような現象にはなると思うけど。。


うーん。Z80って、昔のCPUなんですね。。
高速性より、単純性を取ったとは。。(^^;;