[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