UNINGÁ – UNIDADE DE ENSINO SUPERIOR INGÁ FACULDADE INGÁ DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO ERINALDO SANCHES NASCIMENTO MODOS DE ENDEREÇAMENTO MARINGÁ 2014 SUMÁRIO 6 MODOS DE ENDEREÇAMENTO......................................................................................2 6.1 ENDEREÇAMENTO REGISTER-ONLY..........................................................................2 6.2 ENDEREÇAMENTO IMEDIATO......................................................................................2 6.3 ENDEREÇAMENTO BASE.............................................................................................2 6.4 REGISTRADORES PRESERVADOS..............................................................................3 6.5 ENDEREÇAMENTO PSEUDO DIRETO.........................................................................4 6.6 EXERCÍCIOS...................................................................................................................5 6.7 REFERÊNCIA BIBLIOGRÁFICA.....................................................................................6 6 MODOS DE ENDEREÇAMENTO O microprocessador MIPS utiliza cinco modos de endereçamento: register-only, imediato, base, relativo ao PC, e pseudo-direto. Os três primeiros modos ( endereçamento register-only, imediato e base) definem os modos de leitura e escrita dos operandos. Os dois últimos (endereçamento relativo ao PC e pseudo-direto) definem modos de escrita do contador de programa, PC. 6.1 ENDEREÇAMENTO REGISTER-ONLY Endereçamento somente registradores usa registradores para todos os operandos de origem e destino. Todas as instruções do tipo R usam endereçamento registar-only. 6.2 ENDEREÇAMENTO IMEDIATO Endereçamento imediato usa o imediato 16-bit acompanhado de registradores e operandos. Algumas instruções tipo I, tais como adicionar imediata (addi) e load upper immediate (lui), usam endereçamento imediato. 6.3 ENDEREÇAMENTO BASE Instruções de acesso à memória, como load word (lw) e store word (sw), usam endereçamento base. O endereço efetivo do operando memória é encontrado adicionando o endereço de base no registrador rs para o deslocamento de 16 bits estendido encontrado no campo imediato. 2 6.4 REGISTRADORES PRESERVADOS As instruções de desvio condicional usam o endereçamento relativo ao PC para especificar o novo valor do PC, se o desvio condicional é executado. O deslocamento indicado no campo imediato é adicionado ao PC para obter o novo PC; portanto, o endereço de destino do desvio é dito ser relativa ao atual PC. O código de exemplo no quadro 1 mostra parte da função fatorial. A Figura 1 mostra o código de máquina para a instrução beq. O endereço de destino de desvio (EDD) o endereço da próxima instrução a ser executada se o desvio for executado. A instrução beq na Figura 1 tem um EDD de 0xB4, o endereço de instrução do rótulo else. Quadro 1: Calcular o endereço de destino do desvio Código assembly 0xA4 0xA8 0xAC 0xB0 0xB4 0xB8 beq $t0, $0, else addi $v0, $0, 1 addi $sp, $sp, 8 jr $ra else: addi $a0, $a0, -1 jal fatorial Figura 1: Código de máquina para a instrução beq. O campo imediato de 16 bits dá o número de instruções entre o EDD e a instrução após a instrução de desvio (a instrução no PC + 4). Neste caso, o valor do campo de imediato beq é 3 porque o EDD (0xB4) é terceira instrução após PC + 4 (0xA8). O processador calcula o EDD da instrução pelo imediato de 16 bits, multiplica-o por 4 (para converter palavras de bytes), e adiciona-o ao PC + 4. 3 6.5 ENDEREÇAMENTO PSEUDO DIRETO No endereçamento direto, um endereço é especificado na instrução. As instruções de salto, j e jal, idealmente usariam endereçamento direto para especificar um endereço alvo para salto de 32 bits para indicar o endereço de instrução a ser executada em seguida. A codificação de instruções tipo J não tem bits suficientes para especificar um endereço para salto de 32 bits completo. Seis bits da instrução são utilizados para o código de operação (opcode), de modo que apenas 26 bits são deixados para codificar o endereço para salto. ● Os dois bits menos significativos, JTA 1:0, deve ser sempre 0, porque as instruções são palavra alinhada. ● Os próximos 26 bits, JTA27:2, são formados a partir do campo de endereço da instrução. Os quatro bits mais significativos, JTA31:. 28, são obtidos a partir dos quatro bits mais significativos do PC + 4 Este modo de endereçamento é denominado pseudo direto. O exemplo no quadro 2 ilustra uma instrução jal usando endereçamento pseudo direto. O endereçamento alvo para salto da instrução jal é 0x004000A0. Quadro 2 Calcular o endereço alvo para salto Código Assembly 0x0040005C ... 0x004000a0 jal soma: add soma $v0, $a0, $a1 A Figura 2 mostra o código de máquina para a instrução jal do quadro 2. Os quatro primeiros bits e os dois últimos bits do endereço de salto são 4 descartados. Os restantes bits são armazenados no campo do endereço de 26 bits (addr). O processador calcula o endereço de salto da instrução tipo J, acrescentando dois zeros e antecedendo os quatro bits mais significativos do PC + 4 para o campo de endereço de 26 bits (addr). Os quatro bits mais significativos são formados a partir de PC + 4, a faixa de salto é limitada. Todas as instruções tipo J, j e jal, usam endereçamento pseudo direto. A instrução de salto registo, jr, não é uma instrução tipo J. É uma instrução do tipo R, que salta para o valor de 32 bits, mantida em registrador rs. 6.6 EXERCÍCIOS 1. Calcule o campo imediato e mostre o código de máquina para a instrução de desvio não igual (bne)no programa seguinte. # código assembly MIPS 0x40 Loop: add $t1, $a0, $s0 0x44 lb $t1, 0 ($t1) 0x48 add $t2, $a1, $s0 0x4C sb $t1, 0 ($t2) 0x50 addi $s0, $s0, 1 0x54 bne $t1, $0, Loop 0x58 lw $s0, 0 ($sp) 2. Converta as seguintes instruções de montagem beq, j, e jal em código de máquina. Os endereços das instruções são dados à esquerda de cada instrução. a) b) 5 c) d) e) 3. Considere o seguinte trecho de linguagem assembly MIPS. Os números à esquerda de cada instrução indicam o endereço da instrução. a) Traduza a sequência de instruções em código de máquina. Escreva as instruções de código de máquina em hexadecimal. b) Liste o modo de endereçamento usado em cada linha de código. 6.7 REFERÊNCIA BIBLIOGRÁFICA HARRIS, David Money & HARRIS, Sarah L. Digital Design and Computer Architecture, 2ª ed., Elsevier: 2013. 6