27
NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Embed Size (px)

Citation preview

Page 1: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

NEANDER x RAMSES

(Ou porque da necessidade de upgrade :-)

Page 2: NEANDER x RAMSES (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)

Page 3: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Instruções do NeanderCódigo Instrução Comentário

0000 NOP nenhuma operação0001 STA end armazena acumulador - (store)0010 LDA end carrega acumulador - (load)0011 ADD end soma0100 OR end “ou” lógico0101 AND end “e” lógico0110 NOT inverte (complementa) acumulador1000 JMP end desvio incondicional - (jump)1001 JN end desvio condicional - (jump on negative)1010 JZ end desvio condicional - (jump on zero)1111 HLT término de execução - (halt)

Page 4: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Modo de endereçamento

endereço

memória

operando

Page 5: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Programa ExemploSomar (totalizar) n posições consecutivas de memória, a partir doendereço inicial e. (Sem consistência sobre os valores de n e e).

Em alto nível, o programa seria:

total:=0ponteiro := econtador := n

laço: if contador = 0, terminatotal := total + mem(ponteiro)ponteiro := ponteiro + 1contador := contador – 1goto laço

Page 6: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Endereço Instrução0 LDA 132 ; inicializa (zera) o total2 STA 1304 LDA 129 ; inicializa ponteiro6 STA ponteiro8 LDA 128 ; inicializa contador10 STA 13112 JZ 34 ; testa se contador é zero14 LDA 130 ; carrega total no acumulador16 ADD mem(ponteiro) ; soma com posição de memória18 STA 130 ; atualiza total20 LDA ponteiro ; incrementa ponteiro22 ADD 13424 STA ponteiro26 LDA 131 ; decrementa contador28 ADD 13330 STA 13132 JMP 12 ; retorna ao início do laço34 HLT128 n número de posições129 e endereço inicial130 tot total131 cont contador132 0 constante zero133 255 constante -1134 1 constante 1

Page 7: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Endereço Instrução0 LDA 132 ; inicializa (zera) o total2 STA 1304 LDA 129 ; inicializa ponteiro6 STA 178 LDA 128 ; inicializa contador10 STA 13112 JZ 34 ; testa se contador é zero14 LDA 130 ; carrega total no acumulador16 ADD 17 ; soma com posição de memória18 STA 130 ; atualiza total20 LDA 17 ; incrementa ponteiro22 ADD 13424 STA 1726 LDA 131 ; decrementa contador28 ADD 13330 STA 13132 JMP 12 ; retorna ao início do laço34 HLT128 n número de posições129 e endereço inicial130 tot total131 cont contador132 0 constante zero133 255 constante -1134 1 constante 1

Page 8: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

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

Page 9: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Instruções do RamsesCódigo Instrução Operação Executada

0000 NOP nenhuma operação0001 STR r end armazena registrador na memória - (store)0010 LDR r end carrega registrador da memória - (load)0011 ADD r end adição - soma memória ao registrador0100 OR r end "ou" (adição lógica) - resultado no registrador0101 AND r end "e" (multiplicação lógica) - resultado no registrador0110 NOT r inverte (complementa para 1) registrador0111 SUB r end subtração - subtrai memória do registrador1000 JMP end desvio incondicional - (jump)1001 JN end desvio condicional se < Ø - (jump on negative)1010 JZ end desvio condicional se = Ø - (jump on zero)1011 JC end desvio condicional se carry = 1 - (jump on carry)1100 JSR end desvio para subrotina - (jump subroutine)1101 NEG r troca de sinal - (negate)1110 SHR r deslocamento para a direita - (shift right)1111 HLT parada - (halt)

Page 10: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Registradores e Modos de endereçamento• 00 = A (registrador RA)• 01 = B (registrador RB)• 10 = X (registrador de índice)• 11 = nenhum registrador

• 00 = direto• 01 = indireto• 10 = imediato • 11 = indexado

Page 11: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Endereçamento direto (absoluto)

