Bläddra i källkod

* i8086 far data memory model fixes in FPC_SETJMP. FPC_LONGJUMP not converted
yet.

git-svn-id: trunk@27368 -

nickysn 11 år sedan
förälder
incheckning
1f98dfc3b4
1 ändrade filer med 12 tillägg och 6 borttagningar
  1. 12 6
      rtl/i8086/setjump.inc

+ 12 - 6
rtl/i8086/setjump.inc

@@ -17,16 +17,22 @@ Function fpc_SetJmp (Var S : Jmp_buf) : smallint;assembler;nostackframe;[Public,
 asm
   mov si, sp
 
-  mov bx, ss:[si + 2 + extra_param_offset]  // S
-  mov word [bx + Jmp_buf.bp], bp
+{$ifdef FPC_X86_DATA_NEAR}
+  mov di, ss:[si + 2 + extra_param_offset]  // S
+  mov ax, ds
+  mov es, ax
+{$else FPC_X86_DATA_NEAR}
+  les di, ss:[si + 2 + extra_param_offset]  // S
+{$endif FPC_X86_DATA_NEAR}
+  mov word es:[di + Jmp_buf.bp], bp
   mov ax, word ss:[si]
-  mov word [bx + Jmp_buf.ip], ax
+  mov word es:[di + Jmp_buf.ip], ax
 {$ifdef FPC_X86_CODE_FAR}
   mov ax, word ss:[si + 2]
-  mov word [bx + Jmp_buf.cs], ax
+  mov word es:[di + Jmp_buf.cs], ax
 {$endif FPC_X86_CODE_FAR}
-  lea ax, [si + 4 + extra_param_offset]
-  mov word [bx + Jmp_buf.sp], ax
+  lea ax, [si + 4 + extra_param_offset + extra_data_offset]
+  mov word es:[di + Jmp_buf.sp], ax
 
   xor ax, ax
 end;