Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA ARQUITETURA DE COMPUTADORES Exercícios – Lista 4 1. Descreva a série de passos necessários para que uma CPU execute uma instrução. Qual o registrador que contém o endereço da próxima instrução a ser executada? Qual é assumidamente o endereço da próxima instrução a ser executada? Como uma instrução de desvio incondicional (ex. JMP 42) influencia neste processo? Reposta: Os passos são os seguinte: (1) busca instrução apontada por PC para o IR, (2) atualiza o PC para PC+1, (3) decodifica a instrução, (4) calcula endereço do(s) operando(o) – se necessário, (5) busca operando(s) – se necessário, (6) armazena resultado(s) em local(is) apropriado(s), (7) volta ao passo 1 para a execução da próxima instrução. O PC contém o endereço da próxima instrução a ser executada. O valor do PC é sempre incrementado, apontando para a instrução seguinte na memória. Uma instrução de desvio incondicional faz com que o PC assuma o valor do operando da instrução, possibilitando assim um desvio na execução do programa. 2. A memória representada na figura abaixo contém um programa para o computador xComputer. Liste as instruções, incluindo o valor dos operandos, que compõem este programa. Descreva o funcionamento de cada uma destas instruções e comente o que o programa faz ao ser executado a partir da posição de memória zero. 0 0110010000000001 1 0010100000000101 2 0000000000000101 3 0010100000000110 4 0010110000000000 Reposta: O programa é formado pelas instruções abaixo: 0 LOD-C 1 1 STO 5 2 ADD 5 3 STO 6 4 HLT O programa carrega 1 no acumulador (AC), armazena este valor na posição de memória 5, faz a soma do valor atual de AC com o valor armazenado na posição 5 atribuindo o resultado ao registrador AC, armazena este valor na posição de memória 6, e interrompe a execução. Ou seja, o valor inicial 1 é armazenado na posição 5, somado com ele mesmo, e o resultado (2) armazenado na posição 6. 3. Descreva, brevemente e pormenorizadamente, o que o programa abaixo faz. Qual o resultado produzido por este programa quando as posições 13 e 14 contêm (a) 1 e 5, (b) 5 e 1, (c) 1 e 1, respectivamente. 00: LOD 13 01: SUB 14 02: JMN 7 03: JMZ 10 04: LOD-C -1 05: STO 15 06: JMP 12 07: LOD-C 1 08: STO 15 09: JMP 12 10: LOD-C 0 11: STO 15 12: HLT 13: 14: 15: Reposta: O programa verifica se o valor na posição 13 é menor, maior ou igual ao valor na posição 14; a posição 15 recebe 1 se for menor, -1 se for maior e 0 se forem iguais. O valor da posição 13 é colocado em AC, este valor é subtraído do valor da posição 14, se o resultado der negativo acontece um desvio para a posição 7, se o resultado der zero o desvio é para a posição 10, e se o resultado der positivo a constante -1 é armazenada na posição 15 e o programa é finalizado na posição 12. O desvio para a posição 7, carrega a constante 1 em AC, armazena na posição 15 e salta para 12 onde encontra a instrução de parada. Já o desvio para a posição 10, carrega a constante 0 em AC, armazena na posição 15 e finaliza a execução. 4. Escreva um programa para o xComputer que calcule a soma dos 20 primeiros números potência de dois (1, 2, 4, 8, 16, 32 ...) e armazene este valor numa posição de memória Reposta: lod-c 1 sto num lod-c 20 sto cnt lod-c 0 sto sum loop: lod num add sum sto sum lod num shl sto num lod cnt dec sto cnt jmz stop jmp loop stop: hlt @18 num: data cnt: data sum: data 5. Escreva um programa para o xComputer que transforme uma string de maiúscula para minúscula. Assuma que a string é finalizada com o valor zero, e que os caracteres (um por célula) são representados através do código ASCII onde 'A' corresponde a '65' em decimal, 'B' corresponde a '66' em decimal, e assim sucessivamente, enquanto 'a' corresponde a '97' em decimal, 'b' corresponde a '98' em decimal, e assim sucessivamente. Reposta: loop: lod-i ptr jmz stop or-c 32 sto-i ptr lod ptr inc sto ptr jmp loop stop: hlt @15 ptr: string string: "A" "B" "C" 0