# Computer Architecture Lab/WS2007/Project -1 Lab4/AssemblerSyntax

## Assembler syntax

Arithmetic functions

```ADD("1","0","1E"); /* Add Random Number (contained in reserved Register \$1E) with 0 (contained always in reserved Register \$0) and store the result in \$1 */
ADDU("1","3","2"); /* Adds unsigned values contained in \$3 with unsigned value in \$2 and stores the result in \$1 */
SUB("3","1","2"); /* Substract \$1 by \$2 and store the result in \$3 */
SUBU("1","3","2"); /* Substracts unsigned values contained in \$3 with unsigned value in \$2 and stores the result in \$1 */
```

Logical functions:

```AND("1","3","2"); /* \$1 = \$3 and \$2 */
OR("1","3","2");  /* \$1 = \$3 or \$2 */
XOR("1","3","2"); /* \$1 = \$3 xor \$2 */
```

Shift functions:

```SLL("2","5","1");  /* Shift the value contained in \$5 left by 1 and store the result in \$2 */
SLLV("2","5","1"); /* Shift the value contained in \$5 left by value of \$1 and store the result in \$2 */
SRA("1","4","3");  /* Shift the value contained in \$4 arithmetical right by 3 and store the result in \$1 */
SRL("A","3","1");  /* Shift the value contained in \$3 right by value of \$1 and store the result in \$A */
SRLV("A","5","1"); /* Shift the value contained in \$5 left by 1 and store the result in \$A */
```

(Un)Conditional functions:

```BZS(LABEL); /* Branch if ZeroFlag is set, jump to LABEL */
```

```LLI("2","1"); /* Load value 1 to Register \$2 */
LW("3","2"); /* Load value contained in Register \$2 to Register \$3 */
SW("3","2"); /* Store value contained in Register \$2 to Register \$3 */
```

NOOP:

```NOOP(); /* do nothing */
```

RAMENTER: Writes a String into the RAM

```RAMENTER ("4","7","11","Hello World. ",&pc);
/*
"\$1 ... Addressregister, \$2 ... Length register, \$3 ... Increment Register
Arguments:
\$1 ... Destination Address Register Number
\$2 ... Buffer Length Register: Gets the number of stored characters
\$3 ... Address Step Register: defines the address distance between two stored characters in RAM
\$4 ... String
&pc .. (decoration)
*/
```

CALL Function

```CALL (Label) /* Jump to Function "Label" */
```

RETURN from CALL

```RETURN
```

Simple UART output

```UART_SEND_STRING("Hello World",&pc); /* writes "Hello World" to the Terminal */
```

Debug output

```DEBUG_SEND("1",&pc); /* Writes "Content of reg 0x01 is: " and the hex-value of the value contained in \$1 */
```

```LOAD_BIG_NUMBER("1","11","12345678",&pc); /* Load the whole 32-Bit hex-value into \$1 with the temporary help of \$11 */
```

## Code Samples

Substraction example:

```LLI("1",6);       /* Load to Value 6 to Register \$1 */
LLI("2",5);       /* Load to Value 5 to Register \$2 */
SUB("3","1","2"); /* Substract \$1 by \$2 and store the result in \$3 */
```

Add 2 numbers and check if there is an overflow:

```LABEL(START)        /* Define Label START */
ADD("1","3","4");   /* ADD \$3 with \$4 and store the result in \$1 */