Вы находитесь на странице: 1из 27

Registradores na Arquitetura MIPS

29/4/2016 MIPS - Instruction Set Architecture 1


Mapa de Memria da Arq. MIPS

2 GB

2 GB 256 MB 64 KB

2 GB 64 KB
256 4 MB

4 MB

29/4/2016 MIPS - Instruction Set Architecture 2


Intrues MIPS em Assembly

HIGH LEVEL ASSEMBLY ASSEMBLY WITH REGISTERS


LANGUAGE CODE
a=b+c add a, b, c # $s0 = a, $s1 = b, $s2 = c
add $s1, $s2, $s3
a=b-c sub a, b, c # $s0 = a, $s1 = b, $s2 = c
sub $s1, $s2, $s3
a=b + c - d sub t, c, d # $s0 = a, $s1 = b,$s2 = c, $s3 = c
add a, b, t sub $t0, $s2, $s3
add $s0, $s1, $t0

29/4/2016 MIPS - Instruction Set Architecture 3


Transferncia de Dados Mem Reg
lw $s0, off($s1)
Carrega o registrador $s0 com o contedo do
endereo formado por contedo de $s1 + off

sw $s0, off($s1)
Armazena o contedo do registrador $s0 no
endereo formado por contedo de $s1 + off

MIPS opera com words ( = 4 bytes) alinhados


na memria. Por isso off($nn) deve ser mlti-
plo de 4
29/4/2016 MIPS - Instruction Set Architecture 4
Little x Big Endian
Contedo da Memria MIPS pode ser configurada para operar
Endereo Dados com endereamento Big ou Little Endian.
7 F0 h
6 DE h Aps a execuo de lw $s0, 4($0)
5 BC h
4 9A h
3 78 h
Se o endereamento for Big Endian:
2 56 h $s0 = 0x9ABCDEF0
1 34 h
0 12 h Se o endereamento for Little Endian:
$s0 = 0xF0DEBC9A

29/4/2016 MIPS - Instruction Set Architecture 5


Acesso a Bytes na Memria
As instrues lb $nn, off($mm) e sb $nn, off($mm) operam de
forma anloga a lw e sw, porm acessando um nico byte.
O byte menos significativo de $nn transferido da ou para a
memria. O deslocamento off no precisa ser mltiplo de 4.
Supondo que o contedo de $s0 seja 0x23456789, qual ser
seu contedo aps a execuo das duas instrues abaixo no
caso de endereamento Little Endian e no caso de Big Endian?
sw $s0, 1($0)
lb $s0, 1($0)

BE: $s0 = 0x00000045


LE: $s0 = 0x00000067

29/4/2016 MIPS - Instruction Set Architecture 6


Acesso a Bytes signed/unsigned
A instruo lb $nn, off($mm) considera o byte acessado como
estando no formato com sinal. Para acesso a bytes sem sinal
deve-se utilizar a instruo lbu $nnn, off($mm).

No exemplo acima, lbu preenche os bits 31:8 de $s1 com zeros.


J lb preenche os bits 31:8 de $s2 com sinal, que negativo.
A instruo sb desconsidera o valor dos bits 31:8 de $s3.
29/4/2016 MIPS - Instruction Set Architecture 7
Constantes e Operandos Imediatos

HIGH LEVEL ASSEMBLY CODE ASSEMBLY WITH REGISTERS AND


LANGUAGE IMMEDIATES
a=a+4 addi a, a, 4 # $s0 = a
addi $s0, $s0, 4
a = a - 12 addi a, a, -12 # $s0 = a
addi $s0, $s0, -12

29/4/2016 MIPS - Instruction Set Architecture 8


Linguagem de Mquina
A Arquitetura MIPS codifica todas as instrues em 32 bits.

H apenas 3 padres de codificao de instrues:

R para instrues com operandos tipo registradores

I para instrues com operandos imediatos

J para instrues de saltos incondicionais (jump)

29/4/2016 MIPS - Instruction Set Architecture 9


