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なんですね。。
高速性より、単純性を取ったとは。。(^^;;