PDP-11による機械語入門 問2-1
問2-1
(defun load-memory (path) (with-open-file (s path :element-type '(unsigned-byte 8)) (let ((mem (make-array (file-length s) :element-type '(unsigned-byte 8)))) (read-sequence mem s) mem) )) (defun read16 (mem i) (logior (elt mem i) (ash (elt mem (+ i 1)) 8))) (defun reasem (mem) (let ((i 0)) (while (< i (length mem)) (format t "~4,'0x: " i) (case (read16 mem i) (#x15c0 (format t "~4,'0x ~4,'0x mov $~x, r0~%" (read16 mem i) (read16 mem (+ i 2)) (read16 mem (+ i 2))) (incf i 4)) (#x8901 (format t "~4,'0x sys 1 ; exit~%" (read16 mem i)) (incf i 2)) (#x8904 (format t "~4,'0x sys 4 ; write~%" (read16 mem i)) (incf i 2) (format t "~4,'0x: ~4,'0x ; arg~%" i (read16 mem i)) (incf i 2) (format t "~4,'0x: ~4,'0x ; arg~%" i (read16 mem i)) (incf i 2)) (t (format t "~4,'0x ???~%" (read16 mem i)) (incf i 2)) ) ))) (defun run-d (path) (let* ((mem (load-memory path)) (tsize (read16 mem 2)) (dsize (read16 mem 4))) (reasem (subseq mem 16 (+ 16 tsize) ))))
GitHub - mas454/pdp11
今回はCommon Lispを使っています。