anchor.diff:         (setf ,dest result)
          (setf ,dest-overflow overflow)
          (setf (flag-p :cf) overflow-zero?)
  -       (setf (flap-p :of) overflow-zero?))))
  +       (setf (flag-p :of) overflow-zero?))))
   
   (defun mul-indirect (mod-bits r/m-bits is-word)
     (if is-word
  
positive.code:       (div-operation (indirect-address mod-bits r/m-bits t) (register :ax) (register :dx) t)
        (div-operation (indirect-address mod-bits r/m-bits nil) (byte-register :al) (byte-register :ah) nil)))
  
  (defmacro idiv-operation (src dest-low dest-high is-wprd)
    `(disasm-instr (list "idiv" :src ,src)
       (multiple-value-bind (quotient remainder) (truncate (+ (twos-complement ,dest-low ,is-word) (ash (twos-complement ,dest-high ,is-word) (if ,is-word 16 8))) (twos-complement ,src ,is-word))
         (setf ,dest-low quotient)
  
negative.code:     (ret-near)
      (incf (register :sp) (next-word))))
  
  (defmacro loop-instruction (condition mnemonic)
    `(let ((disp (twos-complement (next-instruction) nil)))
       (disasm-instr (list (concatenate 'string "loop" ,mnemonic) :op disp)
         (decf (register :cx))
         (when (and (not (zerop (register :cx))) ,condition)
  	 (incf *ip* disp)))))
  
  ;; ALU
  
  (defmacro parse-alu-opcode (opcode operation)
  