Skip to content

Range error in constant #75

Description

@andrew-davie

dasm special-cases negative immediates in, for example...

VAL = -1
  lda #VAL. ; assembles OK

Although numbers are stored internally as 32 bits, and by rights this would be equivalent to...

  lda #$FFFFFFFF

... it assembles OK with dasm using the low bye ($FF) of the internal 32-byte number.
All good so far. It's detecting that the two's complement negative can be expressed as a single byte.

However, long ago when I was "fixing" things, and as a result we were required to write ...

VAL = -1
    lda #VAL&$FF. ; nobody liked this

... well the "fix" was reverted/fixed, and we could once again write just ``lda #-1"
The rationale being that dasm would range-check (I am guessing) to detect if the operand was in the correct (signed or unsigned) range. And now to my point...

The valid signed range is of course 8 bits (2's complement). That is from $80 (-128 signed) to $FF (unsigned).
We should be able to use any value in that range without error. But not outside it.

It seems, however, that dasm is restricting the range to -$FF to +$FF, which is incorrect.
The correct range, as noted, is -$80 to +$FF.

As an example, the following assembles - and it should not...

  lda #-130.  ; whoops!  Range should be -128 to 255 inclusive.

No activity

Activity on this issue will appear here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions