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. |
Bitwise not | ~ | ~%11 = %...11111100 | Performs bitwise negation of the bits. |
You can get the number representation of an arbitrary value by using the general .number() function. Eg.
.print ‘x’.number()