+ ((immediate) 0)
+ ((direct) num)
+ ((indirect-A) (addr+ num (instr-A-num (vector-ref core (addr+ ptr num)))))
+ ((indirect-B) (addr+ num (instr-B-num (vector-ref core (addr+ ptr num)))))
+ ((pre-indirect-A)
+ (let ((aux-instr (vector-ref core (addr+ ptr num))))
+ (instr-set-A-num! aux-instr (addr+ -1 (instr-A-num aux-instr)))
+ (addr+ num (instr-A-num aux-instr))))
+ ((pre-indirect-B)
+ (let ((aux-instr (vector-ref core (addr+ ptr num))))
+ (instr-set-B-num! aux-instr (addr+ -1 (instr-B-num aux-instr)))
+ (addr+ num (instr-B-num aux-instr))))
+ ((post-indirect-A)
+ (let* ((aux-instr (vector-ref core (addr+ ptr num)))
+ (old-A-num (instr-A-num aux-instr)))
+ (instr-set-A-num! aux-instr (addr+ 1 (instr-A-num aux-instr)))
+ (addr+ num old-A-num)))
+ ((post-indirect-B)
+ (let* ((aux-instr (vector-ref core (addr+ ptr num)))
+ (old-B-num (instr-B-num aux-instr)))
+ (instr-set-B-num! aux-instr (addr+ 1 (instr-B-num aux-instr)))
+ (addr+ num old-B-num)))
+ (else
+ (error "Unrecognized mode" mode))))