Buscar

Aula2_2013

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Arquitetura e Organizac¸a˜o de Computadores
Instruc¸o˜es de Ma´quina
Rodrigo Porf´ırio da Silva Sacchi
Bacharelado em Sistemas de Informac¸a˜o
Faculdade de Cieˆncias Exatas e Tecnologias
Universidade Federal da Grande Dourados
22 de maio de 2013
1 / 71
Introduc¸a˜o
Conjunto de instruc¸o˜es de ma´quina de um computador: interface
entre hardware e software;
Dado que:
Computadores sa˜o constru´ıdos com tecnologias de hardware baseadas
nos mesmos princ´ıpios;
Ha´ algumas poucas operac¸o˜es ba´sicas que todo computador deve
oferecer;
Projetistas buscam escolher instruc¸o˜es de ma´quina que:
Facilitem a construc¸a˜o do hardware;
Facilitem a construc¸a˜o do compilador;
Maximizem o desempenho;
Minimizem o custo.
Linguagens de ma´quina de diferentes computadores sa˜o bastante
similares;
Aprendendo uma, e´ fa´cil usar outras.
2 / 71
Estudaremos
Como projetar as instruc¸o˜es de ma´quina de um conjunto de instruc¸o˜es
de um processador;
Como definir:
Formato das instruc¸o˜es;
Representac¸a˜o das instruc¸o˜es;
Modos de enderec¸amento;
Tipos de instruc¸o˜es.
Qual a relac¸a˜o entre as instruc¸o˜es de ma´quina e as linguagens de alto
n´ıvel;
Como instruc¸o˜es de ma´quina sa˜o representadas em uma notac¸a˜o
simbo´lica (linguagem de montagem);
Como instruc¸o˜es de ma´quina sa˜o representadas em bina´rio;
Como conjuntos de instruc¸o˜es de ma´quina evolu´ıram historicamente.
3 / 71
Estudaremos
O conjunto de instruc¸o˜es de ma´quina de um processador real: MIPS :
Conjunto de instruc¸o˜es que busca a simplicidade do hardware;
Conjunto de instruc¸o˜es representativo;
Processador com palavra de 32 bits.
Semelhante a outras arquiteturas desenvolvidas desde a de´cada de
1980;
Quase 100 milho˜es de processadores MIPS fabricados em 2002;
Usada pela NEC, Nintendo, Cisco, Silicon Graphics, Sony...
4 / 71
Formato das Instruc¸o˜es
Uma instruc¸a˜o de ma´quina:
Possui um determinado nu´mero de bits;
E´ composta por campos que representam informac¸o˜es.
Toda instruc¸a˜o possui um campo chamado opcode:
Opcode: operation code (co´digo da operac¸a˜o);
Determina que ac¸a˜o a instruc¸a˜o deve realizar.
Muitas instruc¸o˜es possuem campos chamados de operandos ou
enderec¸os;
Especificam a localizac¸a˜o dos dados que sera˜o utilizados pela instruc¸a˜o.
Exemplo: uma instruc¸a˜o que soma 2 dados, precisa especificar onde
os 2 dados esta˜o e onde o resultado da soma deve ser armazenado.
5 / 71
Formato das Instruc¸o˜es
Formato de uma instruc¸a˜o define:
Quais campos uma instruc¸a˜o possui;
Qual o significado de cada campo.
Exemplos de formatos comuns de instruc¸o˜es de ma´quina:
6 / 71
Formato das Instruc¸o˜es
Exemplo: add reg0, reg1, reg2
Tamanho da instruc¸a˜o: nu´mero de bits da instruc¸a˜o:
Em alguns computadores, todas as instruc¸o˜es possuem o mesmo
tamanho (MIPS);
Em outros, existem instruc¸o˜es de tamanhos diferentes (Intel).
Relac¸a˜o entre tamanho da instruc¸a˜o e tamanho da palavra do
computador:
Instruc¸o˜es podem ter o mesmo tamanho da palavra, ou ser menor ou
maior que a palavra;
Em geral tamanho da instruc¸a˜o e´ mu´ltiplo do tamanho da palavra ou
vice-versa.
7 / 71
Formato das Instruc¸o˜es
Exemplos:
Instruc¸o˜es de tamanho fixo, igual ao tamanho da palavra:
Enderec¸o MP
0 instruc¸a˜o
1 instruc¸a˜o
2 instruc¸a˜o
... ...
<——————>
tamanho da palavra
8 / 71
Formato das Instruc¸o˜es
Exemplos:
Instruc¸o˜es de tamanho fixo, menor que o tamanho da palavra:
Enderec¸o MP
0 instruc¸a˜o instruc¸a˜o instruc¸a˜o instruc¸a˜o
1 instruc¸a˜o instruc¸a˜o instruc¸a˜o instruc¸a˜o
2 instruc¸a˜o instruc¸a˜o instruc¸a˜o instruc¸a˜o
... ... ... ... ...
<——————>
tamanho da palavra
9 / 71
Formato das Instruc¸o˜es
Exemplos:
Instruc¸o˜es de tamanho fixo, maior que o tamanho da palavra:
Enderec¸o MP
0 instruc¸a˜o
1
2 instruc¸a˜o
3
4 instruc¸a˜o
5
... ...
<——————>
tamanho da palavra
10 / 71
Formato das Instruc¸o˜es
Exemplos:
Instruc¸o˜es de tamanhos diferentes, maiores ou iguais que o tamanho
da palavra:
Enderec¸o MP
0 instruc¸a˜o
1 instruc¸a˜o
2
3 instruc¸a˜o
4
5
... ...
<——————>
tamanho da palavra
11 / 71
Formato das Instruc¸o˜es
Exemplos:
Instruc¸o˜es de tamanhos diferentes, menores ou iguais que o tamanho
da palavra:
Enderec¸o MP
0 instruc¸a˜o instruc¸a˜o instruc¸a˜o instruc¸a˜o
1 instruc¸a˜o instruc¸a˜o
2 instruc¸a˜o
2 instruc¸a˜o instruc¸a˜o instruc¸a˜o
... ... ... ... ...
<——————>
tamanho da palavra
12 / 71
Formato das Instruc¸o˜es
Instruc¸o˜es de ma´quina podem ser classificadas quanto ao nu´mero de
operandos que elas indicam explicitamente (em seus campos
operando).
Em geral, as instruc¸o˜es possuem 0, 1, 2 ou 3 operandos.
Instruc¸o˜es sem operandos;
Instruc¸o˜es com 1 operando;
Instruc¸o˜es com 2 operandos;
Instruc¸o˜es com 3 operandos.
13 / 71
Formato das Instruc¸o˜es
Algumas instruc¸o˜es possuem nos campos operando, enderec¸os da
memo´ria principal;
Outras instruc¸o˜es especificam nestes campos, registradores
numerados do processador;
Exemplos:
Instruc¸a˜o que soma 2 palavras da memo´ria principal. Pode ter 2
operandos que indicam o enderec¸o das palavras na memo´ria;
Instruc¸a˜o que soma 2 registradores. Pode ter 2 operandos que indicam
os registradores.
14 / 71
Formato das Instruc¸o˜es
Alguns computadores possuem instruc¸o˜es para operac¸o˜es aritme´ticas
com apenas 1 operando;
Operando especificado na instruc¸a˜o e´ um operando fonte;
Um registrador de propo´sito espec´ıfico do processador, chamado
acumulador (AC), e´ usado como o outro operando, e e´ um operando
fonte e o destino da operac¸a˜o aritme´tica.
15 / 71
Formato das Instruc¸o˜es
A instruc¸a˜o em geral tem o formato:
Formato: opcode fonte
Significado: acumulador := acumulador op fonte.
Alguns computadores possuem instruc¸o˜es para operac¸o˜es aritme´ticas
com 2 operandos;
Um operando e´ fonte e o outro e´ fonte e destino;
A instruc¸a˜o em geral tem o formato:
Formato: opcode destino fonte
Significado: destino := destino op fonte.
16 / 71
Formato das Instruc¸o˜es
Alguns computadores possuem instruc¸o˜es para operac¸o˜es aritme´ticas
com 3 operandos;
2 operandos sa˜o fontes e o outro e´ destino;
A instruc¸a˜o em geral tem o formato:
Formato: opcode destino fonte1 fonte2
Significado: destino := fonte 1 op fonte 2.
Compromisso: tamanho das instruc¸o˜es × capacidade das instruc¸o˜es e
nu´mero de instruc¸o˜es do programa.
17 / 71
Questo˜es de Projeto do Formato das Instruc¸o˜es
No projeto do formato das instruc¸o˜es de um computador, alguns
fatores devem ser considerados;
1 1o Fator ⇒ Tamanho da instruc¸a˜o:
Instruc¸o˜es pequenas (com menos bits) sa˜o mais deseja´veis que
instruc¸o˜es grandes, pois:
Programas com instruc¸o˜es grandes ocupam mais espac¸o na memo´ria
principal;
Instruc¸o˜es, para serem executadas, precisam ser buscadas na memo´ria
principal. Instruc¸o˜es grandes levam mais tempo para serem buscadas.
Tempo de execuc¸a˜o e´ maior.
18 / 71
Questo˜es de Projeto do Formato das Instruc¸o˜es
Continuac¸a˜o ...
1 2o Fator ⇒ Representac¸a˜o das operac¸o˜es:
Deve haver espac¸o suficiente na instruc¸a˜o para representar todas as
operac¸o˜es. Isto e´, o campo opcode deve ser suficiente para representar
todas as diferentes operac¸o˜es;
Exemplo: Computador com 2n operac¸o˜es deve ter instruc¸a˜o de pelo
menos n bits, so´ para representar o campo opcode (fora os campos
operandos).
19 / 71
Questo˜es de Projeto do Formato das Instruc¸o˜es
Continuac¸a˜o ...
1 3o Fator ⇒ Tamanho da instruc¸a˜o e tamanho da palavra:
Tamanho da instruc¸a˜o deve ser mu´ltiplo do tamanho da palavra do
computador ou vice-versa;
Uma instruc¸a˜o deve ocupar um nu´mero integral
de palavras, ou um
nu´mero integral de instruc¸o˜es deve caber em uma palavra;
Se na˜o for assim, desperdic¸ara´ espac¸o nas palavras da memo´ria
principal, ou tera´ instruc¸o˜es cruzando fronteiras de palavras. Tera´ que
ler mais palavras que necessa´rio para buscar as instruc¸o˜es na memo´ria.
Maior tempo de execuc¸a˜o.
20 / 71
Questo˜es de Projeto do Formato das Instruc¸o˜es
Continuac¸a˜o ...
1 4o Fator ⇒ Nu´mero de bits dos campos operandos:
Exemplo:
Memo´ria principal com 216 bytes e enderec¸ada em bytes =⇒
enderec¸os de memo´ria com pelo menos 16 bits;
Memo´ria principal com 216 bytes e enderec¸ada em palavras de 4 bytes
(32 bits) =⇒ memo´ria tera´ 214 palavras =⇒ enderec¸os de memo´ria
com pelo menos 14 bits;
1o Caso: instruc¸a˜o tem campos operandos maiores =⇒ instruc¸a˜o e´
maior =⇒ gasta mais espac¸o na memo´ria principal e tem maior tempo
de execuc¸a˜o;
2o Caso: a instruc¸a˜o e´ menor (mais deseja´vel), pore´m resoluc¸a˜o da
memo´ria e´ menos fina. =⇒ Para trabalhar com dados de 8 ou 16 bits,
e´ necessa´rio extra´ı-los da palavra de 32 bits.
Compromisso entre resoluc¸a˜o de memo´ria fina e enderec¸os curtos.
21 / 71
Operac¸o˜es e Operandos
Computador deve ser capaz de realizar operac¸o˜es aritme´ticas =⇒
instruc¸o˜es aritme´ticas;
Instruc¸o˜es aritme´ticas de MIPS :
Realizam uma u´nica operac¸a˜o;
Possuem sempre exatamente 3 operandos: 2 origens e 1 destino;
Operandos devem ser apenas registradores.
Hardware para um nu´mero varia´vel de operandos e´ mais complicado
que hardware para um nu´mero fixo de operandos;
Formato das instruc¸o˜es aritme´ticas atende filosofia de manter
hardware simples;
Princ´ıpio de projeto 1: Simplicidade favorece regularidade.
22 / 71
Operac¸o˜es e Operandos
Operandos:
Registradores sa˜o operandos;
Registradores tambe´m sa˜o vis´ıveis ao programador;
Processadores possuem nu´mero limitado de registradores.
Operandos de MIPS :
32 registradores de 32 bits cada.
Um nu´mero grande de registradores aumentaria o tempo de ciclo do
clock (pois sinais eletroˆnicos demoram mais para percorrer uma
distaˆncia maior);
Princ´ıpio de projeto 2: Menor e´ mais ra´pido.
23 / 71
Operac¸o˜es e Operandos
Observac¸o˜es:
Princ´ıpios de projeto na˜o sa˜o verdades absolutas: 31 registradores
podem na˜o ser mais ra´pidos que 32;
Compromisso: necessidade de registradores para programas × manter
ciclo do clock curto.
Alguns Registradores do MIPS :
$s0, $s1, $s2, ..., $s7: usados para conter valores de varia´veis do
programa;
$t0, $t1, $t2, ..., $t9: usados para dados tempora´rios.
24 / 71
Instruc¸o˜es Aritme´ticas do MIPS
Relac¸a˜o entre instruc¸o˜es de ma´quina e linguagens de alto n´ıvel:
Compilador associa varia´veis do programa a registradores;
Exemplo de comando em C:
f = (g + h) { (i + j);
Assumindo que o compilador associou f , g , h, i e j aos registradores
$s0, $s1, $s2, $s3 e $s4, respectivamente.
Um compilador C produziria (instruc¸o˜es de ma´quina representadas em
uma notac¸a˜o simbo´lica – linguagem de montagem):
add $t0, $s1, $s2 # $t0 = g + h
add $t1, $s3, $s4 # $t1 = i + j
sub $s0, $t0, $t1 # f = $t0 - $t1
25 / 71
Instruc¸o˜es Aritme´ticas do MIPS
Programa pode possuir muito mais dados do que o nu´mero de
registradores do processador;
Dados do programa sa˜o mantidos na memo´ria principal;
Instruc¸o˜es aritme´ticas do MIPS operam apenas com registradores;
Sa˜o necessa´rias instruc¸o˜es para transferir dados entre memo´ria e
registradores.
26 / 71
Instruc¸o˜es de Transfereˆncia de Dados no MIPS
Devem fornecer o enderec¸o de memo´ria a ser acessado;
Enderec¸amento de memo´ria no MIPS :
Ce´lulas enderec¸a´veis da memo´ria sa˜o bytes;
Enderec¸os de 32 bits =⇒ memo´ria de ate´ 232 bytes =⇒ memo´ria de
ate´ 230 palavras;
Restric¸a˜o de alinhamento de palavras e´ imposta;
Ordenac¸a˜o big-endian de bytes na palavra;
Enderec¸os das palavras sa˜o mu´ltiplos de 4. Enderec¸o da palavra e´ o
enderec¸o do byte mais significativo da palavra.
27 / 71
Instruc¸o˜es de Transfereˆncia de Dados no MIPS
Instruc¸o˜es de transfereˆncia de dados do MIPS :
Enderec¸o de memo´ria a ser acessado e´ dado pela soma de uma
constante e um registrador fornecidos na instruc¸a˜o;
Constante: deslocamento;
Registrador: registrador base.
28 / 71
Instruc¸o˜es de Transfereˆncia de Dados no MIPS
lw registrador1, constante (registrador2)
load word =⇒ lw;
Leˆ palavra da memo´ria, no enderec¸o dado por constante +
registrador2. Armazena palavra no registrador1.
sw registrador1, constante (registrador2)
store word =⇒ sw;
Leˆ palavra do registrador1. Armazena palavra na memo´ria, no
enderec¸o dado por constante + registrador2.
29 / 71
Instruc¸o˜es de Transfereˆncia de Dados no MIPS
Relac¸a˜o entre instruc¸o˜es de ma´quina e linguagens de alto n´ıvel:
Compilador aloca estruturas de dados (como vetores, matrizes,
registros, ...) em posic¸o˜es de memo´ria;
Exemplo de comando em C, onde A e´ um vetor com 100 palavras:
A[9] = h + A[8];
Assumindo que o compilador associou h ao registrador $s2 e o
enderec¸o inicial (enderec¸o base) do vetor A esta´ no registrador $s3;
As instruc¸o˜es de linguagem de montagem correspondentes sa˜o:
lw $t0, 32($s3) # $t0 = A[8]
add $t0, $s2, $t0 # $t0 = h + $t0
sw $t0, 36($s3) # A[9] = $t0.
30 / 71
Instruc¸o˜es de Transfereˆncia de Dados no MIPS
Outro exemplo de comando em C:
g = h + A[i];
Assumindo que o compilador associou g , h e i aos registradores $s1,
$s2 e $s4, respectivamente, e o enderec¸o base do vetor A esta´ no
registrador $s3;
As instruc¸o˜es de linguagem de montagem correspondentes sa˜o:
add $t1, $s4, $s4 # $t1 = 2 * i
add $t1, $t1, $t1 # $t1 = 4 * i
add $t1, $t1, $s3 # $t1 = enderec¸o de A[i]
lw $t0, 0($t1) # $t0 = A[i]
add $s1, $s2, $t0 # g = h + $t0
31 / 71
Instruc¸o˜es de Transfereˆncia de Dados no MIPS
Modos de Enderec¸amento:
Formas das instruc¸o˜es de ma´quina enderec¸arem seus operandos, isto
e´, indicarem onde os seus operandos esta˜o;
Especificam como os bits dos campos operando devem ser
interpretados para indicar onde os operandos da instruc¸a˜o esta˜o;
Em uma linguagem de ma´quina, va´rios modos de enderec¸amento sa˜o
oferecidos.
Enderec¸amento por registrador base somado com deslocamento:
Adequado para acessar elementos em vetores, matrizes e registros;
Registrador conte´m enderec¸o base da estrutura de dados;
Deslocamento seleciona o elemento desejado.
32 / 71
Instruc¸o˜es de Transfereˆncia de Dados no MIPS
Nas instruc¸o˜es de transfereˆncia de dados, registrador era
originalmente utilizado para conter um ı´ndice de um vetor (ou matriz)
e o deslocamento continha o enderec¸o inicial da estrutura de dados;
Registrador era chamado de registrador de ı´ndice;
Atualmente, a memo´ria e´ muito grande, logo o enderec¸o inicial de
uma estrutura de dados e´ colocado em um registrador, pois na˜o
caberia no campo deslocamento da instruc¸a˜o.
Programa possui muito mais varia´veis do que o nu´mero de
registradores do processador;
Compilador:
Tenta manter varia´veis mais utilizadas nos registradores;
Mante´m varia´veis restantes na memo´ria;
Usa loads e stores para mover varia´veis entre registradores e memo´ria.
33 / 71
Instruc¸o˜es de Transfereˆncia de Dados no MIPS
Registradores × memo´ria:
Acesso a um dado na memo´ria e´ mais lento que acesso a um dado em
um registrador;
Dado em um registrador pode ser usado como operando por uma
instruc¸a˜o aritme´tica. Logo, e´ mais u´til. Dado na memo´ria na˜o pode;
Para obter um bom desempenho, compilador deve usar registradores
eficientemente.
34 / 71
Arquitetura MIPS
Operandos
Nome Exemplo Observac¸a˜o
32 registradores $s0, $s1, ... Ra´pido acesso para dados.
de 32 bits. $t0, $t1, ... Dado deve estar em registrador
para realizac¸a˜o
de operac¸o˜es aritme´ticas.
230 palavras Memo´ria[0], Acessada somente por instruc¸o˜es de
de memo´ria Memo´ria[4], ... transfereˆncia de dados. Enderec¸ada por
Memo´ria[4294967292] bytes. Enderec¸o de palavra e´
mu´ltiplo de 4.
35 / 71
Arquitetura MIPS
Linguagem de Montagem
Categoria Instruc¸a˜o Exemplo Significado
Aritme´tica
add add $s1, $s2, $s3 $s1 = $s2 + $s3
subtract sub $s1, $s2, $s3 $s1 = $s2 - $s3
Transfereˆncia load word lw $s1, 100($s2) $s1 = Memo´ria[$s2 + 100]
de Dados store word sw $s1, 100($s2) Memo´ria[$s2 + 100] = $s1
36 / 71
Instruc¸o˜es para Comparac¸a˜o e Desvio
Computador deve poder executar diferentes instruc¸o˜es, dependendo
de valores calculados;
Alterar o fluxo de controle do programa, de acordo com condic¸o˜es;
Instruc¸o˜es de desvio condicional (conditional branches).
Instruc¸o˜es de desvio condicional do MIPS :
beq register1, register2, ro´tulo
branch if equal =⇒ beq;
Se registrador1 = registrador2 enta˜o desvia para instruc¸a˜o cujo
enderec¸o e´ representado por ro´tulo.
bne register1, register2, ro´tulo
branch if not equal =⇒ bne;
Se registrador1 6= registrador2 enta˜o desvia para instruc¸a˜o cujo
enderec¸o e´ representado por ro´tulo.
37 / 71
Instruc¸o˜es para Comparac¸a˜o e Desvio
Relac¸a˜o entre instruc¸o˜es de ma´quina e linguagens de alto n´ıvel:
Trecho de co´digo em C:
if (i != j)
f = g + h;
f = f - i;
Assumindo que o compilador associou f , g , h, i , j aos registradores
$s0 a $s4;
As instruc¸o˜es de linguagem de montagem correspondentes podem ser:
beq $s3, $s4, fim if # Se i = j desvia p/ fim if
add $s0, $s1, $s2 # f = g + h
fim if: sub $s0, $s0, $s3 # f = f - i
38 / 71
Instruc¸o˜es para Comparac¸a˜o e Desvio
Instruc¸o˜es de desvio incondicional (unconditional branches):
Alteram o fluxo de controle do programa, incondicionalmente.
Instruc¸o˜es de desvio incondicional do MIPS :
j ro´tulo
jump =⇒ j ;
Desvia para instruc¸a˜o cujo enderec¸o e´ representado por ro´tulo.
Relac¸a˜o entre instruc¸o˜es de ma´quina e linguagens de alto n´ıvel:
Trecho de co´digo em C:
if (i == j)
f = g + h;
else
f = g - h;
39 / 71
Instruc¸o˜es para Comparac¸a˜o e Desvio
Assumindo que o compilador associou f , g , h, i , j aos registradores
$s0 a $s4;
As instruc¸o˜es de linguagem de montagem correspondentes podem ser:
bne $s3, $s4, senao # Se i != j desvia para senao;
add $s0, $s1, $s2 # f = g + h
j fim if # Desvia para fim if
senao: sub $s0, $s1, $s2 # f = g - h
fim if:
40 / 71
Instruc¸o˜es para Comparac¸a˜o e Desvio
Outro trecho de co´digo em C:
while (A[i] == k)
i = i + j;
Assumindo que o compilador associou i , j , k aos registradores $s3 a
$s5 e o enderec¸o base do vetor A esta´ no registrador $s6.
As instruc¸o˜es de linguagem de montagem correspondentes podem ser:
loop: add $t1, $s3, $s3 # $t1 = 2*i
add $t1, $t1, $t1 # $t1 = 4*i
add $t1, $t1, $s6 # $t1 = enderec¸o de A[i]
lw $t0, 0($t1) # $t0 = A[i]
bne $t0, $s5, fim # Se A[i] != k desvia para fim
add $s3, $s3, $s4 # i = i + j
j loop # Desvia para loop
fim:
41 / 71
Instruc¸o˜es para Comparac¸a˜o e Desvio
Testes mais frequentes sa˜o de igualdade e desigualdade: beq e bne;
Algumas vezes e´ necessa´rio comparar se uma varia´vel e´ menor que
outra.
Instruc¸a˜o de comparac¸a˜o do MIPS :
slt register1, register2, register3
set on less than =⇒ slt;
Se register2 < register3 enta˜o register1 = 1. Sena˜o, register1 = 0.
Registrador $zero possui sempre valor 0;
Usando slt, beq, bne e $zero pode-se criar todas condic¸o˜es
relacionais (=, 6=, <, <=, >, >=).
42 / 71
Instruc¸o˜es para Comparac¸a˜o e Desvio
Relac¸a˜o entre instruc¸o˜es de ma´quina e linguagens de alto n´ıvel:
Trecho de co´digo em C:
if (a >= b)
Assumindo que o compilador associou a e b aos registradores $s0 e
$s1;
As instruc¸o˜es de linguagem de montagem correspondentes podem ser:
slt $t0, $s0, $s1 # Se a<b ent~ao $t0=1. Sen~ao $t0=0
bne $t0, $zero, menor # Se $t0 = 0 desvia para menor,
# isto e´, se a < b desvia para
menor
43 / 71
Instruc¸o˜es para Comparac¸a˜o e Desvio
Instruc¸o˜es slt e bne juntas sa˜o equivalentes a branch on less than;
MIPS so´ possui desvios condicionais beq e bne, pois:
Desvios condicionais com comparac¸o˜es de igualdade e desigualdade sa˜o
os mais usados pelos programas;
Outras comparac¸o˜es podem ser feitas combinando-se slt e beq ou
bne;
Instruc¸a˜o branch on less than na˜o e´ implementada pois e´ mais
complicada =⇒ teria CPI maior ou tornaria o ciclo do clock mais
longo;
Comparac¸o˜es mais usadas precisam de apenas uma instruc¸a˜o =⇒
executam mais ra´pido;
Comparac¸o˜es menos usadas precisam de mais de uma instruc¸a˜o,
executam menos ra´pido;
Princ´ıpio de projeto 4: Fac¸a o caso comum ra´pido.
44 / 71
Instruc¸o˜es para Comparac¸a˜o e Desvio
Instruc¸o˜es de desvio incondicional do MIPS :
jr register1
jump register =⇒ jr;
Desvia para instruc¸a˜o cujo enderec¸o esta´ contido no registrador
register1.
45 / 71
Instruc¸o˜es para Comparac¸a˜o e Desvio
Relac¸a˜o entre instruc¸o˜es de ma´quina e linguagens de alto n´ıvel:
Trecho de co´digo em C:
switch (k)
{
case 0:
f = i + j;
break;
case 1:
f = g + h;
break;
case 2:
f = g - h;
break;
}
46 / 71
Instruc¸o˜es para Comparac¸a˜o e Desvio
Assumindo que:
O compilador associou f , g , h, i , j , k aos registradores $s0 a $s5;
$t2 conte´m valor igual a 3;
Treˆs palavras consecutivas na memo´ria conteˆm enderec¸os
correspondentes aos ro´tulos L0, L1 e L2, formando uma tabela de
enderec¸os de desvio;
$t4 conte´m enderec¸o inicial desta tabela na memo´ria;
As instruc¸o˜es de linguagem de montagem correspondentes podem ser:
47 / 71
Instruc¸o˜es para Comparac¸a˜o e Desvio
slt $t3, $s5, $zero # Se k<0 ent~ao desvia para fim
bne $t3, $zero, fim
slt $t3, $s5, $t2 # Se k>=3 ent~ao desvia para fim
beq $t3, $zero, fim
add $t1, $s5, $s5 # $t1=2∗k
add $t1, $t1, $t1 # $t1=4∗k
add $t1, $t1, $t4 # $t1=enderec¸o de Tabela Desvio[k]
lw $t0, 0($t1) # $t0=Tabela Desvio[k]
jr $t0 # Desvia para enderec¸o em $t0
L0: add $s0, $s3, $s4 # f=i+j
j fim # Desvia para fim
L1: add $s0, $s1, $s2 # f=g+h
j fim # Desvia para fim
L2: sub $s0, $s1, $s2 # f=g−h
fim:
48 / 71
Representac¸a˜o das Instruc¸o˜es
Bloco ba´sico: sequeˆncia de instruc¸o˜es sem desvios, exceto
possivelmente no fim, e sem instruc¸o˜es destino de desvios, exceto
possivelmente no in´ıcio.
Linguagem de montagem 6= linguagem de ma´quina;
Instruc¸o˜es de montagem: representadas em uma notac¸a˜o simbo´lica;
Instruc¸o˜es de ma´quina: sequeˆncia de bits =⇒ podem ser
representadas como nu´meros inteiros.
49 / 71
Representac¸a˜o das Instruc¸o˜es
Cada parte de uma instruc¸a˜o de ma´quina pode ser considerada como
um nu´mero individual. Instruc¸a˜o e´ formada colocando-se estes
nu´meros lado a lado. Estas partes da instruc¸a˜o sa˜o os campos da
instruc¸a˜o;
Formato da instruc¸a˜o de ma´quina define:
Quantos campos a instruc¸a˜o possui;
Qual o significado de cada campo da instruc¸a˜o;
Quantos bits ha´ em cada campo e quantos bits tem a instruc¸a˜o ao
todo.
50 / 71
Representac¸a˜o das Instruc¸o˜es
Algumas instruc¸o˜es especificam registradores, isto e´, possuem campos
que indicam qual registrador deve ser utilizado;
Deve haver convenc¸a˜o para mapear nomes dos registradores da
linguagem de montagem em nu´meros da linguagem de ma´quina;
MIPS : 32 registradores = 25 registradores =⇒ nu´mero de 5 bits
representa um registrador.
Problema:
Algumas instruc¸o˜es podem precisar de campos pequenos, por exemplo
para especificar registradores do processador.
Exemplo: add $t0, $t1, $t2
3 operandos registradores =⇒ campos de 5 bits.
51 / 71
Representac¸a˜o das Instruc¸o˜es
Outras
instruc¸o˜es podem precisar de campos maiores, por exemplo
para especificar enderec¸os da memo´ria principal;
Exemplo: lw $t0, 32($t1)
Dois operandos registradores e um operando deslocamento;
Campo deslocamento precisa de mais bits.
Conflito: ter todas as instruc¸o˜es do mesmo tamanho × ter um u´nico
formato de instruc¸a˜o.
Princ´ıpio de projeto 3: Um bom projeto requer bons compromissos.
52 / 71
Representac¸a˜o das Instruc¸o˜es
Tamanho das instruc¸o˜es de ma´quina MIPS :
Uma instruc¸a˜o possui 32 bits (uma palavra);
Todas as instruc¸o˜es possuem o mesmo tamanho =⇒ Princ´ıpio de
projeto 1.
Formato das instruc¸o˜es de ma´quina MIPS :
Treˆs formatos diferentes de instruc¸o˜es para diferentes tipos de
instruc¸o˜es =⇒ Princ´ıpio de projeto 3;
Va´rios formatos complica o hardware. Complexidade e´ reduzida
mantendo-se formatos similares =⇒ Princ´ıpio de projeto 1.
53 / 71
Representac¸a˜o das Instruc¸o˜es
Formatos das instruc¸o˜es do MIPS :
Formato R (register): para instruc¸o˜es aritme´ticas (e lo´gicas e outras);
Formato I (immediate): para instruc¸o˜es de transfereˆncia de dados e de
desvio condicional (e instruc¸o˜es aritme´ticas e lo´gicas com dado
imediato);
Formato J (jump): para instruc¸o˜es de desvio incondicional.
54 / 71
Representac¸a˜o das Instruc¸o˜es
Formato R:
op rs rt rd shamt funct
6 bits 5 bits 5 bits 5 bits 5 bits 6 bits
Formato I:
op rs rt address
6 bits 5 bits 5 bits 16 bits
Formato J:
op address
6 bits 26 bits
55 / 71
Representac¸a˜o das Instruc¸o˜es
Campos da instruc¸a˜o do MIPS :
op: Operac¸a˜o ba´sica da instruc¸a˜o (opcode);
rs: Primeiro operando registrador fonte;
rt: Segundo operando registrador fonte;
rd: Operando registrador destino;
shamt: Shift amount;
funct: Seleciona variac¸a˜o da operac¸a˜o determinada por op (function);
address (de 16 bits): Deslocamento ou dado imediato;
address (de 26 bits): Enderec¸o.
Formatos sa˜o diferenciados com base no conteu´do do campo op;
56 / 71
Representac¸a˜o das Instruc¸o˜es
Relac¸a˜o entre linguagem de montagem e linguagem de ma´quina do
MIPS :
$s0 a $s7: mapeados nos registradores 16 a 23;
$t0 a $t7: mapeados nos registradores 8 a 15.
Exemplo: MIPS.
Em linguagem de montagem:
add $t0, $s1, $s2
Em linguagem de ma´quina: Formato R.
Em decimal:
0 17 18 8 0 32
op rs rt rd shamt funct
$s1 $s2 $t0
Em bina´rio, como fica?
57 / 71
Representac¸a˜o das Instruc¸o˜es
Exemplo: MIPS.
Em linguagem de montagem:
lw $t0, 32($s3)
Em linguagem de ma´quina: Formato I.
Em decimal:
35 19 8 32
op rs rt address
$s3 $t0
Em bina´rio, como fica?
58 / 71
Representac¸a˜o das Instruc¸o˜es
Instruc¸o˜es lw e sw determinam enderec¸o de um dado a ser acessado;
Campo address fornece um deslocamento em bytes;
lw e sw podem acessar qualquer palavra dentro de uma regia˜o de
+/− 215 bytes (ou 213 palavras) a partir do enderec¸o base no
registrador rs;
Utilizam enderec¸amento por base ou deslocamento.
59 / 71
Representac¸a˜o das Instruc¸o˜es
Exemplo: MIPS.
Em linguagem de montagem:
beq $s3, $s4, fim if
add $s0, $s1, $s2
fim if: sub $s0, $s0, $s3
Em linguagem de ma´quina: Formato I.
Em decimal:
beq 4 19 20 1
add 0 17 18 16 0 32
sub 0 16 19 16 0 34
Em bina´rio, como fica?
60 / 71
Representac¸a˜o das Instruc¸o˜es
Como:
Instruc¸o˜es beq e bne determinam enderec¸o da instruc¸a˜o para onde
desviar; e
Todas as instruc¸o˜es teˆm sempre o tamanho de uma palavra;
Campo address fornece um deslocamento em palavras;
beq e bne podem desviar para qualquer instruc¸a˜o dentro de uma regia˜o
de +/− 215 palavras (ou 215 instruc¸o˜es) a partir do enderec¸o da
instruc¸a˜o seguinte a beq/bne (isto e´, a partir do enderec¸o PC + 4).
Utilizam enderec¸amento relativo a PC .
61 / 71
Arquitetura MIPS
Resumo
62 / 71
Arquitetura MIPS
Resumo
Formato das instruções
Formato Campos Observação
R op rs rt rd shamt funct Formato de instruções aritméticas
I op rs rt address Formato de instruções de transferência de dados e de desvio 
condicional
J op address Formato de instruções de desvio incondicional
Tamanho dos 
campos
6 5 5 5 5 6 Todas as instruções com mesmo tamanho
63 / 71
Arquitetura MIPS
Resumo
Instruções de máquina
Nome Formato Exemplo em linguagem de montagem Obs
add R add $s1, $s2, $s3 0 18 19 17 0 32
sub R sub $s1, $s2, $s3 0 18 19 17 0 34
lw I lw $s1, 100($s2) 35 18 17 100 1
sw I lw $s1, 100($s2) 43 18 17 100 1
beq I beq $s1, $s2, rotulo 4 17 18 25 2
bne I bne $s1, $s2, rotulo 5 17 18 25 2
slt R slt $s1, $s2, $s3 0 18 19 17 0 42
j J j rotulo 2 2500 3
jr R jr $t1 0 9 0 0 0 8
64 / 71
Arquitetura MIPS
Instruc¸o˜es lw e sw especificam deslocamento (campo address) em
bytes;
Instruc¸o˜es beq e bne especificam deslocamento (campo address) em
palavras;
Enderec¸amento utilizado pela instruc¸a˜o j sera´ explicado mais adiante.
65 / 71
Conclusa˜o
Instruc¸o˜es sa˜o representadas como nu´meros;
Instruc¸o˜es do programa sa˜o armazenadas na memo´ria para serem
acessadas como nu´meros, da mesma forma que os dados do programa;
Memo´ria conte´m instruc¸o˜es e dados do programa sem distinc¸a˜o;
Conceito de programa armazenado (stored-program).
66 / 71
Arquiteturas Alternativas
Alternativa de projeto:
Fornec¸a operac¸o˜es mais poderosas, reduzindo o nu´mero de instruc¸o˜es
executadas;
O risco e´ um tempo de ciclo mais lento e/ou uma CPI mais alta;
“O caminho em direc¸a˜o a` complexidade da operac¸a˜o e´, portanto,
repleto de perigos. Para evitar esses problemas, os projetistas passaram
para instruc¸o˜es mais simples.”
Vejamos (brevemente) o IA-32.
67 / 71
Histo´ria do IA-32
1978: O Intel 8086 e´ anunciado (arquitetura de 16 bits);
1980: O coprocessador de ponto flutuante 8087 e´ acrescentado;
1982: O 80286 aumenta o espac¸o de enderec¸amento para 24 bits;
mais instruc¸o˜es;
1985: O 80386 estende para 32 bits; novos modos de enderec¸amento;
1989-1995: O 80486, Pentium e Pentium Pro acrescentam algumas
instruc¸o˜es (especialmente projetadas para um maior desempenho);
1997: 57 novas instruc¸o˜es MMX sa˜o acrescentadas; Pentium II ;
1999: O Pentium III acrescenta outras 70 instruc¸o˜es (SSE );
2001: Outras 144 instruc¸o˜es (SSE2);
2003: A AMD estende a arquitetura para aumentar o espac¸o de
enderec¸o para 64 bits; estende todos os registradores para 64 bits,
ale´m de outras mudanc¸as (AMD64)
2004: A Intel se rende e abrac¸a o AMD64 (o chama EM64T ) e inclui
mais extenso˜es de m´ıdia;
68 / 71
Visa˜o Geral do IA-32
Complexidade:
Instruc¸o˜es de 1 a 17 bytes de tamanho;
Um operando precisa agir como origem e destino;
Um operando pode vir da memo´ria;
Modos de enderec¸amento complexos, por exemplo, “´ındice base ou
escalado com deslocamento de 8 ou 32 bits”;
Grac¸a salvadora:
As instruc¸o˜es mais usadas na˜o sa˜o dif´ıceis de construir;
Os compiladores evitam as partes da arquitetura que sa˜o lentas;
“O que o 80x86 perde em estilo e´ compensado na quantidade,
tornando-o belo, do ponto de vista apropriado”.
69 / 71
Fim
Fim da Apresentac¸a˜o.
Obrigado – Du´vidas ???
70 / 71
Refereˆncias I
Patterson, D. A. and Hennessy, J. L. Organizac¸a˜o e Projeto de
Computadores: A Interface Hardware/Software. 3a Edic¸a˜o. Rio de
Janeiro, Editora Campus/Elsevier, 2005.
71 / 71

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais