mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 14:42:44 +00:00 
			
		
		
		
	UserspaceEmulator: Fix wrong ESI/EDI step sizes in MOVSW and MOVSD
This commit is contained in:
		
							parent
							
								
									e0580e2975
								
							
						
					
					
						commit
						80d3306840
					
				
					 1 changed files with 8 additions and 8 deletions
				
			
		|  | @ -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)); | ||||
|         }); | ||||
|     } | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling