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