Fix decoding of LEA when address-size prefix (67h) is present.
This is loosly based on Xorg changeset f57bc0e by Christian Zander. Submitted by: Wolf Ramovsky <wolf.ramovsky gmail.com> via core (peter) MFC after: 2 weeks
This commit is contained in:
parent
5097605520
commit
79d183e85f
@ -2151,21 +2151,24 @@ x86emuOp_mov_word_RM_SR(struct x86emu *emu)
|
||||
static void
|
||||
x86emuOp_lea_word_R_M(struct x86emu *emu)
|
||||
{
|
||||
uint16_t *srcreg;
|
||||
uint32_t destoffset;
|
||||
|
||||
/*
|
||||
* TODO: Need to handle address size prefix!
|
||||
*
|
||||
* lea eax,[eax+ebx*2] ??
|
||||
*/
|
||||
fetch_decode_modrm(emu);
|
||||
if (emu->cur_mod == 3)
|
||||
x86emu_halt_sys(emu);
|
||||
|
||||
srcreg = decode_rh_word_register(emu);
|
||||
destoffset = decode_rl_address(emu);
|
||||
*srcreg = (uint16_t) destoffset;
|
||||
if (emu->x86.mode & SYSMODE_PREFIX_ADDR) {
|
||||
uint32_t *srcreg;
|
||||
|
||||
srcreg = decode_rh_long_register(emu);
|
||||
*srcreg = (uint32_t) destoffset;
|
||||
} else {
|
||||
uint16_t *srcreg;
|
||||
|
||||
srcreg = decode_rh_word_register(emu);
|
||||
*srcreg = (uint16_t) destoffset;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user