·

Engenharia de Computação ·

Arquitetura de Computadores

Envie sua pergunta para a IA e receba a resposta na hora

Fazer Pergunta

Texto de pré-visualização

campos adicionais para distinguir instruções relacionadas Por exemplo as diferentes instruções de ponto flutuante são especificadas pelos bits 05 As setas a partir da primeira coluna mostram quais opcodes utilizam esses campos adicionais O restante deste apêndice descreve as instruções implementadas pelo hardware MIPS real e as pseudoinstruções fornecidas pelo montador MIPS Os dois tipos de instruções podem ser distinguidos facilmente As instruções reais indicam os campos em sua representação binária Por exemplo em a instrução add consiste em seis campos O tamanho de cada campo em bits é o pequeno número abaixo do campo Essa instrução começa com 6 bits em 0 Os especificadores de registradores começam com um r de modo que o próximo campo é um especificador de registrador de 5 bits chamado rs Esse é o mesmo registrador que é o segundo argumento no assembly simbólico à esquerda dessa linha Outro campo comum é imm16 que é um número imediato de 16 bits As pseudoinstruções seguem aproximadamente as mesmas convenções mas omitem a informação de codificação de instrução Por exemplo Multiplicação subtração msb rs rt 0x1c Resto rem rdest rsr1 rsr2 pseudoinstrução Subtração com overflow sub rd rs rt 0x22 Set se menor que sem sinal sltu rd rs rt 0 rs rt rd 0 0x2b Set se diferente sne rdest rsrcl rsrc2 pseudoinstrução Branch se for maior ou igual a zero bgez rs label 1 rs 1 Offset Branch se for diferente bne rs rt label 5 rs rt Offset 6 5 5 16 Desvia condicionalmente pelo número de instruções especificado pelo offset se o registrador rs não for igual a rt Branch se não for igual a zero bnez rsrcl label pseudoinstrução Desvia condicionalmente para a instrução no rótulo se o registrador rsrc não for igual a 0 Instruções de jump Jump j target 2 target 6 26 Desvia incondicionalmente para a instrução no destino Trap se não for igual teq rs rt 0 rs rt 0 0x36 Se o registrador rs não for igual ao registrador rt gera uma exceção de Trap Trap sem sinal se for menor imediato tltiu rs imm 1 rs b imm Se o registrador rs for menor do que o valor de imm com sinal estendido gera uma exceção de Trap Load word à esquerda lwl rt address 0x22 rs rt Offset Carrega os bytes da esquerda direita da word do endereço possivelmente não alinhado para o registrador rt Store halfword sh rt address 0x29 rs rt Offset Armazena a halfword baixa do registrador rt no endereço Armazena uma word do registrador rsrc no endereço possivelmente não alinhado sc rt address 0x38 rs rt Offset 6 5 5 16 Store condicional Armazena uma quantidade de 32 bits word no endereço rt para a memória no endereço e completa uma operação lermodificarescrever indivisível Se essa operação indivisível tiver sucesso a word da memória será modificada e o registrador rt será colocado cm 1 Se a operação indivisível falhar porque outro processador escreveu em um local no bloco contendo a word endereçada essa instrução não modifica a memória e escreve 0 no registrador rt Como o SPIM não simula diversos processadores a instrução sempre tem sucesso Instruções para movimentação de dados Move move rdest rsrc pseudoinstrução Move o registrador rsrc para rdest mfhi rd 0 0 rd 0 0x10 6 10 5 5 6 Move de hi mflo rd 0 0 rd 0 0x12 6 10 5 5 6 Move de lo A unidade de multiplicação e divisão produz seu resultado em dois registradores adicionais hi e lo Essas instruções movem os valores de d para esses registradores As pseudoinstruções de multiplicação divisão e resto que fazem com que essa unidade pareça operar sobre os registradores gerais movem o resultado depois que o cálculo terminar Move o registrador hi lo para o registrador rd mthi rs 0 rs 0 0x11 6 5 15 6 Move para hi mtlo rs 0 rs 0 0x13 6 5 15 6 Move para lo Move o registrador rs para o registrador hi 10 mfqc0 rt rd 0x10 0 rt rd 0 6 5 5 11 mfcl rt fs 0x11 4 rt fs 0 6 5 5 11 Move do coprocessador 1 Os coprocessadores têm seus próprios conjuntos de registradores Essas instruções movem valores entre esses registradores e os registradores da CPU Move o registrador rd em um coprocessador registrador fs na FPU para o registrador rt da CPU A unidade de ponto flutuante é o coprocessador 1 Move double do coprocessador 1 mfcld rdest frsrc1 pseudoinstrução Move os registradores de ponto flutuante frsrc1 e frsrc1 1 para os registradores da CPU rdest e rdest 1 mtc0 rd rt 0x10 4 rt rd 0 6 5 5 11 Move para coprocessador 0 mtcl rd fs 0x11 4 rt fs 0 6 5 5 11 Move para coprocessador 1 Move o registrador da CPU rt para o registrador rd em um coprocessador registrador fs na FPU movn rd rs rt 0 rs rt rd 0xB 6 5 5 11 Move condicional diferente de zero Move o registrador rs para o registrador rd se o registrador rt não for 0 movz rd rs rt 0 rs rt rd 0xA 6 5 5 11 Move condicional zero Move o registrador rs para o registrador rd se o registrador rt for 0 movf rd rs cc 0 rs cc 0 rd 0 1 6 5 3 2 5 6 Move condicional em caso de FP falso Move o registrador da CPU rs para o registrador rd se o flag de código de condição da FPU número cc for 0 Se cc for omitido da instrução o flag de código de condição 0 será assumido movt rd rs cc 0 rs cc 1 rd 0 1 6 5 3 2 5 6 Move condicional em caso de FP verdadeiro Move o registrador da CPU rs para o registrador rd se o flag de código de condição da FPU número cc for 1 Se cc for omitido da instrução o bit de código de condição 0 é assumido Instruções de ponto flutuante O MIPS possui um coprocessador de ponto flutuante número 1 que opera sobre números de ponto flutuante de precisão simples 32 bits e precisão dupla 64 bits Esse coprocessador tem seus próprios registradores que são numerados de f0 a f31 Como esses registradores possuem apenas 32 bits dois deles são necessários para manter doubles de modo que somente registradores de ponto flutuante com números pares podem manter valores de precisão dupla O coprocessador de ponto flutuante também possui 8 flags de código de condição cc numerados de 0 a 7 que são alterados por instruções de comparação e testados por instruções de desvio bc1f ou bc1t e instruções move condicionais Os valores são movidos para dentro e para fora desses registradores uma word 32 bits de cada vez pelas instruções lwc1 swc1 mfc1 ou um double 64 bits de cada vez por ldc1 sdc1 descritos anteriormente ou pela pseudoinstruções ls ld ss e sd descritas a seguir Nas instruções reais a seguir os bits 2126 são 0 para precisão simples e 1 para precisão dupla Nas pseudoinstruções a seguir fdest é um registrador de ponto flutuante por exemplo f2 Valor absoluto de ponto flutuante double absd fd fs 0x11 1 0 fs fd 5 6 5 5 5 6 Valor absoluto de ponto flutuante single abss fd fs 0x11 0 0 fs fd 5 5 5 5 6 Calcula o valor absoluto do double single de ponto flutuante no registrador fs e o coloca no registrador fd Adição de ponto flutuante double addd fd fs ft 0x11 0x11 ft fs fd 0 6 5 5 5 6 Adição de ponto flutuante single adds fd fs ft 0x11 0x10 ft fs fd 0 6 5 5 5 6 Calcula a soma dos doubles singles de ponto flutuante nos registradores fs e ft e a coloca no registrador fd Teto de ponto flutuante para word ceilwd fd fs 0x11 0x11 0 fs fd 0xe ceilws fd fs 0x11 0x10 0 fs fd 0xe Calcula o teto do double single de ponto flutuante no registrador fs converte para um valor de ponto fixo de 32 bits e coloca a word resultante no registrador fd Comparação igual double Comparação igual single Comparação menor ou igual double Move ponto flutuante double condicional se for zero Move ponto flutuante single condicional se for zero Multiplicação de ponto flutuante double