[電車の中でコツコツScheme処理系を書く日記] 4駅目
ずっと内部構造の整理をしてたので、かけた時間の割りに進展が少ない…
引き続きVMの実装。
データセグメントに文字列を書き込んで、それをスタックにロードして表示する、
というところまで書けました。LOADS
が load string の意味です。
処理内容:
void yz_vm_test(void) { YzVM vm; YzExecImage img; yz_vm_init(&vm); yz_img_init(&img); YZ_WRITE_LOADS(&img, "test\n"); YZ_WRITE_PRINT(&img); YZ_WRITE_EOP (&img); yz_img_print_iseg(&img); yz_vm_execute(&vm, &img); }
実行結果:
00 01 02 03 04 05 06 07 08 09 ----------------------------- 00 03 00 00 00 00 0f 00 LOADS pc = 0, sp = 0 PRINT pc = 5, sp = 1 "test" EOP pc = 6, sp = 1
で、自殺したくなったのは、バグが取れなくて命令セグメントをダンプする関数まで書いたのに、原因がswitch
文でのbreak
書き忘れ。
次から真っ先に疑うことにします。自分を。