Programação  
 
Rede de conhecimento computador >> Programação >> Programação De Computador Idiomas >> Content
Quais são as diferentes opcodes MIPS ALU usadas para executar operações aritméticas e lógicas em um processador?
MIPS ALU OpCodes são usados ​​no funct Campo das instruções do tipo R para especificar a operação precisa realizada pela unidade lógica aritmética (ALU). O campo `opcode` na instrução é sempre` 0x00` para instruções do tipo R, e o campo `funct` distingue entre diferentes operações. Aqui está um colapso dos códigos comuns do MIPS ALU Funct e suas operações correspondentes, agrupadas por tipo de clareza:

Operações aritméticas:

* `add` (adição):
* `funct =0x20` (100000 em binário)
* Adiciona dois registros e armazena o resultado em um registro de destino. O transbordamento * faz * causar uma exceção.

* `addu` (adição não assinado):
* `funct =0x21` (100001 em binário)
* Adiciona dois registros e armazena o resultado em um registro de destino. O excesso é * ignorado * (sem exceção). Use isso para aritmética modular ou quando você souber o transbordamento é impossível/aceitável.

* `sub` (subtração):
* `funct =0x22` (100010 em binário)
* Subtraia um registro de outro e armazena o resultado em um registro de destino. O transbordamento * faz * causar uma exceção.

* `subu` (subtração não assinada):
* `funct =0x23` (100011 em binário)
* Subtraia um registro de outro e armazena o resultado em um registro de destino. O excesso é * ignorado * (sem exceção).

* `mult` (multiplicação):
* `funct =0x18` (011000 em binário)
* Multiplica dois registros. O resultado de 64 bits é armazenado nos registros `hi` e` lo`.

* `multu` (multiplicação não assinada):
* `funct =0x19` (011001 em binário)
* Multiplica dois registros como valores não assinados. O resultado de 64 bits é armazenado nos registros `hi` e` lo`.

* `div` (divisão):
* `funct =0x1a` (011010 em binário)
* Divide um registro por outro. O quociente é armazenado no registro `lo 'e o restante é armazenado no registro` hi'.

* `divu` (divisão não assinada):
* `funct =0x1b` (011011 em binário)
* Divide um registro por outro como valores não assinados. O quociente é armazenado no registro `lo 'e o restante é armazenado no registro` hi'.

Operações lógicas:

* `e` (bitwise e):
* `funct =0x24` (100100 em binário)
* Executa um bit e operação em dois registros e armazena o resultado em um registro de destino.

* `ou` (bitwise ou):
* `funct =0x25` (100101 em binário)
* Executa um bit a operação em dois registros e armazena o resultado em um registro de destino.

* `xor` (bitwise xor):
* `funct =0x26` (100110 em binário)
* Executa uma operação XOR (exclusiva ou) bit -netwise em dois registros e armazena o resultado em um registro de destino.

