Nvel Mquina Formatos de Instrues IA 32 e
- Slides: 15
Nível Máquina Formatos de Instruções IA 32 e MIPS AC 1 – Formatos de Instruções 1
Stored Program Concept As instruções são sequências de bits, armazenados em memória, que são descodificados pela Unidade de Controlo do processador. É possível descodificar estes números porque a Unidade de Controlo conhece o formato da informação que estes contêm. Esta informação consiste geralmente nos seguintes campos: • opcode – código que identifica a operação; • identificação dos modos de endereçamento • operandos (registos, valores imediatos) Algumas arquitecturas incluem prefixos que modificam o comportamento da instrução. AC 1 – Formatos de Instruções 2
Formato das Instruções : IA 32 Instruções podem variar entre 1 a 17 bytes AC 1 – Formatos de Instruções 3
Formatos das Instruções : IA 32 ADDB $0 x 20, %AL Opcode = 0 x 04 0 x 20 ADDL $0 x 5 F 0043, %EAX Opcode = 0 x 05 0 x 43 0 x 00 0 x 5 F 0 x 00 LOCK ADDL $0 x 5 F 0043, 0 x 08 FFA 021(%eax, %esi, 2) Opcode = 0 x 81, Prefix = 0 x. F 0 0 x 81 0 x 84 0 x 70 0 x 21 0 x. A 0 0 x. FF 0 x 08 0 x 43 0 x 00 0 x 5 f 0 x 00 prefixo opcode Mod. R/M SIB AC 1 – Formatos de Instruções deslocamento valor imediato 4
Formato de instruções – MIPS 32 A simplicidade do formato das instruções permite o desenho de uma unidade de controlo mais simples, mais rápida e que facilita a incorporação de outras funcionalidades no processador. Simplicidade: as instruções têm tamanho fixo e apenas 3 tipos diferentes R I J op rs rt rd shamt Funct 6 bits 5 bits 6 bits op rs rt Imm 6 bits 5 bits 16 bits op Target 6 bits 26 bits AC 1 – Formatos de Instruções 5
Tipo R 6 bits 5 bits 6 bits op rs rt rd shamt funct Op – código que identifica a instrução. Para R é sempre 0 (excepto rfe=0 x 10) funct – identifica a função (operação) rs, rt – números do dois registos que contêm os operandos rd – número do registo que virá a conter o resultado Número de shifts – apenas para sll, srl e sra (0 nas outras instruções) AC 1 – Formatos de Instruções 6
Tipo R add $t 0, $t 2, $s 0 rt = $s 0 = 16 rd = $t 0 = 8 shamt = 0 op = 0 x 00 funct = 0 x 20 rs = $t 2 = 10 op rs 000000 01010 Hexa: 0 1 AC 1 – Formatos de Instruções 5 rt rd 10000 01000 0 4 shamt funct 00000 100000 0 2 0 7
Tipo I addi $t 0, $t 2, 256 rt = $t 0 = 8 imm = 256 op = 0 x 08 rs = $t 2 = 10 op rs 001000 01010 2 1 AC 1 – Formatos de Instruções 4 rt imm 01000 0001 0000 8 0 1 0 0 8
Tipo I lw $t 9, -20 ($sp) rt = $t 9 = 25 imm = -20 op = 0 x 23 rs = $sp = 29 op rs 100011 11101 8 f AC 1 – Formatos de Instruções b rt imm 11001 1111 1110 1100 9 f f e c 9
Instruções de salto – branch e jump Branch (Tipo I) – endereçamento relativo A constante de 16 bits indica o número de instruções a saltar Jump (Tipo J) – endereçamento absoluto A constante de 26 bits indica os 26 bits menos significativos do endereço de destino (excluindo os 2 bits menos significativos que são 00) Jump register (Tipo R) – endereçamento absoluto O registo indica o endereço de destino AC 1 – Formatos de Instruções 10
Endereçamento relativo op = 05 rs = $t 0 = 8 rt = $0 = 0 for: subi $t 0, -1 bne $t 0, $0, for addi $t 0, -1 op rs rt imm 000101 001000 000000 1111 1110 PC = imm*4 + PC AC 1 – Formatos de Instruções 11
Endereçamento Absoluto –Tipo J Endereço destino do jump é dado por: • 4 bits mais significativos – são obtidos do PC • 26 bits do meio – obtidos do campo target da instrução • 2 bits menos significativos – 00 pois as instruções têm que estar em endereços múltiplos de 4 PC: Old PC Instruction Target Field 00 Para saltos que necessitem da especificação dos 32 bits do endereço de destino usar a instrução jr (jump register) carregando previamente o valor apropriado num registo AC 1 – Formatos de Instruções 12
Endereçamento absoluto – Tipo J j longe Supondo que esta instrução está no endereço de memória 0 XE 0 AA 0000 e que longe é uma etiqueta que corresponde a 0 x. E 0000008 então teremos: op target 000010 0000 0000 10 PC = 1110 0000 1010 0000 0100 Após substituir os 26 bits apropriados do PC teremos PC = 1110 0000 0000 1000 AC 1 – Formatos de Instruções 13
Valores Imediatos Como lidar com instruções que tenham constantes de mais de 16 bits addi $t 0, 0 x. A 00 CD 1. Carregar a constante para $at usando lui e ori 2. Usar a versão R da instrução lui $at, 0 x 000 A ori $at, 0 x 00 CD add $t 0, $at: AC 1 – Formatos de Instruções 0 x 000 A 0000 0 x 000 A 00 CD 0 x? ? ? ? 14
Formato de Instruções Tema MIPS - Instruções I e R H&P Sec 3. 4, 3. 5 MIPS - Instruções J Sec 3. 8 MIPS - Constantes > 16 bits Sec 3. 8 Instruções Intel AC 1 – Formatos de Instruções Manual Intel Página da disciplina: “IA 32 Intel Architecture Software Developer's Manual. Volume 2: The Instruction Set Reference” 15