4.4. Numeric Values

Numeric values are numbers, covering both integers and floats. Standard numerical operators (+,-,*, and /) work as in standard programming languages. You can combine them with each other and they will obey the standard precedence rules. Here are some examples:

25+3
5+2.5*3-10/2
charmem + y * $100

In practical use they can look like this:

.var charmem = $0400
        ldx #0
        lda #0
loop:   sta charmem + 0*$100,x
        sta charmem + 1*$100,x
        sta charmem + 2*$100,x
        sta charmem + 3*$100,x
        inx
        bne loop

You can also use bitwise operators to perform and, or, exclusive or, and bit shifting operations.

        .var x=$12345678
        .word x & $00ff, [x>>16] & $00ff // gives .word $0078, $0034

Special for 65xx assemblers are the high and low-byte operators (>,<) that are typically used like this:

        lda #<interrupt1   // Takes the lowbyte of the interupt1 value      
        sta $0314
        lda #>interrupt1   // Takes the high byte of the interupt1 value
        sta $0315

Table 4.1. Numeric Values

Name Operator Examples Description
Unary minus -   Inverts the sign of a number.
Plus + 10+2 = 12 Adds two numbers.
Minus - 10-8=2 Subtracts two numbers.
Multiply * 2*3 =6 Multiply two numbers.
Divide / 10/2 = 5 Divides two numbers.
High byte > >$1020 = $10 Returns the second byte of a number.
Low byte < <$1020 = $20 Returns the first byte of a number.
Bitshift left << 2<<2 = 8 Shifts the bits by a given number of spaces to the left.
Bitshift right >> 2>>1=1 Shifts the bits by a given number of spaces to the right.
Bitwise and & $3f & $0f = $f Performs bitwise and between two numbers.
Bitwise or | $0f | $30 = $3f Performs a bitwise or between two numbers.
Bitwise eor ^ $ff ^ $f0 = $0f Performs a bitwise exclusive or between two numbers.

You can get the number representation of an arbitrary value by using the general .number() function. Eg.

        .print ‘x’.number()