Instrues tipo R
Instrues tipo R seguem o padro: funct rd, rs, rt
rd = registrador de destino
rs = primeiro registrador de origem (source register)
rt = segundo registrador de origem (letra t segue a letra s).
funct determina o tipo de operao add, sub, etc.
Em linguagem de mquina, a sequncia de registradores
diferente veja os exemplos abaixo:

O campo shamt shift amount usado apenas para shifts


29/4/2016 MIPS - Instruction Set Architecture 10
Instrues tipo I
Instrues tipo I seguem o padro: op rt, rs, imm
rt = registrador de destino (ou 2 de origem)
rs = registrador de origem (source register)
imm = constante imediata (16 bits)
op determina o tipo de operao addi, lw, etc.
veja alguns exemplos abaixo:

29/4/2016 MIPS - Instruction Set Architecture 11


Instrues tipo J
Instrues tipo J seguem o padro: op imm
Imm = especifica bits 27:2 do endereo de destino do salto (JTA)
op determina o tipo de salto incondicional j, jal.
veja o exemplo para jal (= jump and link) abaixo:

JTA o Jump Target Address, formado pela seguinte regra:


bits 31:28 = bits 31:28 do PC+4, bits 27:2 = imm, bits 1:0 = 00
29/4/2016 MIPS - Instruction Set Architecture 12
Intrues de desvio condicional
MIPS suporta duas instrues de desvio (branch) condicional:
beq branch if equal bne branch if not equal

Ambas so instrues do tipo I (immediate)

beq rs, rt, imm bne rs, rt, imm

Se rs == rt salta para Se rs != rt salta para


endereo especificado endereo especificado
por imm (BTA). por imm (BTA).
O endereo de destino BTA (Branch Target Address) obtido
a partir de imm e de PC + 4 da seguinte forma:
BTA = PC + 4 + SE(imm) x 4 (SE = Sign Extended)
Esse endereamento chamado de PC-Relative Addressing
29/4/2016 MIPS - Instruction Set Architecture 13
Intrues de desvio condicional

PC
PC + 4
PC + 8

PC + 12

No exemplo acima, BTA = PC + 12, portanto imm = 2


BTA = PC + 4 + SE(imm) x 4 = PC + 4 + 2 x 4 = PC + 12
beq $s0 $s1 imm
Cdigo de mquina: 4 16 17 2
6 bits 5 bits 5 bits 16 bits
29/4/2016 MIPS - Instruction Set Architecture 14
Desvio incondicional com jr
A instruo jr (jump register) no do tipo J.
jr do tipo R e utiliza um registrador de origem rs.

op rs rt rd shamt funct
Cdigo de mquina: 0 16 x x x 8
6 bits 5 bits 5 bits 5 bits 5 bits 6 bits
29/4/2016 MIPS - Instruction Set Architecture 15
Chamada de Funes (MIPS)

Argumentos em $a0 - $a3 Valores retornados em $v0 - $v1


jal coloca endereo de retorno em $ra jr $ra retorna da funo
29/4/2016 MIPS - Instruction Set Architecture 16
Salvamento de registradores usados
No exemplo anterior diffofsums fez uso de $s0, $t0 e $t1
Caso a funo chamadora (main) fizesse uso desses registradores,
seu contedo seria perdido.
Portanto diffosums deveria preservar $s0, $t0 e $t1 armazenando-
os na pilha e restaurando-os depois:

antes da execuo durante a execuo aps a execuo


de diffofsums de diffofsums de diffofsums
29/4/2016 MIPS - Instruction Set Architecture 17
Salvamento de registradores usados

29/4/2016 MIPS - Instruction Set Architecture 18


Salvamento de registradores usados
A verso anterior de diffofsums pode ser ineficiente, ao salvar
registradores que a funo chamadora no utiliza.

Para minimizar esse problema, a arquitetura MIPS divide os re-


gistradores em duas classes: preservados e no preservados.

Por ex. $s0 $s7 so da classe preservados da seu nome saved


j $t0 $t9 so no preservados da seu nome temporaries.

Registradores preservados devem ser obrigatoriamente salvos


