読者です 読者をやめる 読者になる 読者になる

本当は怖い情報科学

情報系大学院生の趣味&実益ブログ。

[電車の中でコツコツ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書き忘れ。
次から真っ先に疑うことにします。自分を。

【広告】