ACSL Assembly, or AAL runs on a computer with memory, and each of its variables is a number from -999999 to 999999 (inclusive).

Mathematical Operations

Mathematical operations are done mod 1,000,000. For example 999,995 + 10 = 5.
Division is similar, but decimals are ignored, not rounded. For example, 14/5 = 2.8 -> 2, not 3.

General

Execution starts at the first line and continues sequentially, besides branches, until the END command.
The result of each operation is stored in memory, called the ACC (accumulator).

Format of Commands:

OPCODE LOC

OPCODE are various functions, and LOC is basically a variable, or immediate data, so every command is built t=liek that.

Basic Commands

LOAD A -> Loads A into the ACC
LOAD =123 -> Loads 123 into the ACC
STORE VARIABLE -> Stores the value in the ACC into variable
ADD A -> ACC += A (mod 1,000,000)
SUB B -> ACC -= B (mod 1,000,000)
MULT C -> ACC *= C (mod 1,000,000)
DIV D -> ACC /= D (only the integer part of the result is used)

Branches

BE Place -> goes to a line given the ACC == 0.
BG Place -> if ACC > 0, goes to a given line
BL Place -> if ACC < 0, go to a given line
BU Place -> goes to Place no matter what means "branch unconditionally"
END -> program ends. LOC is ignored

Other

READ number -> Reads an integer (mod 1,000,000) into LOC
PRINT var -> Prints var
word DC number -> makes word = number as a constant

Example Problems

After this program is executed, what's the final value in location TEMP?

TEMP DC 0
BDC -2
CDC 3
MULT C