Baixe o app para aproveitar ainda mais
Prévia do material em texto
Arquitetura e Organização de Computadores Instruções: A linguagem de máquina Parte I Prof. Sílvio Fernandes UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO DEPARTAMENTO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIA DA COMPUTAÇÃO 1 Organização de um computador Cinco componentes clássicos: Entrada Saída Memória Caminho de Dados Controle 2 Organização de um computador 3 Introdução Para controlar o hardware de um computador é preciso falar da sua linguagem As palavras da linguagem são chamadas de instruções Seu vocabulário é denominado conjunto de instruções ou ISA (Instructions Set Architecture) Objetivos dos projetistas de computador Encontrar uma linguagem que facilite o projeto do hardware e do compilador enquanto maximiza o desempenho e minimiza o custo Esse objetivo é antigo... 4 Introdução “É fácil ver, por métodos lógicos formais, que existem certos [conjuntos de instruções] que são adequados para controlar e causar a execução de qualquer sequencia de operações... As considerações realmente decisivas, do ponto de vista atual, na seleção de um [conjunto de instruções], são mais de natureza prática: a simplicidade do equipamento exigido pelo [conjunto de instruções] e a clareza de sua aplicação para os problemas realmente importantes, juntos com a velocidade com que tratam esses problemas.” Burks, Goldstine e von Neumann, 1947 5 Princípios de Projeto Princípio 1: Simplicidade favorece a regularidade Princípio 2: Menor significa mais rápido Princípio 3: Agilize os casos mais comuns Princípio 4: Um bom projeto exige bons compromissos 6 Por que MIPS? Típico conjunto de instruções da década de 1980 Instruções simples, sempre realizando uma única operação As instruções possuem tamanho fixo de 32 bits. No total, o MIPS possui 32 registradores. Cada um deles, de 32 bits Está em quase 100 milhões de processadores até 2002 Quem usa? ATI Techologies, Broadcom, Cisco, NEC, Nintendo, Sili on Graphics, Sony, Texas Instruments e Toshiba, entre outros 7 Operações do Hardware do Computador Todo computador precisa ser capaz de realizar aritmética Notação assembly do MIPS add a, b, c Instrui a somar as variáveis b e c e guardar em a A sequência de instruções soma 4 variáveis add a, b, c # A soma b+c é colocada em a add a, a, d # A soma b+c+d é colocada em a add a, a, e # A soma b+c+d+e é colocada em a 8 Operações do Hardware do Computador O número de operandos em operações como a adição é 3: os dois números sendo somados e um local para colocar a soma Exige que cada instrução tenha exatamente 3 endereços, de acordo com a filosofia de manter o hardware simples Princípio de projeto 1: Simplicidade favorece a regularidade 9 Instruções para soma e subtração E no caso de uma atribuição mais complexa, como por exemplo? f = (g + h) – (i + j); Neste caso, é necessário gerar mais de uma instrução. Temos também de utilizar variáveis temporárias. 10 Instruções para soma e subtração f = (g + h) – (i + j); Assembly final: add t0, g, h add t1, i, j sub f, t0, t1 E aí pessoal, assembly é ou não é fácil? 11 Assembly do MIPS 12 Categoria Instrução Exemplo Significado Comentário Aritmética Add add a, b, c a = b + c Sempre 3 operandos Subtract sub a, b, c a = b - c Sempre 3 operandos Registradores no MIPS Operandos do hardware de um computador Ao contrário dos programas nas linguagens de alto nível, os operandos das instruções aritméticas são restritos. Os operandos de uma instrução aritmética são os registradores. Lembrem-se que no MIPS só temos 32 registradores. Qual o motivo para termos uma quantidade tão pequena de registradores? Princípio de Projeto 2: “Menor significa mais rápido” 13 Registradores no MIPS Os nomes dos registradores MIPS obedecem ao seguinte padrão: Utilizamos “$” seguido por dois caracteres para representar um registrador. $s0, $s1, $s2,... representam os registradores que correspondem às variáveis dos programas em C e Java. $t0, $t1, ... Representam os registradores que armazenam valores temporários. 14 Registradores no MIPS Logo, para o programa anterior, teríamos: f = (g + h) – (i + j); Assembly add t0, g, h add t1, i, j sub f, t0, t1 add $t0, $s1, $s2 add $t1, $s3, $s4 sub $s0, $t0, $t1 15 Registradores no MIPS Pergunta: O processador MIPS possui apenas 32 registradores. Como fazemos para trabalhar com variáveis complexas cuja quantidade de registradores do MIPS é insuficiente para armazená-las? 16 Instruções para transferência de dados Utilizando a memória principal. Para realizarmos a transferência de um word da memória para um registrador, utilizamos a instrução lw (load word). Sintaxe: lw $r1, const($r2) $r1 é o registrador que armazena o conteúdo da memória. const representa um valor constante que é somado ao endereço presente no registrador $r2. 17 A memória principal Cada endereço da memória externa representam células de 8 bits (1 byte). A instrução lw carrega um word da memória principal. Logo, se dermos um lw no endereço 0, receberemos os dados do endereço 0, 1, 2 e 3. Memória Principal 0 1 2 3 ... 9 1 11 12 31 ... 13 Instruções para transferência de dados 18 Instruções para transferência de dados Qual código assembly para o seguinte trecho de código, considere A um array de inteiros com o endereço base armazenado em $s3 e a variável h em $s2 e g em $s1? g = h + A[8]; lw $t0,32($s3); add $s1,$s2,$t0; Porque 32? Porque cada posição do array ocupa 1 palavra (4 bytes ou 32 bits). Lembrem-se que cada endereço sinaliza para uma célula de 1 byte apenas. Logo, para acessarmos o inteiro na posição 8, temos de pular os 8 inteiros que aparecem antes no array, assim temos: 4 * 8 = 32 19 Endianness Grande parte dos processadores fazem restrição com relação ao endereço em que começam suas palavras. No Mips, por exemplo, suas palavras precisam começar em endereços que sejam múltiplos de 4. Esse requisito é denominado restrição de alinhamento. Com relação ao byte de endereçamento, os processadores podem ser big endian ou little endian. 20 Endianness Processadores Big-Endian numeram os bytes dentro de uma palavra (word) de forma que o byte com o valor mais baixo é o mais à esquerda. 21 Endianness Processadores Little-Endian numeram os bytes dentro de uma palavra (word) de forma que o byte com o valor mais baixo é o mais à direita. 22 Instruções para transferência de dados A instrução que desempenha função inversa ao load word (lw) é a instrução store word (sw). Basicamente ela transfere o conteúdo de um registrador para um endereço específico da memória principal. Sintaxe: Similar ao do lw. sw $r1, const($r2) $r1 contém o valor a ser armazenado no endereço indicado em $r2 23 Instruções para transferência de dados Exemplo: A[12] = h + A[8]; Considerando que h está em $s2 e A em $s3 lw $t0, 32($s3) # reg. $t0 recebe A[8] add $t0, $s2, $t0 # reg. $t0 recebe h+A[8] sw $t0, 48($s3); # A[12] recebe h+A[8] 24 Instrução para soma com constantes addi (Adição Imediata). Para evitar o overhead de termos de ler uma constante da memória para depois utilizá-la em uma soma, MIPS dá suporte a uma instrução especial, o addi. Basicamente, ela realiza uma soma com um valor constante. Sintaxe: addi $r1, $r2, const # armazenao valor de $r2 + const no reg. $r1. Essa instrução obedece ao princípio de projeto 3: “Agilize os casos mais comuns” Realmente ele é um caso comum, pois soma com constantes representam um percentual bastante elevado do código. Lembrem-se que grande parte dos laços fazem uso desta instrução. 25 Assembly do MIPS 26 Categoria Instrução Exemplo Significado Comentário Aritmética Add add $s1, $s2, $s3 $s1 = $s2+$s3 3 operandos; dados registradores Subtract sub $s1, $s2, $s3 $s1 = $s2-$s3 3 operandos; dados registradores Add Immediate addi $s1, $s2, 100 $s1 = $s2+100 Usada para somar constantes Transferência de dados Load word lw $s1, 100($s2) $s1 = Mem[$s2+100] Dados da mem. para o registrador Store Word sw $s1, 100($s2) Mem[$s2+100] = $s1 Dados do registrador para a mem. Representação das instruções em linguagem de máquina. Humanos aprendem a pensar na base 10, mas os números podem ser representados em qualquer base 123 base 10 = 1111011 base 2 No HW do computador, os números são mantidos como uma série de sinais eletrônicos altos e baixos, por isso são considerados base 2 Todas informação é composta por dígitos binários ou bits As instruções também são mantidas como uma série de bits e podem ser representadas como números 27 Representação das instruções em linguagem de máquina. No assembly do MIPS, os registradores $s0 a $s7 são mapeados de 16 a 23, e os reg. $t0 a $t7 de 8 a 15 Por exemplo a instrução add $t0, $s1, $s2 possui a seguinte representação: 28 0 17 18 8 0 32 Representação das instruções em linguagem de máquina. Embora até o momento só termos visto instruções em assembly, cada uma destas instruções possui uma correspondência binária. A estas instruções, em binário, damos o nome de linguagem de máquina. Para a instrução add $t0, $s1, $s2 temos a seguinte representação binária: 29 Representação das instruções em linguagem de máquina. Pode parecer cansativo escrever e ler sequencias de número binários Evitamos esse tédio usando uma base maior: números hexadecimais (base 16) eca8 6420 hex 1110 1100 1010 1000 0110 0100 0010 0000 Bin 30 Representação das instruções em linguagem de máquina. Campos de uma instrução MIPS: Instruções tipo-R (de registrador) ou formato R op: Operação básica da instrução (opcode) rs: registrador do primeiro operando de origem rt: registrador do segundo operando de origem rd: registrado do operando de destino shamt: “shift amount” (quantidade de deslocamento). funct: seleciona a variante específica do campo op (código de função) 31 Representação das instruções em linguagem de máquina. Campos de uma instrução MIPS: Instruções tipo-I (de imediato) ou formato I. op: Operação básica da instrução (opcode) rs: registrador do operando de origem rt: registrador de destino constant or address: constante ou endereço de memória. 32 Representação das instruções em linguagem de máquina. Embora MIPS possua dois diferentes tipos de formato de instruções, percebam que a quantidade de bits é a mesma. Isso caracteriza o Princípio de Projeto 4, que diz: “Um bom projeto exige bons compromissos”. 33 Instruções para operações lógicas Operações Lógicas 34 Instruções para operações lógicas Sintaxe de uso dos operadores de deslocamento (sll, srl). sll $t2, $s0, 4; # reg $t2 = $s0 << 4 bits. Para $s0 = 9, teríamos $t2 = 144; Observem o correspondente em instrução de máquina. Vejam que o campo shamt é utilizado para sinalizar a quantidade de deslocamento 35 Instruções para operações lógicas Sintaxe de uso dos operadores and, nor e or. and $t0, $t1, $t2 # reg $t0 = reg $t1 & reg $t2; A sintaxe é a mesma para nor e or. MIPS não possui uma instrução not. Tem como eu obter esta instrução a partir de uma das instruções acima? 36 Instruções para operações lógicas Sim, basta fazermos um NOR (NOT OR) entre o valor que queremos negar e um registrador que possua o valor 0. A NOR 0 = NOT (A OR 0) = NOT (A) nor $t0, $t1, $t3 #reg $t0 = ~(reg $t1 | reg $t3) 37 Assembly do MIPS 38 Categoria Instrução Exemplo Significado Comentário Aritmética Add add $s1, $s2, $s3 $s1 = $s2+$s3 3 operandos; dados registradores Subtract sub $s1, $s2, $s3 $s1 = $s2-$s3 3 operandos; dados registradores Add Immediate addi $s1, $s2, 100 $s1 = $s2+100 Usada para somar constantes Lógica And and $s1, $s2, $s3 $s1 = $s2 & $s3 3 operandos em reg; AND bit a bit Or or $s1, $s2, $s3 $s1 = $s2 | $s3 3 operandos em reg; OR bit a bit Nor nor $s1, $s2, $s3 $s1 = ~($s2 | $s3) 3 operandos em reg; NOR bit a bit And Immediate andi $s1, $s2, 100 $s1 = $s2 & 100 AND bit a bit entre reg. e constante Or Immediate ori $s1, $s2, 100 $s1 = $s2 | 100 OR bit a bit entre reg. e constante Shift left logical sll $s1, $s2, 10 $s1 = $s2 << 10 Deslocamento à esquerda por const. Shift rigth logical srl $s1, $s2, 10 $s1 = $s2 >> 10 Deslocamento à direita por const. Transferência de dados Load word lw $s1, 100($s2) $s1 = Mem[$s2+100] Dados da mem. para o registrador Store Word sw $s1, 100($s2) Mem[$s2+100] = $s1 Dados do registrador para a mem. Referências PATTERSON, D. A. ; HENNESSY, J.L. Organização e projeto de computadores – a interface hardware software. 3. ed. Editora Campus, 2005. Notas de aula do Prof. André Luis Meneses Silva 39
Compartilhar