Sie sind auf Seite 1von 86

Arquitetura e Organizao de

Computadores
MIPS

Arquitetura MIPS
Microprocessor without Interlocked Pipeline Stages
Os processadores MIPS so usados em aplicaes tais como:
Computadores da Silicon Graphics;
muitos sistemas embarcados;
Dispositivos com Windows CE;
Roteadores da Cisco
Videogames como Nintendo 64 e Playstation.

Arquitetura MIPS
Curiosidades:
Super Mario 64 (1996):
O coelho nomeado MIPS em homenagem ao processador usado no sistema Nintendo 64.

Locked up and abandoned in the basement of Peachs castle


in Super Mario 64, MIPS hops around, sad and lonely, looking
for any form of companionship. When Mario finally runs into
him, the confused bunny just runs away. At least when MIPS is
finally caught he rewards Mario with a helpful star

Arquitetura MIPS
Arquitetura RISC (Reduced Instruction Set Computer)
Em meados de 1990s
Estimou-se que um em cada trs microprocessadores RISC era MIPS.
Influenciou processadores tais como o SPARC da Sun e Alpha.

Crescimento dos Processadores


1400

Linguagem de Mquina
MIPS Instruction Set Architecture (ISA).

Similar a outras arquiteturas desenvolvidas


na dcada de 80.
Quase 100 milhes de processadores MIPS
foram fabricados em 2002.
Usado por NEC, Nintendo, Cisco, Silicon
Graphics, Sony,

1300
1200
1100
1000
900
800

Other
SPARC
Hitachi SH
PowerPC
Motorola 68K
MIPS
IA-32
ARM

700
600
500
400
300
200
100
0
1998

1999

2000

2001

2002

2004 Morgan Kaufman Publishers

Arquitetura MIPS
Arquitetura RISC (Reduced Instruction Set Computer)
Tipos de Dados:
Instrues esto formatadas em 32 bits.
Byte(8 bits), meia palavra (2 bytes), palavra (4 bytes)

Um caractere necessita de 1 byte de memria.


Um inteiro necessita de 1 palavra de memria (4 bytes).
Ex: .word (endereos de memria e inteiros)
.byte
.space xx

Arquitetura MIPS
Arquitetura RISC (Reduced Instruction Set Computer)
Valor dos dados:
Nmeros so literalmente representados. e.g. 4
Caractere deve estar entre aspas simples. e.g. 'b'
String devem estar entre aspas duplas. e.g. "A string"

Registradores - MIPS
Registradores:
32 registradores de propsito geral.
Registradores so precedidos por $ na instruo de linguagem de mquina.
Duas formas de enderear os registradores:
Usando o nmero do registrador. Ex: $0 - $31.
Usando o nome alternative (macros). Ex: $t, $sp
Registradores especiais Lo e Hi so utilizados para armazenar a multiplicao e diviso.
No so diretamente endereveis. Contedo acessado atravs de instrues
especiais mfhi(move from Hi) and mflo(move from Lo).

Registradores - MIPS

Syscall- MIPS
Servios do sistemas (Entrada/Sada) esto disponveis:
Servio
Imprime inteiro
Imprime float
Imprime double
Imprime String
L inteiro
L float
L double

$v0
Argumentos
Resultado
1 $a0 = Inteiro a imprimir
2 $f12 = float a imprimir
3 $f12 = double a imprimir
4 $a0 = Endereo da string
$v0 contem o valor inteiro lido
5
$f0 contem o valor float lido
6
$f0 contem o valor double lido
7

L string

Sair

10

$a0 = Endereo da string


$a1 = Nmero mximo de caracteres para ser lido.
Finaliza a execuo
Para mais servios: http://courses.missouristate.edu/kenvollmar/mars/help/syscallhelp.html

Syscall- MIPS
Para setar o valor de $v0:
# load immediate value
li $v0, (valor da constante)
Para setar o valor de $a0 para strings:
# load address from the memory
la $a0, (label da memria)

Para mais servios: http://courses.missouristate.edu/kenvollmar/mars/help/syscallhelp.html

Estrutura do Programa - MIPS


Arquivo texto com declarao dos dados e do cdigo do programa.
Declarao dos Dados
Identificado atravs da diretiva .data
Responsvel por declarar os nomes das variveis usadas nos programas.
Armazenamento alocado na memria principal (RAM).
Declarao dos cdigo
Identificado atravs da diretiva .text
Contm as instrues do programa.
Dever utilizar chamadas de sada do sistema (exit system call).
Cada linha da linguagem pode conter apenas uma instruo.

Estrutura do Programa - MIPS


Comentrios:
Qualquer coisa seguinda de #. Ex:
# essa linha de cdigo ser interpretada como um comentrio.

Declaraes de dados - MIPS


Formato para declarao dos dados e criao de rtulos:
nomeDoRotulo:

tipo_de_dados

valor

Armazena a varivel de um determinado tipo de dado com um nome e um valor especfico.

Arquitetura e Organizao de
Computadores
HELLO WORLD MIPS

Hello World em MIPS


Vamos escrever um primeiro programa em MIPS:
#Nessa parte do cdigo, devemos declarar todas as variveis
que teremos na memria.

Hello World em MIPS


Vamos escrever um primeiro programa em MIPS:
#Nessa parte do cdigo, devemos declarar todas as variveis
que teremos na memria.
.data

Hello World em MIPS


Vamos escrever um primeiro programa em MIPS:
#Nessa parte do cdigo, devemos declarar todas as variveis que teremos
na memria.
.data
#Vamos criar um rtulo para armazenar uma string. O que uma
string?

Hello World em MIPS


Vamos escrever um primeiro programa em MIPS:
#Nessa parte do cdigo, devemos declarar todas as variveis que teremos
na memria.
.data
#Vamos criar um rtulo para armazenar uma string. O que uma
string?
msg: .byte 'H','e','l','l','o',' ','W','o','r','l','d, !

Hello World em MIPS


Vamos escrever um primeiro programa em MIPS:
#Nessa parte do cdigo, devemos declarar todas as variveis que teremos na
memria.
.data
#Vamos criar um rtulo para armazenar uma string. O que uma string?
msg: .byte 'H','e','l','l','o',' ','W','o','r','l','d, !
#Agora vamos codificar as instrues

Hello World em MIPS


Vamos escrever um primeiro programa em MIPS:
#Nessa parte do cdigo, devemos declarar todas as variveis que teremos na
memria.
.data
#Vamos criar um rtulo para armazenar uma string. O que uma string?
msg: .byte 'H','e','l','l','o',' ','W','o','r','l','d, !
#Agora vamos codificar as instrues.
.text

Hello World em MIPS


Vamos escrever um primeiro programa em MIPS:
#Nessa parte do cdigo, devemos declarar todas as variveis que teremos na
memria.
.data
#Vamos criar um rtulo para armazenar uma string. O que uma string?
msg: .byte 'H','e','l','l','o',' ','W','o','r','l','d, !
#Agora vamos codificar as instrues.
.text

#Precisamos avisar ao sistema que vamos imprimir uma


usaremos?

string.

O que

Hello World em MIPS


Vamos escrever um primeiro programa em MIPS:
#Nessa parte do cdigo, devemos declarar todas as variveis que teremos na
memria.
.data
#Vamos criar um rtulo para armazenar uma string. O que uma string?
msg: .byte 'H','e','l','l','o',' ','W','o','r','l','d, !

#Agora vamos codificar as instrues.


.text
#Precisamos avisar ao sistema que vamos imprimir uma
usaremos?
li $v0,4

string.

O que

Hello World em MIPS


Vamos escrever um primeiro programa em MIPS:
#Nessa parte do cdigo, devemos declarar todas as variveis que teremos na
memria.
.data
#Vamos criar um rtulo para armazenar uma string. O que uma string?
msg: .byte 'H','e','l','l','o',' ','W','o','r','l','d, !

#Agora vamos codificar as instrues.


.text
#Precisamos avisar ao sistema que vamos imprimir uma string. O que
usaremos?
li $v0,4
#Agora Precisamos atribuir ao registrador $a0 a string que ser impressa.
#Onde a string est armazenada?

Hello World em MIPS


Vamos escrever um primeiro programa em MIPS:
#Nessa parte do cdigo, devemos declarar todas as variveis que teremos na
memria.
.data
#Vamos criar um rtulo para armazenar uma string. O que uma string?
msg: .byte 'H','e','l','l','o',' ','W','o','r','l','d, !

#Agora vamos codificar as instrues.


.text
#Precisamos avisar ao sistema que vamos imprimir uma string. O que
usaremos?
li $v0,4
#Agora Precisamos atribuir ao registrador $a0 a string que ser impressa.
#Onde a string est armazenada? MEMRIA PRINCIPAL!

Hello World em MIPS


Vamos escrever um primeiro programa em MIPS:
#Nessa parte do cdigo, devemos declarar todas as variveis que teremos na
memria.
.data
#Vamos criar um rtulo para armazenar uma string. O que uma string?
msg: .byte 'H','e','l','l','o',' ','W','o','r','l','d, !

#Agora vamos codificar as instrues.


.text
#Precisamos avisar ao sistema que vamos imprimir uma string. O que
usaremos?
li $v0,4
#Agora Precisamos atribuir ao registrador $a0 a string que ser impressa.
#Onde a string est armazenada? MEMRIA PRINCIPAL! Qual o comando para
transferir o valor da memoria para um registrador?

Hello World em MIPS


Vamos escrever um primeiro programa em MIPS:
#Nessa parte do cdigo, devemos declarar todas as variveis que teremos na
memria.
.data
#Vamos criar um rtulo para armazenar uma string. O que uma string?
msg: .byte 'H','e','l','l','o',' ','W','o','r','l','d, !

#Agora vamos codificar as instrues.


.text
#Precisamos avisar ao sistema que vamos imprimir uma string. O que
usaremos?
li $v0,4
#Agora Precisamos atribuir ao registrador $a0 a string que ser impressa.
#Onde a string est armazenada? MEMRIA PRINCIPAL! Qual o comando para
transferir o valor da memoria para um registrador?
la $a0, msg

Hello World em MIPS


Vamos escrever um primeiro programa em MIPS:
#Nessa parte do cdigo, devemos declarar todas as variveis que teremos na
memria.
.data
#Vamos criar um rtulo para armazenar uma string. O que uma string?
msg: .byte 'H','e','l','l','o',' ','W','o','r','l','d, !

#Agora vamos codificar as instrues.


.text
#Precisamos avisar ao sistema que vamos imprimir uma string. O que
usaremos?
li $v0,4
#Agora Precisamos atribuir ao registrador $a0 a string que ser impressa.
#Onde a string est armazenada? MEMRIA PRINCIPAL! Qual o comando para
transferir o valor da memoria para um registrador?
la $a0, msg
#Agora vamos fazer uma chamada para o sistema.

Hello World em MIPS

#Nessa parte do cdigo, devemos declarar todas as variveis que teremos na


memria.
.data Vamos escrever um primeiro programa em MIPS:
#Vamos criar um rtulo para armazenar uma string. O que uma string?
msg: .byte 'H','e','l','l','o',' ','W','o','r','l','d, !

#Agora vamos codificar as instrues.


.text
#Precisamos avisar ao sistema que vamos imprimir uma string. O que
usaremos?
li $v0,4
#Agora Precisamos atribuir ao registrador $a0 a string que ser impressa.
#Onde a string est armazenada? MEMRIA PRINCIPAL! Como posso transferir
o valor para um registrador?
la $a0, msg
#Agora vamos fazer uma chamada para o sistema.
syscall

Hello World em MIPS

#Nessa parte do cdigo, devemos declarar todas as variveis que teremos na


memria.
.data Vamos escrever um primeiro programa em MIPS:
#Vamos criar um rtulo para armazenar uma string. O que uma string?
msg: .byte 'H','e','l','l','o',' ','W','o','r','l','d, !

#Agora vamos codificar as instrues.


.text
#Precisamos avisar ao sistema que vamos imprimir uma string. O que
usaremos?
li $v0,4
#Agora Precisamos atribuir ao registrador $a0 a string que ser impressa.
#Onde a string est armazenada? MEMRIA PRINCIPAL! Como posso transferir
o valor para um registrador?
la $a0, msg
#Agora vamos fazer uma chamada para o sistema.
syscall
#Vamos indicar o fim do programa.

Hello World em MIPS

#Nessa parte do cdigo, devemos declarar todas as variveis que teremos na


memria.
.data Vamos escrever um primeiro programa em MIPS:
#Vamos criar um rtulo para armazenar uma string. O que uma string?
msg: .byte 'H','e','l','l','o',' ','W','o','r','l','d, !

#Agora vamos codificar as instrues.


.text
#Precisamos avisar ao sistema que vamos imprimir uma string. O que
usaremos?
li $v0,4
#Agora Precisamos atribuir ao registrador $a0 a string que ser impressa.
#Onde a string est armazenada? MEMRIA PRINCIPAL! Como posso transferir
o valor para um registrador?
la $a0, msg
#Agora vamos fazer uma chamada para o sistema.
syscall
#Vamos indicar o fim do programa.
li $v0,10

#Nessa parte do cdigo, devemos declarar todas as variveis que teremos na


memria.
.data
#Vamos criar um rtulo para armazenar uma string. O que uma string?
Vamos.byte
escrever
um primeiro programa em','W','o','r','l','d,
MIPS:
msg:
'H','e','l','l','o','
!

Hello World em MIPS

#Agora vamos codificar as instrues.


.text
#Precisamos avisar ao sistema que vamos imprimir uma string. O que
usaremos?
li $v0,4
#Agora Precisamos atribuir ao registrador $a0 a string que ser impressa.
#Onde a string est armazenada? MEMRIA PRINCIPAL! Como posso transferir
o valor para um registrador?
la $a0, msg
#Agora vamos fazer uma chamada para o sistema.
syscall
#Vamos indicar o fim do programa.
li $v0,10
#chamar o sistema para terminar.

#Nessa parte do cdigo, devemos declarar todas as variveis que teremos na


memria.
.data
#Vamos criar um rtulo para armazenar uma string. O que uma string?
Vamos.byte
escrever
um primeiro programa em','W','o','r','l','d,
MIPS:
msg:
'H','e','l','l','o','
!

Hello World em MIPS

#Agora vamos codificar as instrues.


.text
#Precisamos avisar ao sistema que vamos imprimir uma string. O que
usaremos?
li $v0,4
#Agora Precisamos atribuir ao registrador $a0 a string que ser impressa.
#Onde a string est armazenada? MEMRIA PRINCIPAL! Como posso transferir
o valor para um registrador?
la $a0, msg
#Agora vamos fazer uma chamada para o sistema.
syscall
#Vamos indicar o fim do programa.
li $v0,10
#chamar o sistema para terminar.
syscall

Hello World em MIPS


Vamos rodar no MARS e ver o que acontece...
MARS (MIPS Assembler and Runtime Simulator)

Arquitetura e Organizao de
Computadores
CONJUNTO DE INSTRUES MIPS

MIPS - CONJUNTO DE INSTRUES


Instrues:
So as palavras da linguagem de mquina.

Conjunto de instrues (ISA Instruction Set Architecture):


o vocabulrio da linguagem de mquina.

Objetivo no projeto de construo de microprocessadores:


Encontrar um conjunto de instrues que facilite tanto a construo do hardware quanto a
do compilador e, ao mesmo tempo, maximize a performance e minimize os custos.

MIPS - CONJUNTO DE INSTRUES


MIPS:
Conjunto de instrues (ISA Instruction Set Architecture)
Cada instruo aritmtica executa apenas uma operao.
Minimiza o acesso a memria
S possvel operar registradores.
Precisa sempre referenciar exatamente trs variveis.
Regularidade de Formato
Cada Instruo uma palavra.
Contm OPCode e Argumentos.

MIPS - CONJUNTO DE INSTRUES


MIPS - ISA:
1. A simplicidade favorecida pela regularidade.
2. Quanto menor mais rpido.
3. Um bom projeto demanda compromisso.
4. Faa as ocorrncias frequentes rpidas.

MIPS - CONJUNTO DE INSTRUES


1. Princpio de Projeto: Simplicidade e regularidade.
Ordem dos operandos fixa (destino primeiro).
Exemplo:
C:

a = b + c;

MIPS :

add a, b, c

Claro que dificulta algumas coisas...


Somar B, C, D, E;
Como Armazenar o resultado em A?

MIPS - Instrues Aritmticas


C:

a = b + c + d;

MIPS:

add a, b, c
add a, a, d

Operandos precisam ser Registradores.


So fornecidos 32 registradores.
Cada registrador contm 32 bits.
Ou seja, uma arquitetura de 32 bits.

MIPS - CONJUNTO DE INSTRUES


2. Princpio de Projeto: Quanto menor, mais rpido.
Evita tornar a mquina mais lenta com um grande nmero de registradores no hardware.
Operaes aritmticas ocorrem somente entre valores armazenados em registradores e
referenciados pelas instrues do MIPS.
necessrio que haja instrues de transferncia de dados entre a memria e os
registradores.
Para o caso em que tivermos muitas variveis.

Como fazer para acessar uma palavra na memria?


A instruo de transferncia de dados deve fornecer o endereo na memria da palavra a
ser acessada.
Endereo = ndice

MIPS - CONJUNTO DE INSTRUES


3. Princpio de Projeto: Um bom projeto demanda compromisso.
No MIPS toda as instrues tem o mesmo tamanho (em bits), mas permite formatos
diferentes.

R-TYPE.
I-TYPE.
J-TYPE.

MIPS - CONJUNTO DE INSTRUES


4. Princpio de Projeto: Faa as ocorrncias frequentes rpidas.
Define como gastar os recursos, uma vez que o impacto de realizar
alguma ocorrncia mais rpido maior se a ocorrncia for
frequente.
Ajuda a melhorar o desempenho.
Em geral, os casos mais frequentes so mais simples e podem ser realizados
de maneira mais rpida.
Lei de Amdahl.

MIPS - CONJUNTO DE INSTRUES


4. Princpio de Projeto: Faa as ocorrncias frequentes rpidas.
Lei de Amdahl
Onde:
f - frao da poro melhorada.
s - acelerao da poro melhorada.

MIPS - CONJUNTO DE INSTRUES


4. Princpio de Projeto: Faa as ocorrncias frequentes rpidas.
Lei de Amdahl

Arquitetura e Organizao de
Computadores
ORGANIZAO DA MEMRIA

Organizao da Memria
A indexao por bytes util, porm a maior parte dos tipos de dados usa palavras maiores que 1 byte.
Em MIPS uma palavra contm 32 bits (4 bytes).

Word Addresses

32 bits of data

32 bits of data

32 bits of data

12

32 bits of data

32 bits of data
...

Registers hold 32 bits of data


Use 32 bit address

232 bytes (0 a 232 1 ou 4.294.967.296 de bytes)


230 words (0, 4, 8, ... (232 / 4) ou 1.073.741.824 de palavras)

Organizao da Memria
Visualizamos a memria como um grande e simples array unidimensional
endereado.
O endereo de memria e o ndice do array.
Endereamento de Byte significa o ndice do n-simo byte na memria.
byte 1

Byte 0

32 bit word 8 bits of data


32 bit word 8 bits of data
32 bit word 8 bits of data
32 bit word 8 bits of data
.
8 bits of data
.
. byte 4

byte 2

8 bits of data

8 bits of data

8 bits of data

8 bits of data

8 bits of data

8 bits of data

8 bits of data

8 bits of data

8 bits of data

8 bits of data

8 bits of data

8 bits of data

8 bits of data

8 bits of data

8 bits of data

byte 10

byte 3

MIPS Layout de memria


Ocupa a parte da memria principal.

A seo de memria do endereo 0x10000000 at o


0x7FFFFFFF reservada para o segmento de pilha (stack
segment) e o segmento de dados (data segment).
O ponteiro da pilha ($sp) inicializado com o valor
0x7FFFEFFC .
~1.8 GB para dados.

MIPS Layout da pilha


Segue o comportamento LIFO.

Os dados armazenados tem formato de 32 bits.


Funciona como uma pilha de cabea pra baixo.
Topo: 81
Fundo: -92

O sistema operacional responsvel por uma atribuio de


endereos assim que o programa montado.

MIPS PUSH da pilha


Por conveno, o registrador $sp sempre aponta para o
topo da pilha.
De tal forma que para inserirmos valores na pilha
temos que subtrair o valor de $sp de 4 bytes (32 bits).

MIPS POP da pilha


Para removermos um elemento da pilha temos que
apontar o valor do $sp para um registrador e depois
adicionar o valor do ponteiro $sp ($29) de 4 (32 bits)
para referenciar o prximo item da pilha.

A remoo de um item da pilha no exclui o


valor dele.

MIPS Pilha e Rotinas


Para cada chamada de funo, uma seo da pilha reservada.
Chamado de stack frame.

Um stack frame existe quando uma funo for inicializada mas


ainda no foi terminada.

MIPS Pilha e Rotinas


Digamos que para o corpo de main() existe a chamada a uma outra funo, foo(a,b)
que possui dois argumentos.
Com a insero dos argumentos na pilha, seu tamanho
aumentou.
Um palavra de memria tambm reservada para o valor de
retorno.
O valor de retorno calculado por foo() e ser preenchido
uma vez que foo() estiver terminado.

MIPS Pilha e Rotinas


Uma vez que foo() precisa de variveis locais, ento algum espao reservado na pilha.
foo() consegue acessar os argumentos passados por main().
O registrador $fp ($30) aponta para o local onde o o registrador $sp apontava no momento antes de
foo() ser inserido na pilha.
$fp ficar com valor fixo enquanto o $sp pode variar o seu valor.
Frame Pointer
Pode ser utilizado para calcular os locais na memria dos
argumentos (por offset).

Uma vez que foo() termina, basta atribuir o valor do $fp a


$sp.

MIPS Pilha e Rotinas


Uma vez que foo() termina temos o estado inicial de quando foo() termina s que agora temos o valor
de retorno preenchido.
Assim main() pode utilizar o valor de retorno e dar pop nos argumentos de foo().

Instrues Load e Store


C:

A[12] = h + A[8];

MIPS:

lw $t0, 32($s3)
#addr of A in reg s3
add $t0, $s2, $t0
#h in reg s2
sw $t0, 48($s3)

Admitimos $s3 como registrador base para o array A;


Admitimos $s2 como registrador base para varivel h;
$t0 nosso registrador temporrio para a soma de A[8] + h;
Lembrar sempre que as operaes aritmticas s podem ser sobre registradores e no memria.

No podemos fazer: add 48($s3), $s2, 32($s3)


Uma dvida, por que 32 e 48 como offsets quando na verdade eu quero a 8 e 12 posio do array?

Funo Swap
Imaginando uma subrotina:

swap(int v[], int k)


{
int temp;
temp = v[k]
v[k] = v[k+1];
v[k+1] = temp;
}

swap:
sll $2,
add $2,
lw $15,
lw $16,
sw $16,
sw $15,
jr $31

$5, 2
$4, $2
0($2)
4($2)
0($2)
4($2)

Tendo k em $5, Endereo base de v est no registrador $4 e o


endereo de retorno para quem chamou a funo est no
registrador $31.

Analisando o cdigo
Return
Address

8000
8004
8008
800C
8010

Instruo 1
Instruo 2
call swap
Instruo 3
Instruo 4

Jump to
8050
E $31 = 800C

8050
8054
8058
805C
8060

Instruo 1
Instruo 2
do swap
Instruo 3
Instruo 4

Quando o programa chega a call swap :


Desvie para a rotina de swap
Registradores 4 e 5 contm os argumentos (conveno)
Registrador 31 contm o endereo de retorno (conveno)

Executa a rotina swap


Desvia de volta ao endereo da instruo seguinte no programa
principal ($31 ou 800C).

Analisando o cdigo
Vamos rodar no MARS e ver o que acontece...
MARS (MIPS Assembler and Runtime Simulator)

Ento aprendemos que:


MIPS
Podemos enderear os dados por deslocamento de bytes.

Operaes aritmticas s sobre registradores.

Instruo

Significa

add $s1, $s2, $s3


sub $s1, $s2, $s3
lw $s1, 100($s2)
sw $s1, 100($s2)

$s1 = $s2 + $s3


$s1 = $s2 $s3
$s1 = Mem[$s2+100]
Mem[$s2+100] = $s1

Controle de Fluxo
Instrues para tomada de deciso
Alteram o fluxo de execuo
Alterar o fluxo muito simples, s alterar o valor atual de PC

Desvio condicional:
bne $t0, $t1, Label
beq $t0, $t1, Label
Exemplo:

if (i==j) h = i + j;
bne $s0, $s1, not_add
add $s3, $s0, $s1
not_add :
....

Controle de Fluxo
Desvio incondicional:
j label
Example:
if (i!=j)
h=i+j;
else
h=i-j;

E para fazer um loop FOR?

beq $s4, $s5, Lab1


