自作エミュレータで学ぶ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に対応した関数を返します。