自作エミュレータで学ぶx86アーキテクチャ 3.7 push32,pop32
(define (push32 emu value) (let* ([esp (get-register-number 'esp)] [address (- (get-register32 emu esp) 4)]) (set-register32 emu esp address) (set-memory32 emu address value))) (define (pop32 emu) (let* ([esp (get-register-number 'esp)] [address (get-register32 emu esp)] [ret (get-memory32 emu address)]) (set-register32 emu esp (+ address 4)) ret))