add $s3, $s4, $s5
j Lab2
Lab1:sub $s3, $s4, $s5
Lab2:...

Revisando
Instruo
Significa
add $s1,$s2,$s3
$s1 = $s2 + $s3
sub $s1,$s2,$s3
$s1 = $s2 $s3
lw $s1,100($s2)
$s1 = Memory[$s2+100]
sw $s1,100($s2)
Memory[$s2+100] = $s1
bne $s4,$s5,Label Next instr. is at Label if
$s4 $s5
beq $s4,$s5,Label Next instr. is at Label if
$s4 = $s5
j Label
Next instr. is at Label
Formatos:

op

rs

rt

rd

op

rs

rt

16 bit address

op

shamt

26 bit address

funct

Formas de Desvio Incondicional


j

instr
Jump para um endereo especificado, podendo ser uma label.

jr

$ra

Jump de para o endereo do registrador $ra. Usado para retorno de chamadas de subprocedimentos.

jal

addr

Seta $ra = PC+4 e desvia para um endereo especificado, usado para chamada de
procedimentos.

Controle de Fluxo
Outras formas de desvio condicional
if
slt $t0, $s1, $s2

$s1 < $s2 then


$t0 = 1

else
$t0 = 0

Ou podemos usar a pseudoinstruo


blt $s1, $s2, Label
Perceba que precisamos estar atentos a conveno de registradores.

Pseudoinstrues
blt $s1, $s2, reladdr
O Assembler converte para:
slt $1, $s1, $s2
bne $1, $zero, reladdr

Existem outras pseudoinstrues


bgt, ble, bge, li, move

No so implementadas em Hardware
O Assembler expande as instrues
O registrador 1, chamado de $at, reservado para converter
pseudoinstrues em cdigo de mquina.

Tipos de Instrues - MIPS


Existem 3 tipos principais de instrues no MIPS:
Aritmticas (R-Type) - S tem registradores como argumentos.
Add, Sub, Mul, Shifts, And, Or, etc.
Load/Store/Desvios condicionais (I-Type) - Argumentos so registradores
e nmeros ( endereos de memria ou constantes).
Desvios incondicionais (J-Type) - O argumento um endereo de
memria.

Modos de Endereamento
Existem 5 formas de endereamento no MIPS. Atravs delas, efetuamos todas as operaes
necessrias:
Registrador: Representamos o dado passando o nome do registrador no qual ele est contido.
Ex: add $r1, $r2, $r2.

Imediato: Passamos o dado escrevendo o seu valor imediato.


Ex: addi $r1, $r2, 456.

Base-Deslocamento: Representamos o dado passando o endereo de um vetor no qual ele est e a


quantidade de bits a serem deslocados.
Ex: lw $r5, offset($r65).

Relativo ao PC: Passamos o dado descrevendo o seu valor relativo ao endereo da instruo atual.
Ex: beq $r1, $r2, DESTINO.

Absoluto: passamos o valor informando o seu endereo (pseudo-)absoluto.


Ex: j DESTINO.

Tipos de Instrues (R-Type)

Tipos de Instrues (I-Type)

Tipos de Instrues (J-Type)


Desvios Incondicionais: J 10000

Converso Linguagem de Mquina

Arquitetura e Organizao de
Computadores
I/O EM MIPS

Exerccio MIPS

Vamos desenvolver um programa em MIPS


que coloca texto inserido pelo usurio em
uma posio de memria.

Input em MIPS

Input em MIPS

Input em MIPS

Input em MIPS

Input em MIPS

Input em MIPS

Input em MIPS

Input em MIPS

Input em MIPS

I/O em MIPS
Agora desenvolva um programa em MIPS.
1. O programa deve ter o seu nome armazenado na memria.
2. Voc deve escrever uma frase e ele deve retornar o seu nome.

Leituras Recomendadas
Bsica
Patterson
Captulo 2 e Apndice B

Complementar
Stallings
Captulo 10

Ler (Ordem de Importncia)


1. Brad Smith, ARM and Intel Battle over the Mobile Chips Future,
Computer, vol. 41, no. 5, pp. 15-18, May 2008.
2. J. Mashey, "The Long Road to 64 Bits," Comm. ACM, vol. 52, no. 1, pp. 4553, Jan 2009.

Das könnte Ihnen auch gefallen