Bruno Jesus : krnl386.exe16: Honour segment prefix override for outs[bwd] instruction.

Alexandre Julliard julliard at winehq.org
Tue Nov 22 16:34:01 CST 2016


Module: wine
Branch: master
Commit: 01ecb5834b3c27777ca40e4b977e4917b52e93ed
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=01ecb5834b3c27777ca40e4b977e4917b52e93ed

Author: Bruno Jesus <00cpxxx at gmail.com>
Date:   Tue Nov 22 04:03:01 2016 -0200

krnl386.exe16: Honour segment prefix override for outs[bwd] instruction.

Signed-off-by: Bruno Jesus <00cpxxx at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/krnl386.exe16/instr.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/dlls/krnl386.exe16/instr.c b/dlls/krnl386.exe16/instr.c
index b0de30f..f59ce90 100644
--- a/dlls/krnl386.exe16/instr.c
+++ b/dlls/krnl386.exe16/instr.c
@@ -645,14 +645,17 @@ DWORD __wine_emulate_instruction( EXCEPTION_RECORD *rec, CONTEXT *context )
                           (long_addr ? context->Ecx : LOWORD(context->Ecx)) : 1;
 	      int opsize = (typ & 1) ? (long_op ? 4 : 2) : 1;
 	      int step = (context->EFlags & 0x400) ? -opsize : +opsize;
-	      int seg = outp ? context->SegDs : context->SegEs;  /* FIXME: is this right? */
+	      int seg;
 
 	      if (outp)
               {
+		/* Check if there is a segment prefix override and honour it */
+		seg = segprefix == -1 ? context->SegDs : segprefix;
 		/* FIXME: Check segment is readable.  */
               }
 	      else
               {
+		seg = context->SegEs;
 		/* FIXME: Check segment is writable.  */
               }
 




More information about the wine-cvs mailing list