2014年11月30日日曜日

開発環境

計算機プログラムの構造と解釈[第2版](ハロルド エイブルソン (著)、ジュリー サスマン (著)、ジェラルド・ジェイ サスマン (著)、Harold Abelson (原著)、Julie Sussman (原著)、Gerald Jay Sussman (原著)、和田 英一 (翻訳)、翔泳社、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の5(レジスタ計算機での計算)、5.2(レジスタ計算機シミュレータ)、5.2.3(命令実行手続きの生成)、問題 5.11-b.を解いてみる。

その他参考書籍

問題 5.11-b.

コード(BBEdit, Emacs)

sample11_b.scm

(define (make-save inst machine stack pc)
  (let ((reg-name (stack-inst-reg-name inst)))
    (let ((reg (get-register machine reg-name)))
      (lambda ()
        (push stack (list reg-name (get-contents reg)))
        (advance-pc pc)))))

(define (make-restore inst machine stack pc)
  (let ((reg-name (stack-inst-reg-name inst)))
    (let ((reg (get-register machine reg-name))
          (reg-1 (pop stack)))
      (if (eq? reg-name (car reg-1))
          (lambda ()
            (set-contents! reg (cadr reg-1))
            (advance-pc pc))        
          (error "Unmacched register name -- ASSEMBLE" inst)))))

0 コメント:

コメントを投稿