• Teoria

Tabela de Símbolos

O Z01 possui alguns símbolos definidos para facilitar o desenvolvimento de um programa em assembly, por exemplo, não é preciso saber de cor que o LCD começa no endereço 16384, basta usarmos o símbolo SCREEN no código que o mesmo será substituído pelo valor 16384. Além de facilitar o desenvolvimento, possibilita uma maior portabilidade já que o compilador que é encarregado de substituir o valor, se o endereço uma maior portabilidade do código.

Símbolos padrões

Esse são os símbolos que são definidos estaticamente, sempre devem existir. Eles indicam um endereço da memória RAM. Exemplo :

leaw $LED, %A
movd %D, (%A)
Simb Endereço
R0-R15 0-15
SP 0
LCL 1
ARG 2
THIS 3
THAT 4
SCREEN 16384
LED 21184
SW 21185

Labels

São os símbolos que indicam um endereço da memória ROM, são utilizados pelas operações de salto para indicar o seu destino :

LOOP:
leaw $LOOP, %A
jmp

Endereços de memória

São endereços de memória criados automaticamente pelo assembler, será utilizado pela VM e futuramente pelo compilador para alocar variáveis no START_RAM_ADDRESS computador. Funciona da seguinte maneira :

leaw $var, %A    
movw %D, (%A)

O Assembler deve alocar um endereço automaticamente ainda não utilizado para var0, o valor a ser alocado é a partir do endereço 16 da RAM.

Simb valor
var0 16

O nome da variável pode ser qualquer uma, desde que não repita um nome de label.

Exemplo

Vamos supor o código (que não faz nada coerente) a seguir:

 0:    leaw $x, %A
 1:    movw $1, (%A)
 2:  LOOP:
 3:    leaw $UPDATE, %A
 4:    je %D
 5:    nop
 6:    leaw $temp, %A
 7:    movw (%A), %A
 8:    addw %A, %S, %S
 9:    decw %D
10:    leaw $LOOP, %A
11:    jmp
12:    nop
13:  UPDATE:
14:    leaw $3, %A
15:    movw %S, (%A)
16:  END:
17:    leaw $END, %A
18:    jmp
19:    nop

A tabela de símbolos gerada deve ser:

|Símbolos    |  Valor |
|------------|--------|
| R0         |      0 |
| R1         |      1 |
| ...        |    ... |
| R15        |     15 |
| SP         |      0 |
| LCL        |      1 |
| ARG        |      2 |
| THIS       |      3 |
| THAT       |      4 |
| SCREEN     |  16384 |
| LED        |  21184 |
| SW         |  21185 |
|------------|--------|
| x          |     16 |
| y          |     17 |
| LOOP       |      2 |
| UPDATE     |     12 |
| END        |     14 |