Baron-von-Riedesel / DOS-debug

Debug and DebugX (short: Debug/X) are extended versions of MS DEBUG
58 stars 12 forks source link

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

Open ecm-pushbx opened 6 months ago

ecm-pushbx commented 6 months ago
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: https://github.com/Baron-von-Riedesel/DOS-debug/blob/ef6ef1047749e6e66fd109cb6e8e7cf8da9e0b76/src/LINEASM.INC#L2017-L2020

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

Baron-von-Riedesel commented 6 months ago

Thanks, added this as regression since v1.09 to the todo list.