Baixe o app para aproveitar ainda mais
Prévia do material em texto
ARQUITETURA DE COMPUTADORES 1. Instruções de 0, 1, 2 e 3 operandos As instruções podem ter números diferentes de operandos. Existem arquiteturas que têm mais de um tipo de instrução com diferentes números de operandos. Todos os exemplos a serem estudados terão como base uma máquina pedagógica com diferentes tipos de instrução, com objetivo de exemplificar o funcionamento de cada um. 1.1 Instruções de um operando Um exemplo de instruções de um operando está descrito na máquina pedagógica que foi apresentada anteriormente. As instruções aritméticas (e lógicas) fazem referência a um registrador especial denominado Acumulador e o operando refere-se a um valor ou a um endereço de memória, que é acessado através de diferentes modos. Exemplo de Conjunto de instruções: Cód Mnemônico Significado 0 LOAD op ACC <- (operando) 1 STORE op (endereço) <- ACC 2 ADD op ACC <- ACC + (operando) 3 SUB op ACC <- ACC - (operando) 4 MULT op ACC <- ACC * (operando) 5 DIV op ACC <- ACC / (operando) 6 JMP endereço CI <- endereço 7 JZ endereço CI <- endereço, se ACC = 0 8 JNZ endereço CI <- endereço, se ACC != 0 9 IN endereço (endereço) <- entrada via teclado A OUT endereço vídeo <- (endereço) B STOP ------- Para a execução do programa. Como pode ser observado, as instruções aritméticas contemplam 1 operando. Ex: resolver a expressão dada em alto nível X = (A – B) / (A + B) * C Exemplo de Programa em assembly: LOAD A ADD B MULT C STORE TEMP LOAD A SUB B DIV TEMP STORE X Formato: COD ME OPERANDO Onde ME é o modo de endereçamento do operando 1.2 Instruções de dois operandos Instruções aritméticas e lógicas de dois operandos não têm um acumulador preferencial para execução das instruções, têm vários registradores (por exemplo R1, R2, R3 e R4) e um dos operandos indica que registrador se refere à instrução. O outro operando indica um valor imediato, um endereço ou outro registrador. Normalmente não existem instruções memória x memória em virtude de aumentar em demasia o número de bits da instrução, que obrigatoriamente exigiria um formato de instrução diferente. Exemplo de Conjunto de instruções: Cód Mnemônico Significado 0 MOV op1,op2 op1 <- op2 1 ADD op1,op2 op1 <- op1 + op2 2 SUB op1,op2 op1 <- op1 - op2 3 MULT op1,op2 op1 <- op1 * op2 4 DIV op1,op2 op1 <- op1 / op2 ... As instruções de desvio não se alteram pois são instruções de um operando e indicam o endereço para onde será desviado o fluxo de execução do programa. Idem para instruções de entrada e saída, que indicam as variáveis que irão receber os valores da entrada ou exibir os seus valores na saída. Ex: resolver a expressão dada em alto nível X = (A – B) / (A + B) * C Exemplo de Programa em assembly: MOV R1, A SUB R1, B MOV R2, A ADD R2, B MULT R2,C DIV R1, R2 MOV X, R1 Formato: COD ME1 OPERANDO1 ME2 OPERANDO2 Onde ME1 e ME2 indicam o modo de endereçamento dos operandos 1.3 Instruções de três operandos Nasnstruções aritméticas e lógicas de três operandos, estes podem indicar valores imediatos, registradores ou endereços de memória. Exemplo de Conjunto de instruções: Cód Mnemônico Significado 0 MOV op1,op2 op1 <- op2 1 ADD op1,op2,op3 op1 <- op2 + op3 2 SUB op1,op2,op3 op1 <- op2 - op3 3 MULT op1,op2,op3 op1 <- op2 * op3 4 DIV op1,op2,op3 op1 <- op2 / op3 ... As instruções de movimentação de 2 operandos podem coexistir no conjunto de instruções. As instruções de desvio não se alteram pois são instruções de um operando e indicam o endereço para onde será desviado o fluxo de execução do programa. Idem para instruções de entrada e saída, que indicam as variáveis que irão receber os valores da entrada ou exibir os seus valores na saída. Ex: resolver a expressão dada em alto nível X = (A – B) / (A + B) * C Exemplo de Programa em assembly: SUB R1, A, B ADD R2, A, B MULT R2, R2, C DIV X, R1, R2 Formato: COD ME1 OPERANDO1 ME2 OPERANDO2 Onde ME1, ME2 e ME3 indicam o modo de endereçamento dos operandos ME3 OPERANDO3 1.4 Instruções de zero operandos Neste tipo de instrução, existe uma pilha de registradores. Os operando são carregados na pilha e as operações são realizadas entre o sub-topo da pilha e o topo, conforme descrito nos exemplos abaixo, onde T indica o ponteiro para o topo da pilha, ST indica o ponteiro para o sub topo da pilha. As instruções que executam operações sobre a pilha não tem operandos. Exemplo de Conjunto de instruções: Cód Mnemônico Significado 0 PUSH op empilha operando: T <- T + 1; ST <- ST + 1; (T) <- op 1 POP op desempilha operando: (op) <- (T); T <- T - 1; ST <- ST - 1 2 ADD soma subtopo com topo: (ST) <- (ST) + (T); T <- T - 1; ST <- ST - 1 3 SUB subtrai subtopo do topo: (ST) <- (ST) - (T); T <- T - 1; ST <- ST - 1 4 MULT multiplica subtopo pelo topo: (ST) <- (ST) * (T); T <- T - 1; ST <- ST - 1 5 DIV divide subtopo do topo: (ST) <- (ST) / (T); T <- T - 1; ST <- ST - 1 Como pode ser observado, as instruções aritméticas contemplam 0 operandos. Ex: resolver a expressão dada em alto nível X = ((A – B) / (A + B) )* C Exemplo de Programa em assembly: PUSH A PUSH B SUB PUSH A PUSH B ADD DIV B PUSH C B A A+B C MULT A A-B A-B (A-B)/(A+B) ((A-B)/(A+B))*C POP X Pilha Pilha Pilha Pilha Pilha Formato: crescimento da Pilha COD
Compartilhar