endereço

memória

operando

instrução

Page 12: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Endereçamento indireto

endereço

memória

operando

instrução endereço

Page 13: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Endereçamento imediato

operando

memória

instrução

Page 14: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Endereçamento indexado

deslocamento

memória

operando

instrução endereço

Reg. X

+

Page 15: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Endereço Instrução0 LDA 132 ; inicializa (zera) o total2 STA 1304 LDA 129 ; inicializa ponteiro6 STA 178 LDA 128 ; inicializa contador10 STA 13112 JZ 34 ; testa se contador é zero14 LDA 130 ; carrega total no acumulador16 ADD 17 ; soma com posição de memória18 STA 130 ; atualiza total20 LDA 17 ; incrementa ponteiro22 ADD 13424 STA 1726 LDA 131 ; decrementa contador28 ADD 13330 STA 13132 JMP 12 ; retorna ao início do laço34 HLT128 n número de posições129 e endereço inicial130 total total131 contador contador132 0 constante zero133 255 constante -1134 1 constante 1

Page 16: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Endereço Instrução0 LDR A 132 ; inicializa (zera) o total2 STR A 1304 LDR A 129 ; inicializa ponteiro6 STR A 178 LDR A 128 ; inicializa contador10 STR A 13112 JZ 34 ; testa se contador é zero14 LDR A 130 ; carrega total no acumulador16 ADD A 17 ; soma com posição de memória18 STR A 130 ; atualiza total20 LDR A 17 ; incrementa ponteiro22 ADD A 13424 STR A 1726 LDR A 131 ; decrementa contador28 ADD A 13330 STR A 13132 JMP 12 ; retorna ao início do laço34 HLT128 n número de posições129 e endereço inicial130 total total131 contador contador132 0 constante zero133 255 constante -1134 1 constante 1

Page 17: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Endereço Instrução0 LDR A #0 ; inicializa (zera) o total2 STR A 1304 LDR A 129 ; inicializa ponteiro6 STR A 178 LDR A 128 ; inicializa contador10 STR A 13112 JZ 34 ; testa se contador é zero14 LDR A 130 ; carrega total no acumulador16 ADD A 17 ; soma com posição de memória18 STR A 130 ; atualiza total20 LDR A 17 ; incrementa ponteiro22 ADD A #124 STR A 1726 LDR A 131 ; decrementa contador28 ADD A #25530 STR A 13132 JMP 12 ; retorna ao início do laço34 HLT128 n número de posições129 e endereço inicial130 total total131 contador contador132 0 constante zero133 255 constante -1134 1 constante 1

Page 18: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Endereço Instrução0 LDR A #0 ; inicializa (zera) o total2 STR A 1304 LDR A 129 ; inicializa ponteiro6 STR A 178 LDR A 128 ; inicializa contador10 STR A 13112 JZ 34 ; testa se contador é zero14 LDR A 130 ; carrega total no acumulador16 ADD A 17 ; soma com posição de memória18 STR A 130 ; atualiza total20 LDR A 17 ; incrementa ponteiro22 ADD A #124 STR A 1726 LDR A 131 ; decrementa contador28 SUB A #130 STR A 13132 JMP 12 ; retorna ao início do laço34 HLT128 n número de posições129 e endereço inicial130 total131 contador

Page 19: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Endereço Instrução0 LDR A #0 ; inicializa (zera) o total2 STR A 1304 LDR A 129 ; inicializa ponteiro6 STR A 1328 LDR A 128 ; inicializa contador10 STR A 13112 JZ 34 ; testa se contador é zero14 LDR A 130 ; carrega total no acumulador16 ADD A 132,I ; soma com posição de memória18 STR A 130 ; atualiza total20 LDR A 132 ; incrementa ponteiro22 ADD A #124 STR A 13226 LDR A 131 ; decrementa contador28 SUB A #130 STR A 13132 JMP 12 ; retorna ao início do laço34 HLT128 n número de posições129 e endereço inicial130 total131 contador132 ponteiro

