Baixe o app para aproveitar ainda mais
Prévia do material em texto
Tópico 6: Arquitetura (Modos de endereçamento e pseudo instruções) Prof. Jhonattan Cordoba Ramirez Escola de Engenharia Universidade Federal de Minas Gerais (UFMG) ELT123 - Arquitetura e Organização de Computadores Endereçamento Register-Only: O endereçamento register-only utiliza registradores para todos os operandos fonte e destino. Todas as instruções tipo-R utilizam endereçamento register-only. Endereçamento Imediato: O endereçamento imediato utiliza os 16 − 𝑏𝑏𝑖𝑖𝑡𝑡𝑠𝑠 do imediato, juntamente com os registradores como operandos. Algumas instruções tipo-I, como adicionar imediato (addi) e carregar imediato superior (lui), utilizam endereçamento imediato. Modos de endereçamento Endereçamento de Base: Instruções de acesso à memória, como carregar palavra (lw) e armazenar palavra (sw), utilizam endereçamento de base. O endereço efetivo do operando de memória é encontrado adicionando- se o endereço de base no registrador com o offset de 16 − 𝑏𝑏𝑖𝑖𝑡𝑡𝑠𝑠, estendido em sinal, encontrado no campo do imediato. Endereçamento Relativo ao PC (Contador de Programa): Instruções de branch condicional utilizam endereçamento relativo ao PC para especificar um novo valor para o PC se o desvio é realizado. O offset com sinal no campo do imediato é adicionado ao PC para obter um novo PC; consequentemente, o endereço de destino do branch é dito como sendo relativo ao PC atual. Modos de endereçamento Register Only Operandos em registradores Exemplo: add $s0, $t2, $t3 Exemplo: sub $t8, $s1, $0 Imediato 16-bit imediato usados como um operando Exemplo: addi $s4, $t5, -73 Exemplo: ori $t3, $t7, 0xFF Modos de endereçamento Endereço base O endereço do operando é: Endereço base + sinal-estendido imediato Exemplo: lw $s4, 72($0) Endereço = $0 + 72 Exemplo: sw $t2, -25($t1) Endereço = $t1 - 25 Endereçamento relativo ao PC 0x10 beq $t0, $0, else 0x14 addi $v0, $0, 1 0x18 addi $sp, $sp, i 0x1C jr $ra 0x20 else: addi $a0, $a0, -1 0x24 jal factorial Modos de endereçamento Calculando o endereço destino do desvio (Branch) beq $t0, $0, else opcode rs rt endereço 4 8 0 3 16 bits5 bits5 bits6 bits # MIPS assembly code 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) bne $t1, $0, loop opcode rs rt endereço 5 9 0 -6 16 bits5 bits5 bits6 bits opcode rs rt endereço 000101 01001 00000 1111 1111 1111 1010 16 bits5 bits5 bits6 bits Exemplo Modos de endereçamento A codificação de instruções do Tipo-J não possui bits suficientes para especificar um JTA de 32-bits Seis bits de instrução são utilizados pelo opcode, então, apenas 26-bits são deixados para codificar o JTA. Felizmente, os dois bits menos significativos, JTA(1:0), deve sempre ser 0, pois as instruções são alinhadas em palavra. Os próximos 26-bits, JTA(27:2), são tomados do campo addr da instrução. Os quatro bits mais significativos, JTA(31:28), são obtidos dos quatro bits mais significativos de 𝑃𝑃𝐶𝐶 + 4. Endereçamento direto de salto? (Jump Target Address - JTA)j e jal Endereçamento pseudo-direto Endereçamento pseudo-direto 0x0040005C jal sum ... 0x004000A0 sum: add $v0, $a0, $a1 jta 0000 0000 0100 0000 0000 0000 1010 0000 26-bits addr 0000 0000 0100 0000 0000 0000 1010 0000 0 1 0 0 0 2 8 (0x0100028) 3 0x0100028 000011 00 0001 0000 0000 0000 0010 1000 addraddrop op Valores nos campos Código de maquina • Pseudo-Instruções • Exceções • Instruções aritméticas com sinal e sem sinal • Instruções de vírgula flutuante Miscelânea Pseudo-Instruções Pseudo-Instruções Instruções MIPS li $s0, 0x1234AA77 lui $s0, 0x1234 ori $s0, 0xAA77 clear $t0 add $t0, $0, $0 move $s1, $s2 add $s1, $s2, $0 nop sll $0, $0, 0 Exceções Uma exceção é a forma como uma chamada de função sem marcação, salta para um novo endereço. Exceções podem ser causadas por hardware ou software: • Causadas por: • Hardware, também chamada de interrupção. • Software, também chamadas de traps ou armadilhas. • Quando exceções ocorrem, o processador: • Salva a causa de uma exceção e o valor do PC no momento em que a exceção ocorre. • Pula para a função de tratamento de exceção. (No MIPS, a função de tratamento de exceção está sempre localizada em 0x80000180) • Volta ao programa. Exceções Motivo Interrupção de hardware 0x00000000 System call 0x00000020 Breakpoint (Divide por 0) 0x00000024 Instrução indefinida 0x00000028 Overflow aritmético 0x00000030 • Não faz parte do arquivo de registro: • Cause: Registra a causa da exceção • EPC (PC de exceção): registra o PC onde ocorreu a exceção • EPC e Cause: parte do coprocessador 0 • Mover do coprocessador 0 • mfc0 $k0, EPC • Move o conteúdo do EPC para $k0 Exceções • Processador salva PC de causa e exceção em Cause e EPC • O processador salta para o manipulador de exceções (0x80000180) • Manipulador de exceção: • Salva registros na pilha • Lê registrador Cause • mfc0 $k0, Cause • Lida com exceções • Restaura registros • Retorna ao programa • mfc0 $k0, EPC • jr $k0 • Adição e subtração • Multiplicação e Divisão • Set less than (slt) Instruções com sinal e sem sinal • Com sinal: add, addi, sub • Mesma operação que as versões não assinadas • Mas o processador tem exceção no overflow • Sem sinal: addu, addiu, subu • Não aceita exceções no overflow Nota: o addiu sign-estende o valor imediato 0x7FFFFFFF + 0x7FFFFFFF = 0xFFFFFFFE = −2 0x80000001 + 0x80000001 = 0x80000002 • Adição e subtração • Multiplicação e Divisão • Set less than (slt) • Com sinal: mult, div • Sem sinal: multu, divu 0xFFFFFFFF * 0xFFFFFFFF • Com sinal: 0xFFFFFFFF = -1 • Sem sinal: 0xFFFFFFFF = Numero grande 0x0000000000000001 0xFFFFFFFE00000001 Instruções com sinal e sem sinal • Comparação de dois registradores slt, e comparação de um registrador e um imediato slti Com sinal • Comparação de dois registradores sltu, e comparação de um registrador e um imediato sltiu Sem sinal • Em uma comparação com sinal, 0x80000000 é menor do que qualquer numero, é o maior numero negativo em complemento de 2. • Em uma comparação sem sinal, 0x80000000 é maior que 0x7FFFFFFF, mas menor que 0x80000001, pois todos os números são positivos. • Adição e subtração • Multiplicação e Divisão • Set less than (slt) Instruções com sinal e sem sinal • Com sinal: • O sinal se estende para criar um valor de 32 bits para carregar no registrador • Carregar meia palavra: lh • Carregar um byte: lb • Sem sinal: • Zero-Extends para criar valor de 32 bits • Carregar meia palavra sem sinal: lhu • Carregar um byte: lbu Instruções com sinal e sem sinal Instruções de vírgula flutuante • Coprocessador de ponto flutuante (Coprocessador 1) • 32 registradores de ponto flutuante de 32 bits ($ f0- $ f31) • Valores de precisão dupla mantidos em dois registros de ponto flutuante • Exemplo, $ f0 e $ f1, $ f2 e $ f3 etc. • Registradores de ponto flutuante de precisão dupla: $ f0, $ f2, $ f4, etc. Registrador Número do registrador Uso $fv0 - $fv1 0, 2 Valores de retorno $ft0 - $ft3 4, 6, 8, 10 Variáveis temporárias $fa0 - $fa1 12, 14 Argumentos na função $ft4 - $ft5 16, 18 Variáveis temporárias $fs0 - $fs5 20, 22, 24, 26, 28, 30 Variáveis armazenadas Instruções de vírgula flutuante • Opcode = 17 (0100012) • Precisão única: • cop = 16 (100002) • add.s, sub.s, div.s, neg.s, abs.s, etc. • Dupla precisão: • cop = 17 (100012) • add.d, sub.d, div.d, neg.d, abs.d, etc. • 3 operandos de registro: • fs, ft: operandos de origem • fd: operandos de destino • Set/clear condition flag: fpcond • Igualdade: c.seq.s, c.seq.d • Menor que: c.lt.s, c.lt.d • Menor ou igual: c.le.s, c.le.d • Conditional branch • bclf: branches if fpcond is FALSE • bclt: branches if fpcond is TRUE • Loads and stores • lwc1: lwc1 $ft1, 42($s1) • swc1: swc1 $fs2, 17($sp) Tópico 6: Arquitetura (Modos de endereçamentoe pseudo instruções) Slide Number 2 Slide Number 3 Slide Number 4 Slide Number 5 Slide Number 6 Slide Number 7 Slide Number 8 Slide Number 9 Slide Number 10 Slide Number 11 Slide Number 12 Slide Number 13 Slide Number 14 Slide Number 15 Slide Number 16 Slide Number 17 Slide Number 18
Compartilhar