NEANDER x RAMSES

Propaganda
NEANDER x RAMSES
(Ou porque da necessidade de
upgrade :-)
Texto original: ftp://ftp.inf.ufrgs.br/pub/inf108/Ramses-Instrucoes.ppt
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 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
Ramses - características
•
•
•
•
•
quatro modos de endereçamento,
dois registradores de uso geral,
um registrador de índice,
indicadores de carry, negativo e zero,
instruções adicionais (chamada de subrotina,
negação e deslocamento de bits, etc ...).
Instruções do Ramses
Código
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Instrução
NOP
STR r end
LDR r end
ADD r end
OR
r end
AND r end
NOT r
SUB r end
JMP end
JN
end
JZ
end
JC
end
JSR end
NEG r
SHR r
HLT
Operação Executada
nenhuma operação
armazena registrador na memória - (store)
carrega registrador da memória - (load)
adição - soma memória ao registrador
"ou" (adição lógica) - resultado no registrador
"e" (multiplicação lógica) - resultado no registrador
inverte (complementa para 1) registrador
subtração - subtrai memória do registrador
desvio incondicional - (jump)
desvio condicional se < Ø - (jump on negative)
desvio condicional se = Ø - (jump on zero)
desvio condicional se carry = 1 - (jump on carry)
desvio para subrotina - (jump subroutine)
troca de sinal - (negate)
deslocamento para a direita - (shift right)
parada - (halt)
Registradores e
Modos de endereçamento
•
•
•
•
00 = A (registrador RA)
01 = B (registrador RB)
10 = X (registrador de índice)
11 = nenhum registrador
•
•
•
•
00 =
01 =
10 =
11 =
direto
indireto
imediato
indexado
Endereçamento direto (absoluto)
memória
instrução
endereço
operando
Endereçamento indireto
memória
instrução
endereço
endereço
operando
Endereçamento imediato
memória
instrução
operando
Endereçamento indexado
instrução
deslocamento
Reg. X
endereço
memória
+
operando
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 133
STA 131
JMP 12
HLT
n
e
total
contador
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
LDR A 132
STR A 130
LDR A 129
STR A 17
LDR A 128
STR A 131
JZ 34
LDR A 130
ADD A 17
STR A 130
LDR A 17
ADD A 134
STR A 17
LDR A 131
ADD A 133
STR A 131
JMP 12
HLT
n
e
total
contador
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
LDR A #0
STR A 130
LDR A 129
STR A 17
LDR A 128
STR A 131
JZ 34
LDR A 130
ADD A 17
STR A 130
LDR A 17
ADD A #1
STR A 17
LDR A 131
ADD A #255
STR A 131
JMP 12
HLT
n
e
total
contador
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
Instrução
LDR A #0
STR A 130
LDR A 129
STR A 17
LDR A 128
STR A 131
JZ 34
LDR A 130
ADD A 17
STR A 130
LDR A 17
ADD A #1
STR A 17
LDR A 131
SUB A #1
STR A 131
JMP 12
HLT
n
e
total
contador
; 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
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
Instrução
LDR A #0
STR A 130
LDR A 129
STR A 132
LDR A 128
STR A 131
JZ 34
LDR A 130
ADD A 132,I
STR A 130
LDR A 132
ADD A #1
STR A 132
LDR A 131
SUB A #1
STR A 131
JMP 12
HLT
n
e
total
contador
ponteiro
; 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
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
Instrução
LDR A #0
STR A 130
LDR A 129
STR A 132
LDR B 128
STR A 131
JZ 34
LDR A 130
ADD A 132,I
STR A 130
LDR A 132
ADD A #1
STR A 132
LDR A 131
SUB B #1
STR A 131
JMP 12
HLT
n
e
total
contador
ponteiro
; 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
Endereço
0
2
4
6
8
10
12
14
16
18
20
22
24
26
28
128
129
130
132
Instrução
LDR A #0
STR A 130
LDR A 129
STR A 132
LDR B 128
JZ 28
LDR A 130
ADD A 132,I
STR A 130
LDR A 132
ADD A #1
STR A 132
SUB B #1
JMP 10
HLT
n
e
total
ponteiro
; 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
Endereço
0
2
4
6
8
10
12
14
16
18
20
22
24
26
28
128
129
130
132
Instrução
LDR A #0
STR A 130
LDR X 129
STR A 132
LDR B 128
JZ 28
LDR A 130
ADD A 0,X
STR A 130
LDR A 132
ADD X #1
STR A 132
SUB B #1
JMP 10
HLT
n
e
total
ponteiro
; 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
Endereço
0
2
4
6
8
10
12
14
16
18
20
22
128
129
130
Instrução
LDR A #0
STR A 130
LDR X 129
LDR B 128
JZ 22
LDR A 130
ADD A 0,X
STR A 130
ADD X #1
SUB B #1
JMP 8
HLT
n
e
total
; 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
Endereço
0
2
4
6
8
10
12
14
16
18
20
22
128
129
130
Instrução
LDR A #0
STR A 130
LDR X 129
LDR B 128
JZ 22
LDR A 130
ADD A 0,X
STR A 130
ADD X #1
SUB B #1
JMP 8
HLT
n
e
total
; 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
Endereço
0
2
4
6
8
10
12
14
16
18
128
129
130
Instrução
LDR A #0
LDR X 129
LDR B 128
JZ 16
ADD A 0,X
ADD X #1
SUB B #1
JMP 6
STR A 130
HLT
n
e
total
; inicializa (zera) o total
; inicializa ponteiro
; inicializa contador
; testa se contador é zero
; soma com posição de memória
; incrementa ponteiro
; decrementa contador
; retorna ao início do laço
; atualiza total
número de posições
endereço inicial
Comparação
• Neander
– Instruções: 11*n + 8
– Leituras: 27*n + 18
– Escritas: 4*n + 3
• Ramses
– Instruções: 5*n + 6
– Leituras: 10*n + 13
– Escritas: 1
• Para n=30:
– Instruções - Neander 338 x Ramses 156
– Acessos - Neander 951 x Ramses 314
Comparação
Download