自作エミュレータで学ぶx86アーキテクチャ 3.7 push_r32、pop_r32

 push-r32とpop-r32は、push命令とpop命令に対応した関数です。

(define (push-r32 emu)
  (let1 reg (- (get-code8 emu 0) #x50) 
    (push32 emu (get-register32 emu reg))
    (eip-add emu 1)))

(define (pop-r32 emu)
  (let1 reg (- (get-code8 emu 0) #x58)
    (set-register32 emu reg (pop32 emu))
    (eip-add emu 1)))
 (let1 reg (- (get-code8 emu 0) #x50)

 この部分はメモリから1バイト読んで、対応するレジスタの番号を
得ています。
 例えば0ならeax、1ならecxという感じです。

 (let1 reg (- (get-code8 emu 0) #x58)

 この部分も同じようにレジスタの番号を得ています。

 全体のコードはGitHubにあります。
https://github.com/mas454/x86emu