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