マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

自作エミュレータで学ぶx86アーキテクチャのプログラムミスについて

まず『「本書の開発環境に含まれるソースコードではcmpとsubでしかeflagsの更新をしていません。」とありますが(130頁)、配布されてるプログラ ムの tolset_p86/pre/instruction.c の add_rm32_r32() の中で eflags の更新をされています。同じソースコードの中で add_rm32_imm8() では eflags の更新をしていないので片手落ちな感はありますが。』とご指摘ありました。全くのその通りの内容で、add_rm32_r32の中でeflagsを更新してしまっています。これはソースコード側のミスで、ここではeflagsの予定はありませんでした。申し訳ありません。

 

『main()の中で、uint8_t code = get_code8(emu, 0); で命令の1バイト目を読み出し instructions[code](emu); で各命令の関数を呼んだ先で、例えば mov_r8_imm8() 等、関数の中で再度get_code8(emu, 0)を呼び出し命令の1バイト目を読み出す実装となっていますが、エミュレータのそれとして正しいのでしょうか?』との質問も受けましたが、CPUが何度もメモリにアクセスするのは確かに不自然なことであると思います。これもエミュレータの実装としてはミスだと思います。私の力が及ばず、実際のCPUの動作まではわかりませんが、ミスである可能性が極めて高いです。

 

他にもミスがあるので随時追記していきたいと思います。お金を出して頂き購入して頂いたのに申し訳ありません