Buscar

Aula3_2013

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

Arquitetura e Organizac¸a˜o de Computadores
Modos de Enderec¸amento
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
6 de junho de 2013
1 / 25
Modos de Enderec¸amento
Formas de especificar onde operandos das instruc¸o˜es esta˜o;
Modos de enderec¸amento do MIPS :
Enderec¸amento por registrador;
Enderec¸amento por base ou deslocamento;
Enderec¸amento imediato;
Enderec¸amento relativo a PC;
Enderec¸amento pseudo-direto.
MIPS possui poucos modos de enderec¸amento;
Em uma instruc¸a˜o, va´rios modos de enderec¸amento podem estar
presentes;
Outros processadores implementam outros modos de enderec¸amento.
2 / 25
Enderec¸amento por Registrador
Operando esta´ em um registrador;
Campo operando da instruc¸a˜o (rs, rt, rd) especifica qual e´ o
registrador;
Exemplo: add $t0, $t1, $t2
op rs rt rd shmnt funct
Registradores
Dado de 32 bits
0
1
31
5 bits
3 / 25
Enderec¸amento por Base ou Deslocamento
Operando esta´ na memo´ria (na a´rea de dados ou na a´rea de pilha);
Enderec¸o do operando na memo´ria e´ obtido somando-se registrador
base (especificado na instruc¸a˜o – rt) com deslocamento constante
(fornecido na instruc¸a˜o – address de 16 bits);
Deslocamento especifica quantos bytes (e na˜o palavras) a partir do
enderec¸o base deve pular;
Exemplo: lw $t0, 32($s0)
4 / 25
Enderec¸amento por Base ou Deslocamento
0
1
Memória
2
3
4
5
6
7
op rs rt immediate
16 bits5 bits
Registrador
+
5 / 25
Enderec¸amento Imediato
O uso de operandos constantes em operac¸o˜es e´ frequ¨ente;
Exemplos:
Avanc¸ar ı´ndice para o pro´ximo elemento de um vetor;
Incrementar contador de um loop;
Avanc¸ar ou recuar $sp na chamada de uma subrotina.
op rs rt immediate
16 bits
Dado constante de 16 bits
6 / 25
Enderec¸amento Imediato
E´ poss´ıvel realizar estas operac¸o˜es com as instruc¸o˜es vistas
inicialmente:
Constante e´ colocada na memo´ria quando programa e´ carregado;
Faz lw para carregar constante da memo´ria para um registrador;
Usa registrador na operac¸a˜o;
Exemplo: Supondo que enderec¸o constante e´ o enderec¸o da constante
4 na memo´ria;
lw $t0, enderec¸o constante($zero) # $t0 = 4
add $sp, $sp, $t0 # $sp = $sp + 4
7 / 25
Enderec¸amento Imediato
Outra soluc¸a˜o:
Oferecer verso˜es das instruc¸o˜es aritme´ticas em que um operando e´ uma
constante;
Constante pode ser positiva ou negativa;
Constante e´ fornecida em um campo dentro da pro´pria instruc¸a˜o
(imediato);
Limitac¸a˜o no nu´mero de bits deste campo;
Limitac¸a˜o nos valores das constantes.
Usa formato I.
Constante de 16 bits =⇒ valor de +/- 215;
Princ´ıpio de projeto 1: mante´m regularidade nos formatos das
instruc¸o˜es.
Princ´ıpio de projeto 4: Fac¸a caso comum ra´pido.
Operandos constantes ocorrem muito frequentemente;
Pegar constante na pro´pria instruc¸a˜o e´ muito mais ra´pido do que
busca´-la na memo´ria com lw;
8 / 25
Instruc¸o˜es com Operandos Imediatos no MIPS
addi registrador1, registrador2, constante
add immediate =⇒ addi;
Registrador1 = registrador2 + constante;
Formato I.
slti registrador1, registrador2, constante
set on less than immediate =⇒ slti;
Se registrador2 < constante enta˜o registrador1 = 1. Sena˜o
registrador1 = 0;
Formato I.
9 / 25
Instruc¸o˜es com Operandos Imediatos no MIPS
Em linguagem de montagem:
addi $sp, $sp, 4
Em linguagem de ma´quina:
Em decimal:
8 29 29 4
op rs rt immediate
$sp $sp
Em bina´rio: ???
Na˜o ha´ instruc¸a˜o subi. Usa addi com constante negativa;
Na˜o usa constante 0. Usa registrador $zero.
Exemplo: bne $t0, $zero, loop
10 / 25
Instruc¸o˜es com Operandos Imediatos no MIPS
Na maioria das vezes constantes sa˜o pequenas e cabem em 16 bits;
Se constante na˜o cabe em 16 bits:
Instruc¸a˜o do MIPS:
lui registrador, constante
load upper immediate =⇒ lui;
Carrega constante de 16 bits (fornecida na pro´pria instruc¸a˜o) nos 16
bits mais significativos de registrador e coloca 0 nos 16 bits menos
significativos de registrador;
Formato I.
11 / 25
Instruc¸o˜es com Operandos Imediatos no MIPS
Exemplo:
Carregar constante de 32 bits em $s0:
0000 0000 0011 1101 0000 1001 0000 0000
lui $s0, 61 # 6110 = 0000 0000 0011 10012
addi $s0, $s0, 2304 # 230410 = 0000 1001 0000 00002
Em linguagem de ma´quina: decimal
lui 15 0 16 61
op rs rt Immediate
Não usado $s0
12 / 25
Enderec¸o Relativo a PC
Usado nas instruc¸o˜es de desvio condicional beq e bne;
Desvios condicionais sa˜o na maioria das vezes para perto (devido aos
loops, ifs, ...);
Enderec¸o para onde desviar e´ a soma de PC com constante (fornecida
na instruc¸a˜o – address de 16 bits).
Observac¸o˜es:
Quando enderec¸o de desvio e´ calculado, PC ja´ foi avanc¸ado para
pro´xima instruc¸a˜o;
Deslocamento e´ relativo a` instruc¸a˜o seguinte ao beq/bne;
Constante fornece nu´mero de palavras (instruc¸o˜es), e na˜o nu´mero de
bytes, a pular para tra´s (constante negativa) ou para frente (constante
positiva) no programa;
PC = PC + 4 + constante * 4.
13 / 25
Enderec¸o Relativo a PC
0
1
Memória
2
3
4
5
6
7
op rs rt immediate
16 bits5 bits
PC
+
00
14 / 25
Enderec¸o Relativo a PC
Quando desvio condicional e´ para longe e deslocamento na˜o cabe em
16 bits:
beq $s0, $s1, longe
Montador transforma em:
bne $s0, $s1, perto
j longe
perto: ...
15 / 25
Enderec¸amento Pseudo-Direto
Chamada de subrotina (jal) na˜o necessariamente e´ para perto;
Na˜o pode usar enderec¸amento relativo a PC . Precisa de enderec¸o
mais longo;
Formato J.
0
1
Memória
2
3
4
5
6
7
op rs rt immediate
16 bits5 bits
PC
+
00
16 / 25
Enderec¸amento Pseudo-Direto
Formato J:
Instruc¸o˜es teˆm sempre o tamanho de uma palavra;
MIPS impo˜e restric¸a˜o de alinhamento de palavras;
Toda instruc¸a˜o comec¸a em um enderec¸o mu´ltiplo de 4;
Campo address de 26 bits:
Representa enderec¸o de palavra (instruc¸a˜o) e na˜o de byte;
Representa enderec¸o de byte de 28 bits, onde 2 bits menos
significativos sa˜o 00;
Enderec¸o de memo´ria possui 32 bits;
Faltam 4 bits.
Enderec¸amento pseudo-direto:
Enderec¸o para onde desviar e´ obtido concatenando-se 4 bits mais
significativos do PC com 26 bits fornecidos na instruc¸a˜o e com 00.
Observac¸o˜es:
Quando enderec¸o de desvio e´ calculado, PC ja´ foi avanc¸ado para
pro´xima instruc¸a˜o.
17 / 25
Enderec¸amento Pseudo-Direto
Instruc¸o˜es j e jal substituem 28 bits menos significativos de PC ,
deixando 4 bits mais significativos inalterados;
Se ha´ no programa um desvio cruzando uma barreira de 228 = 256
Mbytes (ou 226 = 64 M palavras ou instruc¸o˜es), j deve ser
substitu´ıdo por jr.
18 / 25
Representac¸a˜o de Caracteres e Strings
Maioria dos computadores usa 1 byte para representar 1 caracter,
usando o co´digo ASCII (American Standard Code for Information
Interchange).
Instruc¸o˜es de transfereˆncia de dados para bytes do MIPS :
lb registrador1, deslocamento(registrador2)
load byte =⇒ lb;
Leˆ um byte da memo´ria, do enderec¸o obtido pela soma de
registrador2 com deslocamento;
Byte lido e´ colocado nos 8 bits menos significativos de registrador1;
Formato I ;
Exemplo: lb $t0, 32($s0)
19 / 25
Representac¸a˜o de Caracteres e Strings
Instruc¸o˜es de transfereˆncia de dados para bytes do MIPS :
sb registrador1, deslocamento(registrador2)
store byte =⇒ sb;
Escreve um byte na memo´ria, no enderec¸o obtido pela soma de
registrador2 com deslocamento;
Byte escrito e´ obtido dos 8 bits menos significativos de registrador1;
Formato I ;
Exemplo: sb $t0, 32($s0)
20 / 25
Representac¸a˜o
de Caracteres e Strings
Poderia usar lw e sw para trabalhar com bytes, juntamente com
outras instruc¸o˜es para extrair e montar bytes em uma palavra;
String : sequ¨eˆncia com nu´mero varia´vel de caracteres;
Treˆs formas de representar strings:
Primeira posic¸a˜o da string e´ reservada para conter o tamanho (nu´mero
de caracteres) dela;
Uma varia´vel associada a` string conte´m o tamanho da string (como
uma estrutura);
U´ltima posic¸a˜o da string conte´m um caracter especial que indica o fim
da string. (Soluc¸a˜o usada pelo C. Caracter especial e´ null, de co´digo
ASCII 0.)
21 / 25
Representac¸a˜o de Caracteres e Strings
Exemplo:
String “ABC”;
Usando a terceira forma, string possui 4 bytes com os valores do
co´digo ASCII : 65, 66, 67, 0.
MIPS respeita restric¸a˜o de alinhamento de palavras na memo´ria;
Compilador aloca uma palavra (4 bytes) na memo´ria para uma varia´vel
char (apesar de precisar de apenas 1 byte);
Para uma varia´vel string, compilador aloca 4 caracteres por palavra, em
um nu´mero integral de palavras.
22 / 25
Representac¸a˜o de Caracteres e Strings
Unicode:
Codificac¸a˜o dos caracters de quase todas as l´ınguas;
Utiliza 16 bits para representar um caracter;
Instruc¸o˜es de transfereˆncia de dados para dados de 16 bits (half
word) do MIPS :
load half word =⇒ lh;
store half word =⇒ sh.
23 / 25
Fim
Fim da Apresentac¸a˜o.
Obrigado – Du´vidas ???
24 / 25
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.
25 / 25

Teste o Premium para desbloquear

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

Outros materiais

Materiais relacionados

Perguntas relacionadas

Materiais recentes

7 pág.

Perguntas Recentes