Skip to content
Lorenzi edited this page Jun 4, 2023 · 9 revisions

Literals

  • 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)

Integer literals. 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.

Operators

The 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
  • [hi:lo] Slice
  • ´size Slice shorthand
  • !, - Unary Not and Unary Negation

You can also use code blocks.

Predefined Variables

  • $ or pc
    The address of the current instruction or the current expression in a data directive.

Predefined Functions

  • 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) or le(65000`16).

  • assert(condition)
    Generates an error when condition is 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 you 0x0061_0062_0063. The default string encoding is already utf8, so that function is usually redundant. For the ascii encoding, invalid codepoints are converted to 0x00.

  • 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 digits 0 and 1 (ignoring whitespace and underscores), and returns the interpreted binary value as a sized integer. Useful for including files generated from customasm with the binstr format.

  • 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 the hexstr format.