Faculdade de Ciências Aplicadas e Sociais de Petrolina – FACAPE Instruções MIPS Transferência de Dados Conjunto de Instruções MIPS Parte II Lógicas Controle Suporte a procedimentos Prof. Sérgio Adaptado dos slides de Sistemas Processadores do Prof. Frank Torres - UFMG Organização de Computadores 1 Instruções MIPS :: Instruções lógicas Operação lógica deslocamento à esquerda deslocamento à direita 2 Instruções MIPS :: Instruções lógicas Instrução MIPS Operações de deslocamento (shift). Significado sll shift left logical srl shift right logical E bit a bit and, andi and OU bit a bit or, ori or NOU bit a bit nor not or Organização de Computadores Organização de Computadores Deslocam todos os bits de uma palavra para esquerda ou direita, preenchendo os bits vazios com zero (não cíclico). São instruções do tipo R (registrador). A quantidade de bits a serem deslocados é especificada pelo campo shamt (shift amount). 3 Organização de Computadores 4 Instruções MIPS :: Instruções lógicas Instruções MIPS :: Instruções lógicas shift left logical (sll) shift left logical (sll) sll $t2, $s0, 4 # $t2 ← $s0 << 4 sll $t2, $s0, 4 Conteúdo: op $s0 0110 1000 1111 0000 0111 0110 1111 1111 Instrução (decimal) $t2 1000 1111 0000 0111 0110 1111 1111 0000 Instrução (binário) Organização de Computadores 5 # $t2 ← $s0 << 4 rs rt rd 0 0 16 10 4 0 -- $s0 $t2 shamt sll 000000 00000 10000 01010 00100 000000 Organização de Computadores 6 Instruções MIPS :: Instruções lógicas shift right logical (srl) shift right logical (srl) # $t2 ← $s0 >> 8 srl $t2, $s0, 8 Conteúdo: op $s0 0110 1000 1111 0000 0111 0110 1111 1111 Instrução (decimal) $t2 0000 0000 0110 1000 1111 0000 0111 0110 Instrução (binário) Organização de Computadores 7 funct sll Instruções MIPS :: Instruções lógicas srl $t2, $s0, 8 shamt rs # $t2 ← $s0 >> 8 rt rd shamt funct 0 0 16 10 8 2 srl -- $s0 $t2 shamt srl 000000 00000 10000 01010 01000 000010 Organização de Computadores 8 Instruções MIPS :: Instruções lógicas Instruções MIPS :: Revisão – Complemento de 2 shift right arithmetic (sra) 0100 = +4 Desloca bits à direita, preservando o sinal (compl. a 2). Deslocamento de n bits corresponde à divisão por 2n. Dica: para divisões com valores de tipo integer. sra $t2, $s0, 4 Complemento de 1: 1011 Soma 1: +1 1100 = -4 # $t2 ← $s0 >> 4 Conteúdo: $s0 1110 1000 1111 0000 0111 0110 1111 1111 $t2 1111 1110 1000 1111 0000 0111 0110 1111 Organização de Computadores 9 Organização de Computadores 10 Instruções MIPS :: Instruções lógicas Instruções MIPS :: Instruções lógicas shift right arithmetic (sra) AND bit a bit (and) and $t0, $t1, $t2 sra $t2, $s0, 4 op Instrução (decimal) Instrução (binário) rs rt rd shamt Conteúdo: funct 0 0 16 10 4 3 sra -- $s0 $t2 shamt sra 000000 00000 10000 01010 00100 000011 Organização de Computadores # $t0 ← $t1 & $t2 # $t2 ← $s0 >> 4 11 $t1 0000 0000 1111 0000 0000 0110 0000 1111 $t2 0000 0000 0110 0000 0000 1111 0000 1110 $t0 0000 0000 0110 0000 0000 0110 0000 1110 Organização de Computadores 12 Instruções MIPS :: Instruções lógicas Instruções MIPS :: Instruções lógicas AND bit a bit (and) OR bit a bit (or) and $t0, $t1, $t2 Instrução (decimal) Instrução (binário) or $t0, $t1, $t2 # $t0 ← $t1 & $t2 op rs rt rd shamt funct 0 9 10 8 0 (24)h and $t1 $t2 $t0 -- and 000000 01001 01010 01000 00000 Conteúdo: 100100 Organização de Computadores 13 Instruções MIPS :: Instruções lógicas $t2 0000 0000 0110 0000 0000 0000 0000 1110 $t0 0000 0000 1111 0000 0000 0110 0000 1111 Organização de Computadores 14 A operação NOT (negação) tem apenas um operando. # $t0 ← $t1 | $t2 op rs rt rd shamt funct 0 9 10 8 0 (25)h or $t1 $t2 $t0 -- or 000000 0000 0000 1111 0000 0000 0110 0000 1111 NOR bit a bit (nor) or $t0, $t1, $t2 Instrução (binário) $t1 Instruções MIPS :: Instruções lógicas OR bit a bit (or) Instrução (decimal) # $t0 ← $t1 | $t2 01001 01010 01000 00000 Para acompanhar o formato de dois operandos, a instrução NOR foi projetada no lugar do NOT. Se um operando for zero, NOR é equivalente ao NOT: 100101 A NOR 0 = NOT (A OR 0) = NOT (A) Organização de Computadores 15 Organização de Computadores 16 Instruções MIPS :: Instruções lógicas Instruções MIPS :: Instruções lógicas NOR bit a bit (nor) XOR bit a bit (xor) nor $t0, $t1, $zero op Instrução (decimal) Instrução (binário) rs # $t0 ← ~$t1 rt rd shamt xor $t0, $t1, $t2 funct 0 9 0 8 0 (27)h nor $t1 $zero $t0 -- nor 000000 01001 00000 01000 00000 100111 Organização de Computadores op Instrução (decimal) Instrução (binário) 17 rs # $t0 ← $t1 ⊕ $t2 rt rd 0 9 10 8 0 (26)h $t1 $t2 $t0 -- xor 000000 01001 01010 01000 00000 100110 Organização de Computadores 18 Instruções MIPS :: Instruções lógicas AND imediato (andi) OR imediato (ori) Instrução (decimal) Instrução (binário) # $t0 ← $t1 & 40 op rs rt immediate (C)h 9 8 40 andi $t1 $t0 constante 001100 01001 01000 0000000000101000 Organização de Computadores ori $t0, $t1, 40 19 funct xor Instruções MIPS :: Instruções lógicas andi $t0, $t1, 40 shamt # $t0 ← $t1 | 40 op rs rt immediate Instrução (decimal) (D)h 9 8 40 ori $t1 $t0 constante Instrução (binário) 001101 01001 01000 0000000000101000 Organização de Computadores 20 Instruções MIPS :: Instruções lógicas :: Resumo Categoria lógicas Nome Exemplo Operação or or $8,$9,$10 $8 = $9 or $10 and and $8,$9,$10 $8 = $9 and $10 xor xor $8,$9,$10 $8 = $9 xor $10 nor nor $8,$9,$10 $8 = $9 nor $10 andi andi $8,$9,5 $8 = $9 and 5 Imediato em 16 bits ori ori $8,$9,40 $8 = $9 or 40 Imediato em 16 bits sll sll $8,$9,10 $8 = $9 << 10 Deslocamento ≤ 32 Instruções MIPS Comentários Transferência de Dados Lógicas Controle Suporte a procedimentos srl srl $8,$9,5 $8 = $9 >> 5 Deslocamento ≤ 32 sra sra $8,$9,5 $8 = $9 >> 5 Desl. ≤ 32, preserva sinal Operações Lógicas do MIPS Organização de Computadores 21 Organização de Computadores 22 Organização de Computadores 23 Organização de Computadores 24 Organização de Computadores 25 Organização de Computadores 26 Organização de Computadores 27 Organização de Computadores 28 Instruções MIPS :: Instruções de controle Instruções MIPS :: Instruções de controle Instruções para tomada de decisão. Instruções MIPS para salto condicional: Alteram o fluxo de controle do programa. Alteram a “próxima” instrução a ser executada. Instruções de controle. Salto condicional. Salto incondicional. Branch on equal (beq) Branch on not equal (bne) Set on less than (slt) Set on less than immediate (slti) Instruções MIPS para salto incondicional: jump (j) Organização de Computadores 29 Instruções MIPS :: Instruções de controle 30 Instruções MIPS :: Instruções de controle :: Ex 01 Branch on not equal (bne) Desvia o programa para <label1> se $t0 != $t1 bne $t0, $t1, label1 Organização de Computadores Exemplo: bne $8, $9, sai add $10, $8, $9 sai: nop #if ($t0 != $t1) goto label1 Branch on equal (beq) Desvia o programa para <label2> se $t0 == $t1 beq $t0, $t1, label2 Organização de Computadores #if ($t0 == $t1) goto label2 31 Organização de Computadores 32 Organização de Computadores 33 Organização de Computadores 34 Organização de Computadores 35 Organização de Computadores 36 Instruções MIPS :: Instruções de controle :: Formato Branch on not equal (bne) bne $t0, $t1, label op Instrução (decimal) Instrução (binário) Organização de Computadores 37 Instruções MIPS :: Instruções de controle :: Formato beq $t0, $t1, label Instrução (binário) op rs rt immediate 4 8 9 xxx beq $t0 $t1 nº de words saltadas 000100 01000 01001 xxx (16 bits) Organização de Computadores rt immediate 5 8 9 xxx bne $t0 $t1 nº de words saltadas 000101 01000 01001 xxx (16 bits) Organização de Computadores 38 Instruções MIPS :: Instruções de controle :: Formato As instruções de desvio condicional armazenam, no campo immediate, a quantidade de palavras (words) que devem ser saltadas para chegar à instrução marcada pelo label (rótulo). Branch on equal (beq) Instrução (decimal) rs Um número positivo indica que o salto deve ser no sentido para frente (até o fim do código). Um número negativo indica que o salto deve ser no sentido para trás (até o início do código). 39 Organização de Computadores 40 Instruções MIPS :: Instruções de controle Instruções MIPS :: Instruções de controle Instruções do tipo “Set on less than” combinadas com instruções do tipo “Branch” permitem criar todas as condições relativas: Set on less than (slt) Compara dois registradores. slt $s1, $s2, $s3 #if ($s2 < $s3) $s1 = 1 #else $s1 = 0 igual diferente maior maior ou igual menor menor ou igual Set on less than immediate (slti) Compara um registrador e uma constante. slti $s1, $s2, 100 #if ($s2 < 100) $s1 = 1 #else $s1 = 0 Organização de Computadores 41 Instruções MIPS :: Instruções de controle Exemplo Desvio incondicional para um endereço de memória apontado por um label. label Instruções do tipo branch indicam desvio da sequência do programa mediante análise de uma condição. Instruções do tipo jump indicam desvio incondicional da sequência do programa. Organização de Computadores 42 Instruções MIPS :: Instruções de controle :: Ex 02 Jump (j) j Organização de Computadores else: sai: 43 bne $8, $9, else add $10, $8, $9 j sai sub $10, $8, $9 nop Organização de Computadores 44 Organização de Computadores 45 Organização de Computadores 46 Organização de Computadores 47 Organização de Computadores 48 Organização de Computadores 49 Organização de Computadores 50 Instruções MIPS :: Instruções de controle :: Formato Set on less than (slt) slt $t0, $t1, $t2 op Instrução (decimal) Instrução (binário) Organização de Computadores 51 rs #if ($t1 < $t2) $t0 = 1 #else $t0 = 0 rt rd shamt funct 0 9 10 8 0 (2A)h slt $t1 $t2 $t0 -- slt 000000 01001 01010 01000 00000 101010 Organização de Computadores 52 Instruções MIPS :: Instruções de controle :: Formato Instruções MIPS :: Instruções de controle :: Formato Set on less than immediate (slti) Jump (j) slti $t0, $t1, 100 op Instrução (decimal) Instrução (binário) rs #if ($t1 < 100) $t0 = 1 #else $t0 = 0 rt (A)h 9 8 100 $t1 $t0 valor 001010 01001 01000 0000000001100100 op 53 Instruções MIPS :: Instruções de controle :: Formato Ao contrário das instruções de desvio condicional (beq e bne), o campo target da instrução jump armazena o endereço da memória correspondente à instrução marcada pelo label. Como o endereço de memória é um múltiplo de 4 bytes (100b), seus dois últimos bits não são representados na instrução jump. O novo endereço consiste dos 4 bits mais significativos do PC atual e dos 26 (+2) bits da instrução. Organização de Computadores label immediate slti Organização de Computadores j 55 # PC ← endereço[label] target Instrução (decimal) (2)h xxx j endereço da instrução Instrução (binário) 000010 xxx (26 bits) Organização de Computadores 54 Instruções MIPS :: Instruções de controle :: Resumo Categoria Nome Exemplo bne bne $8,$9,rotulo beq beq $8,$9,rotulo se $8 = $9 então PC ← endereço[rotulo] j j rotulo PC ← endereço[rotulo] slt slt $10,$8,$9 se $8 < $9 então $10 ← 1 senão $10 ← 0 slti slti $10,$8,100 se $8 < 100 então $10 ← 1 senão $10 ← 0 Suporte a decisão Organização de Computadores Operação se $8 ≠ $9 então PC ← endereço[rotulo] 56 Questões Como fazer? “while loop” while (save[i] != k) { i += 1; } Organização de Computadores Questões Como fazer? “for loop” Código assembly // $s3 = i, $s5 = k, $s6 = base of save[] Loop: sll $t1, $s3, 2 add $t1, $t1, $s6 lw $t0, 0($t1) beq $t0, $s5, Exit addi $s3, $s3, 1 j Loop Exit: nop #t1 = 4*i #t1 = end. de save[i] # t0 = valor de save[i] # if save[i] = k vai p. Exit #i=i+1 57 for (j < k) { j += 1; } Organização de Computadores Código assembly // $s1 = j, $s2 = k # t1 = 1 if j < k, else t1 = 0 Loop: slt $t1,$s1,$s2 beq $t1, $0, Exit # if j>= k then Exit addi $s1,$s1, 1 # j = j + 1 j Loop Exit: nop 58