-
-
Notifications
You must be signed in to change notification settings - Fork 73
Expressions
- Decimal literals:
123 - Binary literals:
0b111_010(From v0.13.0 onwards: you can also use%111_010) - Octal literals:
0o137 - Hexadecimal literals:
0x4bf86(From v0.13.0 onwards: you can also use$4bf86)
Sizes are derived automatically from the
given radix and digits (except for decimal literals), and
leading zeroes matter in this regard. You can use an
underscore _ to visually separate digits. If you need to
explicitly indicate a value's size, you can use the slice
operator, as seen below.
From v0.13.12 onwards: struct { x = 123, y = 456 }
Structs are useful to pass multiple values around. A struct is always copied and passed by value. You currently can't mutate its contents after creation. You can read its fields by using dot notation:
#const my_struct = struct {
x = 123
y = 456
}
#d16 my_struct.x
#d16 my_struct.yThe following operators are listed in the order of the lowest precedence to the highest.
-
?,? :Binary and Ternary Conditional -
=Assignment -
@Concatenation -
||Lazy Or -
&&Lazy And -
==,!=,<,<=,>,>=Relational -
|Binary Or -
^Binary Xor -
&Binary And -
<<,>>Binary Shifts -
+,-Addition and Subtraction -
*,/,%Multiplication, Division, and Modulo -
x[hi:lo]Slice (Verilog-style) -
x`sizeSlice shorthand -
!,-Unary Not and Unary Negation
You can also use code blocks.
-
$orpc
The address of the current instruction or the current expression in a data directive.
-
sizeof(value)
Returns the definite size of the value in bits. Values have definite sizes when created from a sized literal (binary, octal, and hexadecimal literals, and string literals), or when sliced. For example:sizeof(0x012) == 12orsizeof((1 + 1)`8) == 8. -
bankof(label)
Returns a reference to the bank the given label belongs to. See the page on banks for more information. -
le(value)
Reverses the bytes of an integer, essentially performing little-endian encoding. It's important that the value have a size which is a multiple of 8 bits. For example:le(0x1234)orle(65000`16). -
assert(condition)
Generates an error whenconditionis false. Useful to check for the validity of instruction arguments, and also for multiple-match resolution. -
utf8(str),ascii(str),utf16be(str),utf16le(str),utf32be(str),utf32le(str)
Reencodes the given string. For example,utf16be("abc")will give you0x0061_0062_0063. The default string encoding is alreadyutf8, so that function is usually redundant. For theasciiencoding, invalid codepoints are converted to0x00. -
incbin(relative_filename)
Reads the given binary file and returns its contents as a sized integer. Useful with the unsized data directive for including existing binary files into your output, for example as#d incbin("graphics.bin") -
incbinstr(relative_filename)
Reads the given text file, which should only contain the ASCII digits0and1(ignoring whitespace and underscores), and returns the interpreted binary value as a sized integer. Useful for including files generated from customasm with thebinstrformat. -
inchexstr(relative_filename)
Reads the given text file, which should only contain the valid hexadecimal ASCII digits (ignoring whitespace and underscores), and returns the interpreted hexadecimal value as a sized integer. Useful for including files generated from customasm with thehexstrformat.
- Getting started
- Defining mnemonics β #ruledef, #subruledef
- Declaring labels and constants
- Setting the minimum addressable unit β #bits
- Outputting data blocks β #d
- Working with banks β #bankdef, #bank
- Address manipulation directives β #addr, #align, #res
- Splitting your code into multiple files β #include, #once
- Advanced mnemonics, cascading, deferred resolution, asm blocks β assert(), #assert
- Available expression operators and functions β incbin(), incbinstr(), inchexstr()
- Functions β #fn
- Conditional Compilation β #if, #elif, #else