Skip to content

Assembler accepts instructions like cmp [mem], imms8 without size specified #17

@ecm-pushbx

Description

@ecm-pushbx
G:\>debug
-a
088A:0100 cmp [100], 12
088A:0105
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=088A ES=088A SS=088A CS=088A IP=0100 NV UP EI PL NZ NA PO NC
088A:0100 833E000112        CMP     WORD PTR [0100],+12            DS:0100=3E83
-

MSDebug does not accept this instruction.

This is caused by OP_IMMS8 clearing the VAR_SIZ_NEED flag unconditionally:

DOS-debug/src/LINEASM.INC

Lines 2017 to 2020 in ef6ef10

;--- OP_IMMS8 - Sign-extended immediate byte (PUSH xx)
ao41:
and [ai.varflags],not VAR_SIZ_NEED ;added for v1.09. Ok?

This makes it so that the word size of the memory operand is assumed as there is a form with r/m16 and OP_IMMS8 immediate operand. The flag should actually only be cleared for push imm8 albeit it doesn't cause any problems to clear it for imul with an imm8 operand either.

lDebug introduced the OP_IMMS8_EXTEND for this purpose, it simply doesn't clear this flag: https://hg.pushbx.org/ecm/ldebug/rev/c40bd4d0c8e2 It was introduced in 2021 specifically to fix this bug: https://hg.pushbx.org/ecm/ldebug/rev/e720cb74a547

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions