Ramses Instrucoes
(Ou porque da necessidade de upgrade :-)
Neander - características
•
•
•
•
•
Largura de dados e endereços de 8 bits
Dados representados em complemento de dois
1 acumulador de 8 bits (AC)
1 apontador de programa de 8 bits (PC)
1 registrador de estado com 2 códigos de condição: negativo (N) e zero (Z)
Instruções do Neander
Código
0000
0001
0010
0011
0100
0101
0110
1000
1001
1010
1111
Instrução
NOP
STA end
LDA end
ADD end
OR end
AND end
NOT
JMP end
JN
end
JZ
end
HLT
Comentário nenhuma operação armazena acumulador - (store) carrega acumulador - (load) soma “ou” lógico
“e” lógico inverte (complementa) acumulador desvio incondicional - (jump) desvio condicional - (jump on negative) desvio condicional - (jump on zero) término de execução - (halt)
Modo de endereçamento memória endereço
operando
Programa Exemplo
Somar (totalizar) n posições consecutivas de memória, a partir do endereço inicial e. (Sem consistência sobre os valores de n e e).
Em alto nível, o programa seria: total:=0 ponteiro := e contador := n laço: if contador = 0, termina total := total + mem(ponteiro) ponteiro := ponteiro + 1 contador := contador – 1 goto laço
Endereço
0
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
128
129
130
131
132
133
134
Instrução
LDA 132
STA 130
LDA 129
STA ponteiro
LDA 128
STA 131
JZ 34
LDA 130
ADD mem(ponteiro)
STA 130
LDA ponteiro
ADD 134
STA ponteiro
LDA 131
ADD 133
STA 131
JMP 12
HLT
n e tot cont 0
255
1
; inicializa (zera) o total
; inicializa ponteiro
; inicializa contador
; testa se contador é zero
; carrega total no acumulador
; soma com posição de memória
; atualiza total
; incrementa ponteiro
; decrementa contador
; retorna ao início do laço número de posições endereço inicial total contador constante zero constante -1 constante 1
Endereço
0
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
128
129
130
131
132
133
134
Instrução
LDA 132
STA 130
LDA 129
STA 17
LDA 128
STA 131
JZ 34
LDA 130
ADD 17
STA 130
LDA 17
ADD 134
STA 17
LDA 131
ADD