自作エミュレータで学ぶ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