1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 12:38:12 +00:00

UserspaceEmulator: Fix wrong ESI/EDI step sizes in MOVSW and MOVSD

This commit is contained in:
Andreas Kling 2020-07-13 12:33:32 +02:00
parent e0580e2975
commit 80d3306840

View file

@ -1031,15 +1031,15 @@ void SoftCPU::MOVSD(const X86::Instruction& insn)
do_once_or_repeat<false>(insn, [&] {
auto src = read_memory32({ src_segment, si() });
write_memory32({ es(), di() }, src);
set_di(di() + (df() ? -1 : 1));
set_si(si() + (df() ? -1 : 1));
set_di(di() + (df() ? -4 : 4));
set_si(si() + (df() ? -4 : 4));
});
} else {
do_once_or_repeat<false>(insn, [&] {
auto src = read_memory32({ src_segment, esi() });
write_memory32({ es(), edi() }, src);
set_edi(edi() + (df() ? -1 : 1));
set_esi(esi() + (df() ? -1 : 1));
set_edi(edi() + (df() ? -4 : 4));
set_esi(esi() + (df() ? -4 : 4));
});
}
}
@ -1051,15 +1051,15 @@ void SoftCPU::MOVSW(const X86::Instruction& insn)
do_once_or_repeat<false>(insn, [&] {
auto src = read_memory16({ src_segment, si() });
write_memory16({ es(), di() }, src);
set_di(di() + (df() ? -1 : 1));
set_si(si() + (df() ? -1 : 1));
set_di(di() + (df() ? -2 : 2));
set_si(si() + (df() ? -2 : 2));
});
} else {
do_once_or_repeat<false>(insn, [&] {
auto src = read_memory16({ src_segment, esi() });
write_memory16({ es(), edi() }, src);
set_edi(edi() + (df() ? -1 : 1));
set_esi(esi() + (df() ? -1 : 1));
set_edi(edi() + (df() ? -2 : 2));
set_esi(esi() + (df() ? -2 : 2));
});
}
}