PARTE II - CONJUNTO DE INSTRUÇÕES ARQUITETURA DE COMPUTADORES ANTONIO RAMOS DE CARVALHO JÚNIOR Introdução Instruções são representadas em linguagem de máquina (binário) Existem linguagens intermediárias que representam instruções - linguagens de montagem (Assembly) Operações feitas em registradores Foco da disciplina na arquitetura MIPS INSTRUÇÕES MIPS Registradores O tamanho de cada registrador é de 4 bytes (32 bits) A arquitetura MIPS possui um número limitado de registradores: 32 Representação de alguns registradores: $t0 - $t9: registradores temporários $s0 - $s7: registradores salvos $a0 - $a3: argumentos, salvam valres intermediários em algumas operações $zero: valor constante 0 (zero) Arquitetura MIPS Instruções de 32 bits - RISC 32 registradores - de 0 à 31 Alguns registradores são reservados para operações do processador e troca de informações, dois registradores importantes são: IR - Instruction Register: registrador que armazena a instrução que está sendo executada PC - Program Counter: guarda o numero da “linha” da próxima instrução a ser chamada Instruções aritméticas Operação sempre é feita entre dois registradores Representar a soma A + B + C necessita de mais de uma instrução Instrução Exemplo Significado Adição (add) add $t1, $t2, $t3 $t1 = $t2 + $t3 Subtração (sub) sub $t1, $t2, $t3 $t1 = $t2 - $t3 Adição imediata (addi) addi $t1, $t2, V $t1 = $t2 + V Instruções aritméticas Faça as operações abaixo em Assembly: A. $t1 + $t2 - $t3 + $t4 B. $t1*2 - $t2*2 C. $t1 + ($t2 - $t3 - $t4) Transferência de dados Salva ou resgata um valor da memória para um registrador Load: carrega o valor de um endereço em um registrador Store: salva o valor de um registrador em um endereço fornecido Instrução Load word (lw) Store word (sw) Exemplo Significado lw $t1, 100($t2) $t1 = MEMORY[$t2 + 100] lw $t1, 100($t2) MEMORY[$t2+100] = $t1 Salto condicional e incondicional Faz um salto ou não para a instrução informada (número da linha) de acordo com uma condição Instrução Exemplo Significado if ($t1 = $t2) Branch on equal (beq) beq $t1, $t2, 25 PC = PC + 4 + 25*4 Branch on not equal (bne) bne $t1, $t2, 25 Jump (j) j 100 if ($t1 != $t2) PC = PC + 4 + 25*4 PC = 100*4 Salto condicional e incondicional Converta os pseudocódigos em C abaixo para assembly: if a == b { c = a + b*2; } else { c = b + a*2; } int C = 0; for (int i = 0; i == 10; i++) { C = i+C; } REPRESENTAÇÃO DE INSTRUÇÕES Codificação MIPS Instruções do tipo-R (operações lógicas e aritméticas - add, sub, and, or) 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits op • • • • rs rt rd shamt funct op: Operação básica a ser realizada rs: registrador contendo o primeiro operando-fonte rt: registrador contendo o segundo operando-fonte rd: registrador que guarda o resultado da operação, também conhecido como registrador destino • shamt: quantidade de bits a serem deslocados (não será usado neste momento) • funct: determina a operação que será realizada, pois existem várias operações a serem feitas por instruções do tipo R Codificação MIPS Instruções do tipo-I (transferência de dados entre registradores e memória - lw ou sw) 6 bits 5 bits 5 bits op • • • • rs rt 16 bits endereço op: Operação básica a ser realizada rs: registrador contendo o primeiro operando-fonte rt: registrador contendo o segundo operando-fonte endereço: endereço de acesso para a operação Codificação MIPS Instruções de salto condicional - bne ou beq Utiliza desvio relativo pois 16 bits pode ser pouco para representar um desvio 6 bits 5 bits 5 bits op • • • • rs rt 16 bits endereço op: Operação básica a ser realizada rs: registrador contendo o primeiro operando-fonte rt: registrador contendo o segundo operando-fonte endereço: número de linhas a serem “saltadas” Codificação MIPS Instruções do tipo J (jump) - salto incondicional 6 bits op 26 bits endereço de salto • op: Operação básica a ser realizada • endereço de salto: endereço de instrução (linha) para o qual o programa irá após esta instrução Registradores MIPS Nome Núm Reg Utilização $zero 0 $v0-$v1 2-3 $a0-$a3 4-7 guarda resultados para avaliar expressões argumentos $t0-$t7 8-15 temporários $s0-$s7 16-23 salvos $t8-$t9 24-25 mais temporários $gp 28 global pointer $sp 29 stack pointer $fp 30 frame pointer $ra 31 endereço de retorno a procedimento valor da constante 0 Codificação de instruções Nome Exemplo Instrução add 0 18 19 17 0 32 add $s1, $s2, $s3 sub 0 18 19 17 0 34 sub $s1, $s2, $s3 lw 35 18 17 100 lw $s1, 100($s2) sw 43 18 17 100 sw $s1, 100($s2) beq 4 17 18 25 beq $s1, $s2, 100 bne 5 17 18 25 bne $s1, $s2, 100 j 2 2500 j 10000 Convertendo assembly para binário Exemplo: add $t0, $s1, $s2 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits op rs rt rd shamt funct op = 0 | funct = 32 RS = $s1 = 17 | RT = $s2 = 18 | RD = $t0 = 8 SHAMT = sem uso = 0 000000 10001 10010 01000 00000 100000 op rs rt rd shamt funct