Expressions

Expressions can be used in KASM in place of constants, when it is more convenient to do so.

In KASM, expressions either produce an integer, a double, or a boolean value. An integer is not allowed to be used in place of a boolean, nor a double. Nor a boolean in place of either.

Supported Operations

Unary

  • - Negate, flips the sign of a number
  • ~ Flips all of the bits in a given number/value
  • ! Not, flips a boolean value. If it was true, now it is false, and vice-versa

Mathematical

  • + Addition
  • - Subtraction
  • * Multiplication
  • / Division
  • % Modulus (remainder operator)

Comparison

  • == Equals
  • != Does not equal
  • < Less than
  • <= Less than or equal
  • > Greater than
  • >= Greater than or equal

Logical

  • && - Logical And
  • || - Logical Or

Values

In KASM, values can be provided in a few forms.

For integers, hex, decimal, and binary literals are all supported:

push 24
push 0x18
push 0b0001_1000 ; Could also be written as 0b00011000

In Practice

Expressions can be used for any instruction operand that supports the type that is produced when the expression is evaluated

push 2 + 2

pushv (5.0 / 2.0) > 2.0

Becomes:

push 4

pushv true

Expressions become more useful when introducing macros in future sections.