pela funo chamada. J os no preservados no. Caso a fun-
o chamadora faa uso de registradores no preservados, de-
ver salv-los antes de chamar outra funo.
Veja na prxima transparncia qual a classe de cada registrador.
29/4/2016 MIPS - Instruction Set Architecture 19
Salvamento de registradores usados
A tabela abaixo indica quais os registradores preservados e quais
os no preservados:

Utilizando essa conveno, a funo diffofsums no precisa mais


preservar $t0 e $t1, apenas $s0 (veja prxima transparncia).
Caso main faa uso de $t0 e $t1, dever salv-los antes de chamar
diffofsums.
29/4/2016 MIPS - Instruction Set Architecture 20
Salvamento de registradores usados

29/4/2016 MIPS - Instruction Set Architecture 21


Argumentos Adicionais e Var. Locais
Caso seja necessrio passar mais do que 4 argumentos para uma
funo, os primeiros 4 vo via $a0-$a3, os demais na pilha.

Se a funo chamada fizer


uso de registradores pre-
servados, ou chamar ou-
tra funo passando par-
metros em $a0-$a3, estes
devero tambm ser sal-
vos na pilha.

Variveis locais so aloca-


das na pilha logo aps os
Pilha antes da chamada Pilha depois da chamada registradores salvos.
da funo. da funo.
29/4/2016 MIPS - Instruction Set Architecture 22
Modos de Endereamento (MIPS)
Register-Only Addressing: endereo de todos os operandos de ori-
gem e destino contidos em registradores. Usado por todas as ins-
trues tipo R.
Immediate Addressing: utiliza o campo imm de 16 bits, em con-
junto com registradores para o endereamento. Usado por certas
instrues tipo I como addi ou lui.
Base Addressing: usado por instrues de acesso memria como
lw e sw. Endereo efetivo = Contedo de rs + SE(imm).
PC-Relative Addressing: usado na determinao do destino de sal-
to em instrues de desvio condicional (branches).
BTA (Branch Target Address) = PC + 4 + SE(imm) x 4
Pseudo-Direct Addressing: usado na determinao do destino de
salto em instrues tip J (j e jal).
JTA (Jump Target Address) utiliza 4 bits de PC e addr x 4
29/4/2016 MIPS - Instruction Set Architecture 23
Pseudo Instrues
Como MIPS uma arquitetura RISC, muitas instrues que se po-
deria imaginar importantes no esto disponveis, pois podem ser
implementadas por uma sequncia de instrues disponveis:

Essas instrues so chamadas de pseudo-instrues


29/4/2016 MIPS - Instruction Set Architecture 24
Exemplo: pseudo inst beq $t0,imm,dst
A instruo compara o contedo de $t0 com o valor imm e salta
para dst e ambos forem iguais. O Assembler utiliza o registrador
$at (assembler temporary) para implementar imm:

Outro exemplo a instruo la reg, addr (load address into reg).


Veja, no simulador MARS, no programa Fibonacci, como o Assem-
bler implementou a instruo la $s0, fibs.
29/4/2016 MIPS - Instruction Set Architecture 25
Excees
MIPS utiliza um nico vetor para tratamento de excees, locali-
zado em um endereo em 0x80000180 (2 GB da memria).
A rotina de tratamento, nesse endereo, obtm a causa da ex-
ceo via um registrador especial, denominado Cause.

O endereo de retorno armazenado em outro registrador espe-


cial, denominado EPC (Exception Program Counter).
29/4/2016 MIPS - Instruction Set Architecture 26
Excees
Os registradores especiais Cause e EPC no fazem parte do conjun-
to de registradores de uso geral do MIPS (register file).
Esses registradores ficam em uma unidade chamada Coprocessor 0
tambm conhecida como MIPS processor control, e so acessados
por meio da instruo mfc0 rd, reg (move from coprocessor 0).

As instrues syscall e break, tambm causam uma exceo. Nes-


se caso a rotina de tratamento, aps salvar os registradores,
obtm o valor de EPC com mfc0 e examina o cdigo para diferen-
ciar entre um breakpoint e uma chamada de sistema.
Para retornar, a rotina de tratamento de excees executa o cdigo
mfc0 $k0, EPC
jr $k0
29/4/2016 MIPS - Instruction Set Architecture 27

Вам также может понравиться