* `nor` (bitwise nem):
* `funct =0x27` (100111 em binário)
* Executa um desempenho bit bit (não (não ou) em dois registros e armazena o resultado em um registro de destino.

* `sll` (Shift Left Logical):
* `funct =0x00` (000000 em binário)
* Descobra um registro deixado por um número especificado de bits (especificado no campo `shamt` da instrução do tipo R). Os zeros são deslocados da direita.

* `srl` (mudança à direita lógica):
* `funct =0x02` (000010 em binário)
* Descobra um registro diretamente por um número especificado de bits (especificado no campo `shamt` da instrução do tipo R). Os zeros são deslocados da esquerda.

* `SRA` (aritmética direita de mudança):
* `funct =0x03` (000011 em binário)
* Descobra um registro diretamente por um número especificado de bits (especificado no campo `shamt` da instrução do tipo R). O bit de sinal (bit mais significativo) é replicado e deslocado da esquerda, preservando o sinal do número.

Configurar-se-sim-than (operações relacionais):

* `slt` (definido menos que):
* `funct =0x2a` (101010 em binário)
* Define o registro de destino para 1 se o primeiro registro for menor que o segundo registro e 0 caso contrário. Trata os registros como números inteiros assinados.

* `sltu` (definido menos que não assinado):
* `funct =0x2b` (101011 em binário)
* Define o registro de destino para 1 se o primeiro registro for menor que o segundo registro e 0 caso contrário. Trata os registros como números inteiros não assinados.

Outras operações da ALU (importantes, mas não diretamente as operações no mesmo sentido que acima):

* `mfhi` (mova de hi):
* `funct =0x10` (010000 em binário)
* Move o valor do registro `hi` (que armazena os 32 bits superiores de um resultado de multiplicação ou o restante de uma divisão) para um registro de uso geral.

* `mflo` (mova -se de lo):
* `funct =0x12` (010010 em binário)
* Move o valor do registro `lo` (que armazena os 32 bits inferiores de um resultado de multiplicação ou o quociente de uma divisão) para um registro de uso geral.

* `mthi` (mova -se para oi):
* `funct =0x11` (010001 em binário)
* Move o valor de um registro de uso geral para o registro HI.

* `mtlo` (mova para lo):
* `funct =0x13` (010011 em binário)
* Move o valor de um registro de uso geral para o registro de LO.

* `jr` (registro de salto):
* `funct =0x08` (001000 em binário)
* Salta para o endereço armazenado no registro especificado. É assim que a função retorna geralmente é implementada. Embora envolva o registro de endereço, o ALU provavelmente é usado para calcular o endereço de destino.

* `syscall` (chamada do sistema):
* `funct =0x0c` (001100 em binário)
* Invoca o sistema operacional para executar um serviço de sistema. O serviço solicitado é identificado por um código no registro `$ v0` (` $ 2`).

Considerações importantes:

* Formato do tipo R: Todas essas instruções são do tipo R, o que significa que eles usam o seguinte formato:

`opcode | rs | rt | rd | shamt | funct`

Onde:

* `opcode`:sempre 0x00 para instruções do tipo R.
* `rs`:registro de origem 1
* `rt`:registro de origem 2
* `rd`:registro de destino
* `shamt`:quantidade de mudança (usada apenas por instruções de turno)
* `funct`:o código da função que especifica a operação específica.

* não assinado vs. assinado: O sufixo `u` (por exemplo,` adu`, `subu`,` multu`, `divu`,` sltu`) indica que os operandos são tratados como números inteiros não assinados. Isso afeta como o transbordamento é tratado e como as comparações são realizadas.

* oi e lo registros: Os registros `hi` e` lo` são registros de uso especial usado para armazenar os resultados das operações de multiplicação e divisão.

* Conjunto de instruções Variações: Diferentes implementações do MIPS podem incluir instruções adicionais ou ligeiramente modificadas. A lista acima abrange as operações mais comuns e amplamente suportadas.

Esse detalhamento abrangente deve fornecer uma sólida compreensão dos códigos MIPs ALU (códigos FUNCT) e das operações que eles executam. Ao escrever a montagem do MIPS, sempre consulte a documentação específica para a arquitetura MIPS que você está direcionando para garantir a precisão.

Anterior :

Próximo :
  Os artigos relacionados
·Como alterar a senha da conta com o AppleScript 
·Qual é o significado de conversão de valor e Cordas 
·Como vincular formulários incorporados em Symfony 
·Como converter Inglês para MATLAB 
·Como Fazer um Web Bot 
·Tipos de sistemas de informação por suporte de amplit…
·Como Subconjunto uma matriz no MATLAB 
·Os Efeitos do buffer overflows e formato Cordas em Flux…
·Como a programação do computador foi inventada? 
·Vantagens e Desvantagens de Máquina Nível Língua 
  Artigos em destaque
·Tutorial PHP para inicializar matrizes 
·Como Teach Yourself Visual C 6 
·Como verificar se existe coluna no MySQL 
·Qual é a função das instruções NOP? 
·Como converter uma marcação de horário para uma data…
·Como abrir arquivos Doc em Vb.Net 
·Como preencher um ListView De um SQL 
·Como escrever um PHP Se Statement 
·Como verificar se existe um arquivo e excluí-lo em Pyt…
·Como imprimir tags div com PHP 
Cop e direita © Rede de conhecimento computador https://ptcomputador.com Todos os Direitos Reservados