diff --git a/rtl/i8086/i8086.inc b/rtl/i8086/i8086.inc index b93addb106..25a95a530f 100644 --- a/rtl/i8086/i8086.inc +++ b/rtl/i8086/i8086.inc @@ -29,8 +29,8 @@ function Ptr(sel,off: LongInt):farpointer;{$ifdef SYSTEMINLINE}inline;{$endif}as asm push bp mov bp, sp - mov ax, ss:[bp + 4] - mov dx, ss:[bp + 8] + mov ax, ss:[bp + 4 + extra_param_offset] // off + mov dx, ss:[bp + 8 + extra_param_offset] // sel pop bp end; @@ -57,7 +57,7 @@ function get_caller_addr(framebp:pointer;addr:pointer=nil):pointer;nostackframe; asm push bp mov bp, sp - mov ax, ss:[bp + 6] + mov ax, ss:[bp + 6 + extra_param_offset] // framebp or ax, ax jz @@Lg_a_null xchg ax, bx @@ -72,7 +72,7 @@ function get_caller_frame(framebp:pointer;addr:pointer=nil):pointer;nostackframe asm push bp mov bp, sp - mov ax, ss:[bp + 6] + mov ax, ss:[bp + 6 + extra_param_offset] // framebp or ax, ax jz @@Lgnf_null xchg ax, bx @@ -87,7 +87,7 @@ function InterLockedDecrement (var Target: longint) : longint; assembler; asm push bp mov bp, sp - mov bx, ss:[bp + 4] + mov bx, ss:[bp + 4 + extra_param_offset] // Target sub word [bx], 1 sbb word [bx+2], 0 mov ax, [bx] @@ -100,7 +100,7 @@ function InterLockedIncrement (var Target: longint) : longint; assembler; asm push bp mov bp, sp - mov bx, ss:[bp + 4] + mov bx, ss:[bp + 4 + extra_param_offset] // Target add word [bx], 1 adc word [bx+2], 0 mov ax, [bx] diff --git a/rtl/i8086/setjump.inc b/rtl/i8086/setjump.inc index c6eac1de3e..6ae7eb9b10 100644 --- a/rtl/i8086/setjump.inc +++ b/rtl/i8086/setjump.inc @@ -20,7 +20,7 @@ asm push bp mov bp, sp - mov bx, ss:[bp + 4] + mov bx, ss:[bp + 4 + extra_param_offset] // S mov word [bx + Jmp_buf.bp], ax mov word [bx + Jmp_buf.sp], di mov di, word ss:[di] @@ -36,8 +36,8 @@ asm push bp mov bp, sp - mov bx, ss:[bp + 6] - mov ax, ss:[bp + 4] + mov bx, ss:[bp + 6 + extra_param_offset] // S + mov ax, ss:[bp + 4 + extra_param_offset] // value test ax, ax jnz @@L1 inc ax