[Nasm-bugs] [Bug 3392406] New: 2.13 regression in (8086) "call far" for 16-bit DOS .OBJ ??
no-reply at bugzilla-nasm.gorcunov.org
no-reply at bugzilla-nasm.gorcunov.org
Sat Apr 29 21:23:44 PDT 2017
https://bugzilla.nasm.us/show_bug.cgi?id=3392406
Bug ID: 3392406
Summary: 2.13 regression in (8086) "call far" for 16-bit DOS
.OBJ ??
Product: NASM
Version: 2.13.xx
Hardware: PC
OS: Undefined
Status: OPEN
Severity: normal
Priority: Medium
Component: Assembler
Assignee: nobody at nasm.us
Reporter: rugxulo at gmail.com
CC: gorcunov at gmail.com, hpa at zytor.com, nasm-bugs at nasm.us
Obtained from: Binary from nasm.us
It seems that new version 2.13 is generating different bytes for "call far"
than previous 2.12.02 did.
I blindly assume this change is the culprit:
"Allow self-segment-relative expressions in immediates and displacements, even
when combined with an external or otherwise out-of-segment special symbol"
For my test case, you need KERNEL.ASM, SEGS.INC, and LUDIVMUL.INC (from FreeDOS
KE2041S.ZIP):
https://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/dos/kernel/2041/ke2041s.zip
nasm -DWATCOM -DXCPU=86 -f obj kernel.asm -o kernel.obj -l kernel.lst
Affected code:
call far _ENABLEA20 ; after "global _ENABLEA20" (DOS 16-bit OMF)
The output .LSTs say this:
- 997 000000EC 9A[A100][0000] call far _ENABLEA20
+ 997 000000EC 9A[A100][A100] call far _ENABLEA20
Running OpenWatcom's WDIS on the output .OBJs shows this:
DW offset DGROUP:_ENABLEA20
- DW DGROUP
+ DW DGROUP+0a1H
(And similarly incorrect for "_DISABLEA20".)
At least, that's my best guess at what's wrong. I don't fully understand the
details, though.
--
You are receiving this mail because:
You are on the CC list for the bug.
You are watching all bug changes.
More information about the Nasm-bugs
mailing list