自作エミュレータで学ぶx86アーキテクチャ 3.10 条件分岐命令
https://github.com/mas454/x86emu
jc、jz、joなどの命令はフラグレジスタの値を元にジャンプするかどうかを
判断しています。
(define (make-jx is-flag) (lambda (emu) (if (is-flag emu) (eip-add emu (+ (get-sign-code8 emu 1) 2)) (eip-add emu 2))))
make-jxは、jc、jzなどの命令に対応した関数を返します。
例えばjzに対応した関数がほしい場合以下のようにします。
(define (is-zero? emu) (logbit? 6 (ref emu 'eflags))) (make-jx is-zero)
is-zero?はフラグレジスタのZFが1かどうかを返す関数で、
これをmake-jxに渡すとjzに対応した関数を返します。