Page 20: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Endereço Instrução0 LDR A #0 ; inicializa (zera) o total2 STR A 1304 LDR A 129 ; inicializa ponteiro6 STR A 1328 LDR B 128 ; inicializa contador10 STR A 13112 JZ 34 ; testa se contador é zero14 LDR A 130 ; carrega total no acumulador16 ADD A 132,I ; soma com posição de memória18 STR A 130 ; atualiza total20 LDR A 132 ; incrementa ponteiro22 ADD A #124 STR A 13226 LDR A 131 ; decrementa contador28 SUB B #130 STR A 13132 JMP 12 ; retorna ao início do laço34 HLT128 n número de posições129 e endereço inicial130 total131 contador132 ponteiro

Page 21: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Endereço Instrução0 LDR A #0 ; inicializa (zera) o total2 STR A 1304 LDR A 129 ; inicializa ponteiro6 STR A 1328 LDR B 128 ; inicializa contador10 JZ 28 ; testa se contador é zero12 LDR A 130 ; carrega total no acumulador14 ADD A 132,I ; soma com posição de memória16 STR A 130 ; atualiza total18 LDR A 132 ; incrementa ponteiro20 ADD A #122 STR A 13224 SUB B #1 ; decrementa contador26 JMP 10 ; retorna ao início do laço28 HLT128 n número de posições129 e endereço inicial130 total132 ponteiro

Page 22: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Endereço Instrução0 LDR A #0 ; inicializa (zera) o total2 STR A 1304 LDR X 129 ; inicializa ponteiro6 STR A 1328 LDR B 128 ; inicializa contador10 JZ 28 ; testa se contador é zero12 LDR A 130 ; carrega total no acumulador14 ADD A 0,X ; soma com posição de memória16 STR A 130 ; atualiza total18 LDR A 132 ; incrementa ponteiro20 ADD X #122 STR A 13224 SUB B #1 ; decrementa contador26 JMP 10 ; retorna ao início do laço28 HLT128 n número de posições129 e endereço inicial130 total132 ponteiro

Page 23: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Endereço Instrução0 LDR A #0 ; inicializa (zera) o total2 STR A 1304 LDR X 129 ; inicializa ponteiro6 LDR B 128 ; inicializa contador8 JZ 22 ; testa se contador é zero10 LDR A 130 ; carrega total no acumulador12 ADD A 0,X ; soma com posição de memória14 STR A 130 ; atualiza total16 ADD X #1 ; incrementa ponteiro18 SUB B #1 ; decrementa contador20 JMP 8 ; retorna ao início do laço22 HLT128 n número de posições129 e endereço inicial130 total

Page 24: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Endereço Instrução0 LDR A #0 ; inicializa (zera) o total2 STR A 1304 LDR X 129 ; inicializa ponteiro6 LDR B 128 ; inicializa contador8 JZ 22 ; testa se contador é zero10 LDR A 130 ; carrega total no acumulador12 ADD A 0,X ; soma com posição de memória14 STR A 130 ; atualiza total16 ADD X #1 ; incrementa ponteiro18 SUB B #1 ; decrementa contador20 JMP 8 ; retorna ao início do laço22 HLT128 n número de posições129 e endereço inicial130 total

Page 25: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Endereço Instrução0 LDR A #0 ; inicializa (zera) o total2 LDR X 129 ; inicializa ponteiro4 LDR B 128 ; inicializa contador6 JZ 16 ; testa se contador é zero8 ADD A 0,X ; soma com posição de memória10 ADD X #1 ; incrementa ponteiro12 SUB B #1 ; decrementa contador14 JMP 6 ; retorna ao início do laço16 STR A 130 ; atualiza total18 HLT128 n número de posições129 e endereço inicial130 total

Page 26: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

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

Page 27: NEANDER x RAMSES (Ou porque da necessidade de upgrade :-)

Comparação