SlideShare uma empresa Scribd logo
1 de 106
Baixar para ler offline
Arquitetura de Computadores
ACH2055
Aula 03 – Assembly MIPS (Parte I)
Norton Trevisan Roman
(norton@usp.br)
1 de novembro de 2019
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 1 / 37
A Arquitetura MIPS
Defini¸c˜ao
Microprocessor Without Interlocked Pipeline Stages
Desenvolvida pela MIPS Technologies (1984)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 2 / 37
A Arquitetura MIPS
Defini¸c˜ao
Microprocessor Without Interlocked Pipeline Stages
Desenvolvida pela MIPS Technologies (1984)
Trata-se de uma arquitetura de conjunto de
instru¸c˜oes
Instruction Set Architecture – ISA
No caso do MIPS, RISC (veremos mais adiante)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 2 / 37
A Arquitetura MIPS
Defini¸c˜ao
Microprocessor Without Interlocked Pipeline Stages
Desenvolvida pela MIPS Technologies (1984)
Trata-se de uma arquitetura de conjunto de
instru¸c˜oes
Instruction Set Architecture – ISA
No caso do MIPS, RISC (veremos mais adiante)
Presentes em diversos sistemas
Videogames, roteadores etc
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 2 / 37
A Arquitetura MIPS
Vantagens
Instru¸c˜oes tˆem tamanho fixo
32 e 64 bits
X86 n˜ao tem tamanho fixo
S˜ao mais f´aceis de se manipular, especialmente por uma
pipeline (veremos mais adiante)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 3 / 37
A Arquitetura MIPS
Vantagens
Instru¸c˜oes tˆem tamanho fixo
32 e 64 bits
X86 n˜ao tem tamanho fixo
S˜ao mais f´aceis de se manipular, especialmente por uma
pipeline (veremos mais adiante)
As instru¸c˜oes seguem um formato geral fixo
OPERAC¸ ˜AO <lista de operandos>
Ex: ADD $s1, $s2, $s3
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 3 / 37
Programando em MIPS
Simuladores
Wemips (online)
https:
//rivoire.cs.sonoma.
edu/cs351/wemips/
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 4 / 37
Programando em MIPS
Simuladores
Wemips (online)
https:
//rivoire.cs.sonoma.
edu/cs351/wemips/
Mars (.jar)
http://courses.
missouristate.edu/
kenvollmar/mars/
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 4 / 37
Programando em MIPS
Registradores
MIPS possui 32 registradores de uso geral
Numerados de 0 a 31
Em geral referenciados pelo seu n´umero ($0 a $31) ou nome
(ex: $t1)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 5 / 37
Programando em MIPS
Registradores
MIPS possui 32 registradores de uso geral
Numerados de 0 a 31
Em geral referenciados pelo seu n´umero ($0 a $31) ou nome
(ex: $t1)
Embora possam ser usados livremente, h´a uma
conven¸c˜ao em seu uso
Seguida por programadores e compiladores
Seguir essa conven¸c˜ao permite que um c´odigo possa
funcionar com outros em MIPS
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 5 / 37
Programando em MIPS
Registradores – Conven¸c˜ao
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
Programando em MIPS
Registradores – Conven¸c˜ao
zero sempre
cont´em o valor
0 (hard-wired)
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
Programando em MIPS
Registradores – Conven¸c˜ao
Iniciados em
v guardam a
avalia¸c˜ao de
uma express˜ao
ou os resultados
de uma fun¸c˜ao
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
Programando em MIPS
Registradores – Conven¸c˜ao
Iniciados em a guar-
dam argumentos
para as rotinas
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
Programando em MIPS
Registradores – Conven¸c˜ao
Iniciados em t
guardam valores
que n˜ao precisam
ser preservados
entre chamadas
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
Programando em MIPS
Registradores – Conven¸c˜ao
Iniciados em s
guardam valores
que precisam
ser preservados
entre chamadas
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
Programando em MIPS
Registradores – Conven¸c˜ao
Iniciados em k s˜ao
reservados para
o kernel do S.O.
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
Programando em MIPS
Registradores – Conven¸c˜ao
Fonte: [1]
gp aponta para o
endere¸co do fim
dos primeiros 32K
no segmento de
dados est´aticos
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
Programando em MIPS
Registradores – Conven¸c˜ao
Fonte: [1]
Permitindo assim
acesso r´apido aos
primeiros 64K
desse segmento
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
Programando em MIPS
Registradores – Conven¸c˜ao
Fonte: [1]
sp guarda o
endere¸co do ´ultimo
local da pilha
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
Programando em MIPS
Registradores – Conven¸c˜ao
fp guarda o
endere¸co da
primeira palavra da
moldura de pilha
do procedimento
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
Programando em MIPS
Registradores – Conven¸c˜ao
ra guarda o
endere¸co de retorno
de uma chamada
de procedimento
Nome N´umero Uso
zero 0 Constante zero
at 1 Reservado para o montador
v0 – v1 2 – 3 Registradores de resultado
a0 – a3 4 – 7 Registradores de argumentos
t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios
s0 – s7 16 – 23 Registradores salvos
k0 – k1 26 – 27 Registradores do Kernel
gp 28 Global Pointer
sp 29 Stack Pointer
fp 30 Frame Pointer
ra 31 Return Address
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
Programando em MIPS
Instru¸c˜oes Aritm´eticas
Cada instru¸c˜ao executa uma ´unica opera¸c˜ao,
possuindo 3 campos
2 operandos e um local para armazenamento do resultado
Cada um correspondendo a um dos 32 registradores
dispon´ıveis
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 7 / 37
Programando em MIPS
Instru¸c˜oes Aritm´eticas
Cada instru¸c˜ao executa uma ´unica opera¸c˜ao,
possuindo 3 campos
2 operandos e um local para armazenamento do resultado
Cada um correspondendo a um dos 32 registradores
dispon´ıveis
Formato:
opera¸c˜ao $resultado, $operando1, $operando2
Ex: add $t0, $s2, $s3
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 7 / 37
Programando em MIPS
Principais Instru¸c˜oes Aritm´eticas
Adi¸c˜ao
add $t0, $s2, $s3
Subtra¸c˜ao
sub $t0, $s2, $s3
Multiplica¸c˜ao
mul $t0, $s2, $s3
Divis˜ao
div $t0, $s2, $s3
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 8 / 37
Programando em MIPS
Principais Instru¸c˜oes Aritm´eticas
Adi¸c˜ao
add $t0, $s2, $s3
Subtra¸c˜ao
sub $t0, $s2, $s3
Multiplica¸c˜ao
mul $t0, $s2, $s3
Divis˜ao
div $t0, $s2, $s3
Todas com vers˜oes para inteiros sem sinal
addu, subu, divu
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 8 / 37
Programando em MIPS
Principais Instru¸c˜oes Aritm´eticas
Adi¸c˜ao
add $t0, $s2, $s3
Subtra¸c˜ao
sub $t0, $s2, $s3
Multiplica¸c˜ao
mul $t0, $s2, $s3
Divis˜ao
div $t0, $s2, $s3
Todas com vers˜oes para inteiros sem sinal
addu, subu, divu
Para ponto flutuante etc
add.d, sub.d, mul.d, div.d
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 8 / 37
Programando em MIPS
Constantes (valores imediatos)
Essas instru¸c˜oes, contudo, trabalham com
registradores pr´e-carregados
Como carregar esses registradores?
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 9 / 37
Programando em MIPS
Constantes (valores imediatos)
Essas instru¸c˜oes, contudo, trabalham com
registradores pr´e-carregados
Como carregar esses registradores?
Com operadores imediatos
li $s2, 10 (load immediate – a constante 10 ´e
armazenada no registrador $s2)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 9 / 37
Programando em MIPS
Constantes (valores imediatos)
Essas instru¸c˜oes, contudo, trabalham com
registradores pr´e-carregados
Como carregar esses registradores?
Com operadores imediatos
li $s2, 10 (load immediate – a constante 10 ´e
armazenada no registrador $s2)
Instru¸c˜oes aritm´eticas tamb´em tˆem vers˜oes assim:
Ex: addi $t0, $s2, 4
Presentes apenas para soma e subtra¸c˜ao
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 9 / 37
Programando em MIPS
Constantes (valores imediatos)
De fato, a instru¸c˜ao li n˜ao existe
Trata-se de uma pseudo-instru¸c˜ao
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 10 / 37
Programando em MIPS
Constantes (valores imediatos)
De fato, a instru¸c˜ao li n˜ao existe
Trata-se de uma pseudo-instru¸c˜ao
Traduzida pelo montador como “addiu destino,
0, valor”
addiu – add immediate unsigned
Ex: li $s4, 10 ⇒ addiu $s4, $zero, 10
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 10 / 37
Programando em MIPS
Constantes (valores imediatos)
De fato, a instru¸c˜ao li n˜ao existe
Trata-se de uma pseudo-instru¸c˜ao
Traduzida pelo montador como “addiu destino,
0, valor”
addiu – add immediate unsigned
Ex: li $s4, 10 ⇒ addiu $s4, $zero, 10
Ou “ori destino, 0, valor”
ori – or immediate
Ex: li $s4, 10 ⇒ ori $s4, $zero, 10
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 10 / 37
Programando em MIPS
Estrutura de um Programa MARS
Dividido em 2 partes: declara¸c˜ao e c´odigo
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 11 / 37
Programando em MIPS
Estrutura de um Programa MARS
Dividido em 2 partes: declara¸c˜ao e c´odigo
Declara¸c˜ao
Usa a diretiva .data
Itens subsequentes ser˜ao armazenados no segmento de dados, no
pr´oximo endere¸co dispon´ıvel
Se for fornecido um endere¸co (.data end → opcional), ser˜ao
armazenados a partir desse endere¸co
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 11 / 37
Programando em MIPS
Estrutura de um Programa MARS
Dividido em 2 partes: declara¸c˜ao e c´odigo
Declara¸c˜ao
Usa a diretiva .data
Itens subsequentes ser˜ao armazenados no segmento de dados, no
pr´oximo endere¸co dispon´ıvel
Se for fornecido um endere¸co (.data end → opcional), ser˜ao
armazenados a partir desse endere¸co
Formato dos itens:
nome: .tipo de armazenagem valor
Ex: var1: .word 10
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 11 / 37
Programando em MIPS
Estrutura de um Programa MARS
Palavras seguidas por ‘:’ (ex:
var1) s˜ao r´otulos, marcando
o endere¸co de mem´oria a
seguir (onde 10 est´a na RAM)
Dividido em 2 partes: declara¸c˜ao e c´odigo
Declara¸c˜ao
Usa a diretiva .data
Itens subsequentes ser˜ao armazenados no segmento de dados, no
pr´oximo endere¸co dispon´ıvel
Se for fornecido um endere¸co (.data end → opcional), ser˜ao
armazenados a partir desse endere¸co
Formato dos itens:
nome: .tipo de armazenagem valor
Ex: var1: .word 10
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 11 / 37
Programando em MIPS
Estrutura de um Programa
C´odigo
Usa a diretiva .text
Itens subsequentes ser˜ao armazenados no segmento de texto
Se for fornecido um endere¸co (.text end → opcional), ser˜ao
armazenados a partir desse endere¸co
Parte do programa em que as instru¸c˜oes a serem executadas
s˜ao escritas
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 12 / 37
Programando em MIPS
Estrutura de um Programa
C´odigo
Usa a diretiva .text
Itens subsequentes ser˜ao armazenados no segmento de texto
Se for fornecido um endere¸co (.text end → opcional), ser˜ao
armazenados a partir desse endere¸co
Parte do programa em que as instru¸c˜oes a serem executadas
s˜ao escritas
De in´ıcio, focaremos apenas nessa parte
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 12 / 37
Programando em MIPS
Um Primeiro Programa
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
Programando em MIPS
Um Primeiro Programa
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
Programando em MIPS
Um Primeiro Programa
Coment´arios iniciam com
# e v˜ao at´e o final da linha
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
Programando em MIPS
Um Primeiro Programa
Montamos o programa...
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
Programando em MIPS
Um Primeiro Programa
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
Programando em MIPS
Um Primeiro Programa
E ent˜ao rodamos
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
Programando em MIPS
Um Primeiro Programa
Podemos visualizar o
conte´udo dos registradores
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
Programando em MIPS
Instru¸c˜oes Relacionais
Possuem o mesmo formato das aritm´eticas
opera¸c˜ao $resultado, $operando1, $operando2
Ex: slt $t0, $s2, $s3
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 14 / 37
Programando em MIPS
Instru¸c˜oes Relacionais
Possuem o mesmo formato das aritm´eticas
opera¸c˜ao $resultado, $operando1, $operando2
Ex: slt $t0, $s2, $s3
Existem, contudo, apenas 2 instru¸c˜oes
SLT e SLTI
De fato, h´a mais duas, relacionadas a desvios, que veremos
mais adiante
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 14 / 37
Programando em MIPS
Instru¸c˜oes Relacionais
SLT – Set on Less Than
slt $t0, $s1, $s2
$t0 ser´a 1 se $s1 < $s2. Do contr´ario, $t0 ser´a 0
Equivale a $st0 ← $s1 < $s2
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 15 / 37
Programando em MIPS
Instru¸c˜oes Relacionais
SLT – Set on Less Than
slt $t0, $s1, $s2
$t0 ser´a 1 se $s1 < $s2. Do contr´ario, $t0 ser´a 0
Equivale a $st0 ← $s1 < $s2
SLTI – Set on Less Than Immediate (com sinal)
slti $t0, $s1, 10
Mesmo comportamento de slt
Exite tamb´em a vers˜ao para unsigned int: sltiu
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 15 / 37
Programando em MIPS
Instru¸c˜oes L´ogicas
S˜ao 7 as instru¸c˜oes l´ogicas em MIPS
Deslocamento `a esquerda (SLL)
Deslocamento `a direita (SRL)
And bit a bit (AND, ANDI)
Or bit a bit (OR, ORI)
Nor bit a bit (NOR)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 16 / 37
Programando em MIPS
Instru¸c˜oes L´ogicas
SLL – Shift Left Logical
sll resultado, origem, deslocamento
sll $t2, $s0, 4
Desloque o conte´udo de $s0 4 bits para a esquerda e armazene o
resultado em $t2
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 17 / 37
Programando em MIPS
Instru¸c˜oes L´ogicas
SLL – Shift Left Logical
sll resultado, origem, deslocamento
sll $t2, $s0, 4
Desloque o conte´udo de $s0 4 bits para a esquerda e armazene o
resultado em $t2
SRL – Shift Right Logical
srl resultado, origem, deslocamento
srl $t2, $s0, 2
Desloque o conte´udo de $s0 2 bits para a direita e armazene o
resultado em $t2
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 17 / 37
Programando em MIPS
Instru¸c˜oes L´ogicas
S˜ao chamadas l´ogicas por n˜ao
preservarem sinal nem distin-
guirem expoente de mantissa
SLL – Shift Left Logical
sll resultado, origem, deslocamento
sll $t2, $s0, 4
Desloque o conte´udo de $s0 4 bits para a esquerda e armazene o
resultado em $t2
SRL – Shift Right Logical
srl resultado, origem, deslocamento
srl $t2, $s0, 2
Desloque o conte´udo de $s0 2 bits para a direita e armazene o
resultado em $t2
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 17 / 37
Programando em MIPS
Instru¸c˜oes L´ogicas
Os bits s˜ao simplesmente mo-
vidos sem preocupa¸c˜ao
com seu significado
SLL – Shift Left Logical
sll resultado, origem, deslocamento
sll $t2, $s0, 4
Desloque o conte´udo de $s0 4 bits para a esquerda e armazene o
resultado em $t2
SRL – Shift Right Logical
srl resultado, origem, deslocamento
srl $t2, $s0, 2
Desloque o conte´udo de $s0 2 bits para a direita e armazene o
resultado em $t2
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 17 / 37
Programando em MIPS
Instru¸c˜oes L´ogicas
AND
and resultado, origem1, origem2
and $t0, $s1, $s2
$t0 recebe o resultado de um AND bit a bit entre $s1 e $s2
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 18 / 37
Programando em MIPS
Instru¸c˜oes L´ogicas
AND
and resultado, origem1, origem2
and $t0, $s1, $s2
$t0 recebe o resultado de um AND bit a bit entre $s1 e $s2
ANDI – AND Immediate
andi resultado, origem1, valor
andi $t0, $s2, 10
$t0 recebe o resultado de um AND bit a bit entre $s2 e 10
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 18 / 37
Programando em MIPS
Instru¸c˜oes L´ogicas
OR
or resultado, origem1, origem2
or $t0, $s1, $s2
$t0 recebe o resultado de um OR bit a bit entre $s1 e $s2
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 19 / 37
Programando em MIPS
Instru¸c˜oes L´ogicas
OR
or resultado, origem1, origem2
or $t0, $s1, $s2
$t0 recebe o resultado de um OR bit a bit entre $s1 e $s2
ORI – OR Immediate
ori resultado, origem1, valor
ori $t0, $s2, 10
$t0 recebe o resultado de um OR bit a bit entre $s2 e 10
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 19 / 37
Programando em MIPS
Instru¸c˜oes L´ogicas
NOR
Implementado assim para seguir o padr˜ao de 2 operandos
Podemos, contudo, simular o NOT usando NOR:
A NOR 0
NOT (A OR 0)
NOT A
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 20 / 37
Programando em MIPS
Instru¸c˜oes L´ogicas
NOR
Implementado assim para seguir o padr˜ao de 2 operandos
Podemos, contudo, simular o NOT usando NOR:
A NOR 0
NOT (A OR 0)
NOT A
nor resultado, origem1, origem2
nor $t0, $s1, $zero
$t0 recebe o resultado de um NOT bit a bit em $s1
Lembre-se que todos os 32 (ou 64) bits s˜ao invertidos
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 20 / 37
Programando em MIPS
Endere¸camento de Mem´oria
MIPS endere¸ca cada byte de mem´oria
Com 32 bits, endere¸cos de palavras adjacentes diferem em 4
Temos assim 232
÷ 4 = 230
palavras de mem´oria
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 21 / 37
Programando em MIPS
Endere¸camento de Mem´oria
MIPS endere¸ca cada byte de mem´oria
Com 32 bits, endere¸cos de palavras adjacentes diferem em 4
Temos assim 232
÷ 4 = 230
palavras de mem´oria
A mem´oria ent˜ao ´e vista
como um arranjo
unidimensional
Com o endere¸co funcionando
como ´ındice
Fonte: [1]
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 21 / 37
Programando em MIPS
Endere¸camento de Mem´oria
Mas e como os bytes est˜ao
arranjados dentro da
palavra?
O mais significativo (big-endian)
ou o menos significativo
(little-endian) no endere¸co mais
baixo?
Fonte: [1]
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 22 / 37
Programando em MIPS
Endere¸camento de Mem´oria
Mas e como os bytes est˜ao
arranjados dentro da
palavra?
O mais significativo (big-endian)
ou o menos significativo
(little-endian) no endere¸co mais
baixo?
Big-endian
Little-endian
Fonte: [1]
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 22 / 37
Programando em MIPS
Endere¸camento de Mem´oria
Mas e como os bytes est˜ao
arranjados dentro da
palavra?
O mais significativo (big-endian)
ou o menos significativo
(little-endian) no endere¸co mais
baixo?
MIPS ´e do tipo big-endian
Big-endian
Little-endian
Fonte: [1]
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 22 / 37
Programando em MIPS
Instru¸c˜oes de Acesso `a Mem´oria
MIPS possui diversas instru¸c˜oes de acesso `a
mem´oria
As principais sendo lw e sw
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 23 / 37
Programando em MIPS
Instru¸c˜oes de Acesso `a Mem´oria
MIPS possui diversas instru¸c˜oes de acesso `a
mem´oria
As principais sendo lw e sw
LW – Load Word
Transfere uma palavra da RAM para um registrador
lw registrador, deslocamento(registrador base)
lw $t0, 30($s0)
Carregue em $t0 a palavra no endere¸co correspondente a $s0 + 30
O deslocamento (aqui 30) pode ser negativo
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 23 / 37
Programando em MIPS
Instru¸c˜oes de Acesso `a Mem´oria
SW – Store Word
Transfere uma palavra de um registrador para a RAM
sw registrador, deslocamento(registrador base)
sw $t0, 30($s0)
Armazene o conte´udo de $t0 no endere¸co correspondente a $s0 + 30
Novamente, o deslocamento pode ser negativo
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 24 / 37
Programando em MIPS
Instru¸c˜oes de Acesso `a Mem´oria
E como sabemos o endere¸co de mem´oria?
Ou especificamos, carregando o registrador com li
(cuidado!!!)
Ou deixamos que o montador tome conta disso
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 25 / 37
Programando em MIPS
Instru¸c˜oes de Acesso `a Mem´oria
E como sabemos o endere¸co de mem´oria?
Ou especificamos, carregando o registrador com li
(cuidado!!!)
Ou deixamos que o montador tome conta disso
Como?
Usando as diretivas de montador MIPS
Ex:
.data
v1: .word 20
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 25 / 37
Programando em MIPS
Instru¸c˜oes de Acesso `a Mem´oria
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 26 / 37
Programando em MIPS
Instru¸c˜oes de Acesso `a Mem´oria
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 26 / 37
Programando em MIPS
Instru¸c˜oes de Acesso `a Mem´oria
“lw registrador, r´otulo”
´e uma pseudo-instru¸c˜ao
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 26 / 37
Programando em MIPS
Instru¸c˜oes de Acesso `a Mem´oria
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 27 / 37
Programando em MIPS
Arranjos
Suponha que temos um arranjo em mem´oria
.data
arr: .word 2, 0, -1, 5, -3, 2, 2, 10, 9, -2
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 28 / 37
Programando em MIPS
Arranjos
Suponha que temos um arranjo em mem´oria
.data
arr: .word 2, 0, -1, 5, -3, 2, 2, 10, 9, -2
Como acessar o elemento arr[3]?
Precisamos armazenar o endere¸co-base do arranjo em um
registrador, para calcular o deslocamento
la $t1, arr
Pseudo-instru¸c˜ao que carrega em $t1 o endere¸co representado por
arr
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 28 / 37
Programando em MIPS
Arranjos
Como acessar o elemento arr[3] (cont.)?
lw $t2, 3($t1)?
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 29 / 37
Programando em MIPS
Arranjos
Como acessar o elemento arr[3] (cont.)?
lw $t2, 3($t1)?
Mas armazenamos palavras, n˜ao bytes
O ´ındice precisa ser multiplicado pelo tamanho da palavra
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 29 / 37
Programando em MIPS
Arranjos
Como acessar o elemento arr[3] (cont.)?
lw $t2, 3($t1)?
Mas armazenamos palavras, n˜ao bytes
O ´ındice precisa ser multiplicado pelo tamanho da palavra
Ent˜ao lw $t2, 12($t1)
.data
arr: .word 2, 0, -1, 5, -3, 2, 2, 10, 9, -2
.text
la $t1, arr
lw $t2, 12($t1)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 29 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
MIPS possui 3 fam´ılias de instru¸c˜oes:
Instru¸c˜oes do Tipo R (Register)
add $s1, $s2, $s3
sll $t2, $s0, 4
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 30 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
MIPS possui 3 fam´ılias de instru¸c˜oes:
Instru¸c˜oes do Tipo R (Register)
add $s1, $s2, $s3
sll $t2, $s0, 4
Instru¸c˜oes do Tipo I (Immediate)
addi $t0, $s2, 4
lw $t2, 12($t1)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 30 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
MIPS possui 3 fam´ılias de instru¸c˜oes:
Instru¸c˜oes do Tipo R (Register)
add $s1, $s2, $s3
sll $t2, $s0, 4
Instru¸c˜oes do Tipo I (Immediate)
addi $t0, $s2, 4
lw $t2, 12($t1)
Instru¸c˜oes do Tipo J (Jump)
Usadas em desvios (mais adiante)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 30 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo R (Register)
Fonte: [1]
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo R (Register)
Fonte: [1]
C´odigo da opera¸c˜ao (opcode)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo R (Register)
Fonte: [1]
Primeiro registrador-fonte da opera¸c˜ao
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo R (Register)
Fonte: [1]
Segundo registrador-fonte da opera¸c˜ao
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo R (Register)
Fonte: [1]
Registrador-destino (recebe o resultado da opera¸c˜ao)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo R (Register)
Fonte: [1]
Shift amount – deslocamento (usado em instru¸c˜oes
como sll e srl)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo R (Register)
Fonte: [1]
C´odigo de fun¸c˜ao – seleciona a variante espec´ıfica
da opera¸c˜ao no campo op
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo R (Register)
Fonte: [1]
Campos n˜ao usados s˜ao carregados com zero
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo I (Immediate)
Fonte: [1]
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo I (Immediate)
Fonte: [1]
C´odigo da opera¸c˜ao (opcode)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo I (Immediate)
Fonte: [1]
Registrador-fonte da opera¸c˜ao
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo I (Immediate)
Fonte: [1]
Registrador de destino da opera¸c˜ao
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo I (Immediate)
Fonte: [1]
Valor (constante ou endere¸co) usado na opera¸c˜ao
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo I (Immediate)
Fonte: [1]
Note que isso nos d´a um limite de ±215
bytes de
deslocamento (h´a o bit de sinal) em lw $reg1, desl($reg2)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo I (Immediate)
Fonte: [1]
Por isso, ao apontar para o byte 32K no segmento de dados,
$gp d´a acesso aos primeiros 64K desse segmento
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo J (Jump)
Fonte: Adaptada de [1]
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 33 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo J (Jump)
Fonte: Adaptada de [1]
C´odigo da opera¸c˜ao (opcode)
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 33 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Instru¸c˜oes Tipo J (Jump)
Fonte: Adaptada de [1]
Endere¸co de mem´oria
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 33 / 37
Programando em MIPS
Codifica¸c˜ao das Instru¸c˜oes
Fonte: Adaptada de [1]
Os formatos s˜ao diferenciados no circuito pelo valor
no campo op
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 34 / 37
Programando em MIPS
Pseudo-instru¸c˜oes
Instru¸c˜oes adicionadas pelo montador, para
simplificar algumas opera¸c˜oes
Tratadas por ele como se fossem instru¸c˜oes leg´ıtimas
Traduzidas para instru¸c˜oes reais
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 35 / 37
Programando em MIPS
Pseudo-instru¸c˜oes
Instru¸c˜oes adicionadas pelo montador, para
simplificar algumas opera¸c˜oes
Tratadas por ele como se fossem instru¸c˜oes leg´ıtimas
Traduzidas para instru¸c˜oes reais
Exemplos:
Pseudo-instru¸c˜ao Expans˜ao
li $s4, 10 addiu $s4, $zero, 10
move $t0, $t1 add $t0, $zero, $t1
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 35 / 37
Referˆencias
1 Patterson, D.A.; Hennessy, J.L. (2013): Computer Organization and
Design: The Hardware/Software Interface. Morgan Kaufmann. 5a
ed.
Para detalhes sobre MIPS consulte tamb´em o Apˆendice A
2 https://www.embarcados.com.br/arquitetura-de-conjunto-
de-instrucoes-mips/
Curso bastante completo, em portuguˆes
3 https://sweetcode.io/building-first-simple-program-
mips-assembly-language/
Tutorial b´asico passo a passo
4 https://sites.cs.ucsb.edu/~franklin/64/lectures/
mipsassemblytutorial.pdf
Tutorial mais profundo
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 36 / 37
Referˆencias
5 WEMIPS
https://rivoire.cs.sonoma.edu/cs351/wemips/
Simulador MIPS online
6 MARS (MIPS Assembler and Runtime Simulator)
http://courses.missouristate.edu/kenvollmar/mars/
Simulador MIPS (.jar, multiplataforma)
7 https://en.wikipedia.org/wiki/Logical_shift
Diferen¸ca entre deslocamento l´ogico e aritm´etico
Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 37 / 37

Mais conteúdo relacionado

Semelhante a (ACH2055) Arquitetura de Computadores - Aula 03

Acesso à memória e registros
Acesso à memória e registrosAcesso à memória e registros
Acesso à memória e registrosRodrigo Almeida
 
Webinar: Uma introdução a ISA RISC-V e seu ecossistema
Webinar: Uma introdução a ISA RISC-V e seu ecossistemaWebinar: Uma introdução a ISA RISC-V e seu ecossistema
Webinar: Uma introdução a ISA RISC-V e seu ecossistemaEmbarcados
 
Conjunto de instruções mips - introdução
Conjunto de instruções mips - introduçãoConjunto de instruções mips - introdução
Conjunto de instruções mips - introduçãoElaine Cecília Gatto
 
Virtualização de Infraestrutura de Redes por Thiago Leite
Virtualização de Infraestrutura de Redes por Thiago LeiteVirtualização de Infraestrutura de Redes por Thiago Leite
Virtualização de Infraestrutura de Redes por Thiago LeiteThiagoLeite94
 
UFCD-6072-Microcontroladores-Registos.pptx
UFCD-6072-Microcontroladores-Registos.pptxUFCD-6072-Microcontroladores-Registos.pptx
UFCD-6072-Microcontroladores-Registos.pptxcentroclinicosalus
 
TV Digital - Entendendo a transmissão de aplicações - TDC2011
TV Digital - Entendendo a transmissão de aplicações - TDC2011TV Digital - Entendendo a transmissão de aplicações - TDC2011
TV Digital - Entendendo a transmissão de aplicações - TDC2011Hugo Lavalle
 

Semelhante a (ACH2055) Arquitetura de Computadores - Aula 03 (10)

Acesso à memória e registros
Acesso à memória e registrosAcesso à memória e registros
Acesso à memória e registros
 
CLP S7 300 E S7 400
CLP S7 300 E S7 400CLP S7 300 E S7 400
CLP S7 300 E S7 400
 
Pro2 04p
Pro2 04pPro2 04p
Pro2 04p
 
CLP S7 300 E S7 400
CLP S7 300 E S7 400CLP S7 300 E S7 400
CLP S7 300 E S7 400
 
Webinar: Uma introdução a ISA RISC-V e seu ecossistema
Webinar: Uma introdução a ISA RISC-V e seu ecossistemaWebinar: Uma introdução a ISA RISC-V e seu ecossistema
Webinar: Uma introdução a ISA RISC-V e seu ecossistema
 
Conjunto de instruções mips - introdução
Conjunto de instruções mips - introduçãoConjunto de instruções mips - introdução
Conjunto de instruções mips - introdução
 
Virtualização de Infraestrutura de Redes por Thiago Leite
Virtualização de Infraestrutura de Redes por Thiago LeiteVirtualização de Infraestrutura de Redes por Thiago Leite
Virtualização de Infraestrutura de Redes por Thiago Leite
 
UFCD-6072-Microcontroladores-Registos.pptx
UFCD-6072-Microcontroladores-Registos.pptxUFCD-6072-Microcontroladores-Registos.pptx
UFCD-6072-Microcontroladores-Registos.pptx
 
Oc2 cap03
Oc2 cap03Oc2 cap03
Oc2 cap03
 
TV Digital - Entendendo a transmissão de aplicações - TDC2011
TV Digital - Entendendo a transmissão de aplicações - TDC2011TV Digital - Entendendo a transmissão de aplicações - TDC2011
TV Digital - Entendendo a transmissão de aplicações - TDC2011
 

Mais de Norton Trevisan Roman

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05Norton Trevisan Roman
 

Mais de Norton Trevisan Roman (20)

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
 

Último

Peça de teatro infantil: A cigarra e as formigas
Peça de teatro infantil: A cigarra e as formigasPeça de teatro infantil: A cigarra e as formigas
Peça de teatro infantil: A cigarra e as formigasBibliotecaViatodos
 
Slides Lição 7, Betel, Ordenança para uma vida de fidelidade e lealdade, 2Tr2...
Slides Lição 7, Betel, Ordenança para uma vida de fidelidade e lealdade, 2Tr2...Slides Lição 7, Betel, Ordenança para uma vida de fidelidade e lealdade, 2Tr2...
Slides Lição 7, Betel, Ordenança para uma vida de fidelidade e lealdade, 2Tr2...LuizHenriquedeAlmeid6
 
APRENDA COMO USAR CONJUNÇÕES COORDENATIVAS
APRENDA COMO USAR CONJUNÇÕES COORDENATIVASAPRENDA COMO USAR CONJUNÇÕES COORDENATIVAS
APRENDA COMO USAR CONJUNÇÕES COORDENATIVASricardo644666
 
Química-ensino médio ESTEQUIOMETRIA.pptx
Química-ensino médio ESTEQUIOMETRIA.pptxQuímica-ensino médio ESTEQUIOMETRIA.pptx
Química-ensino médio ESTEQUIOMETRIA.pptxKeslleyAFerreira
 
425416820-Testes-7º-Ano-Leandro-Rei-Da-Heliria-Com-Solucoes.pdf
425416820-Testes-7º-Ano-Leandro-Rei-Da-Heliria-Com-Solucoes.pdf425416820-Testes-7º-Ano-Leandro-Rei-Da-Heliria-Com-Solucoes.pdf
425416820-Testes-7º-Ano-Leandro-Rei-Da-Heliria-Com-Solucoes.pdfCarinaSofiaDiasBoteq
 
Acróstico - Maio Laranja
Acróstico  - Maio Laranja Acróstico  - Maio Laranja
Acróstico - Maio Laranja Mary Alvarenga
 
Aspectos históricos da educação dos surdos.pptx
Aspectos históricos da educação dos surdos.pptxAspectos históricos da educação dos surdos.pptx
Aspectos históricos da educação dos surdos.pptxprofbrunogeo95
 
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024azulassessoria9
 
Testes de avaliação português 6º ano .pdf
Testes de avaliação português 6º ano .pdfTestes de avaliação português 6º ano .pdf
Testes de avaliação português 6º ano .pdfCsarBaltazar1
 
Apostila-Letramento-e-alfabetização-2.pdf
Apostila-Letramento-e-alfabetização-2.pdfApostila-Letramento-e-alfabetização-2.pdf
Apostila-Letramento-e-alfabetização-2.pdflbgsouza
 
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PEEdital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PEblogdoelvis
 
Periodo da escravidAo O Brasil tem seu corpo na América e sua alma na África
Periodo da escravidAo O Brasil tem seu corpo na América e sua alma na ÁfricaPeriodo da escravidAo O Brasil tem seu corpo na América e sua alma na África
Periodo da escravidAo O Brasil tem seu corpo na América e sua alma na Áfricajuekfuek
 
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptxEB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptxIlda Bicacro
 
Slides Lição 7, CPAD, O Perigo Da Murmuração, 2Tr24.pptx
Slides Lição 7, CPAD, O Perigo Da Murmuração, 2Tr24.pptxSlides Lição 7, CPAD, O Perigo Da Murmuração, 2Tr24.pptx
Slides Lição 7, CPAD, O Perigo Da Murmuração, 2Tr24.pptxLuizHenriquedeAlmeid6
 
Formação T.2 do Modulo I da Formação HTML & CSS
Formação T.2 do Modulo I da Formação HTML & CSSFormação T.2 do Modulo I da Formação HTML & CSS
Formação T.2 do Modulo I da Formação HTML & CSSPedroMatos469278
 
Sequência didática Carona 1º Encontro.pptx
Sequência didática Carona 1º Encontro.pptxSequência didática Carona 1º Encontro.pptx
Sequência didática Carona 1º Encontro.pptxCarolineWaitman
 
O que é, de facto, a Educação de Infância
O que é, de facto, a Educação de InfânciaO que é, de facto, a Educação de Infância
O que é, de facto, a Educação de InfânciaHenrique Santos
 
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptxSlides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptxLuizHenriquedeAlmeid6
 
História concisa da literatura brasileira- Alfredo Bosi..pdf
História concisa da literatura brasileira- Alfredo Bosi..pdfHistória concisa da literatura brasileira- Alfredo Bosi..pdf
História concisa da literatura brasileira- Alfredo Bosi..pdfGisellySobral
 

Último (20)

Peça de teatro infantil: A cigarra e as formigas
Peça de teatro infantil: A cigarra e as formigasPeça de teatro infantil: A cigarra e as formigas
Peça de teatro infantil: A cigarra e as formigas
 
Slides Lição 7, Betel, Ordenança para uma vida de fidelidade e lealdade, 2Tr2...
Slides Lição 7, Betel, Ordenança para uma vida de fidelidade e lealdade, 2Tr2...Slides Lição 7, Betel, Ordenança para uma vida de fidelidade e lealdade, 2Tr2...
Slides Lição 7, Betel, Ordenança para uma vida de fidelidade e lealdade, 2Tr2...
 
APRENDA COMO USAR CONJUNÇÕES COORDENATIVAS
APRENDA COMO USAR CONJUNÇÕES COORDENATIVASAPRENDA COMO USAR CONJUNÇÕES COORDENATIVAS
APRENDA COMO USAR CONJUNÇÕES COORDENATIVAS
 
Química-ensino médio ESTEQUIOMETRIA.pptx
Química-ensino médio ESTEQUIOMETRIA.pptxQuímica-ensino médio ESTEQUIOMETRIA.pptx
Química-ensino médio ESTEQUIOMETRIA.pptx
 
425416820-Testes-7º-Ano-Leandro-Rei-Da-Heliria-Com-Solucoes.pdf
425416820-Testes-7º-Ano-Leandro-Rei-Da-Heliria-Com-Solucoes.pdf425416820-Testes-7º-Ano-Leandro-Rei-Da-Heliria-Com-Solucoes.pdf
425416820-Testes-7º-Ano-Leandro-Rei-Da-Heliria-Com-Solucoes.pdf
 
Acróstico - Maio Laranja
Acróstico  - Maio Laranja Acróstico  - Maio Laranja
Acróstico - Maio Laranja
 
Aspectos históricos da educação dos surdos.pptx
Aspectos históricos da educação dos surdos.pptxAspectos históricos da educação dos surdos.pptx
Aspectos históricos da educação dos surdos.pptx
 
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
 
Testes de avaliação português 6º ano .pdf
Testes de avaliação português 6º ano .pdfTestes de avaliação português 6º ano .pdf
Testes de avaliação português 6º ano .pdf
 
Apostila-Letramento-e-alfabetização-2.pdf
Apostila-Letramento-e-alfabetização-2.pdfApostila-Letramento-e-alfabetização-2.pdf
Apostila-Letramento-e-alfabetização-2.pdf
 
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PEEdital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PE
 
Periodo da escravidAo O Brasil tem seu corpo na América e sua alma na África
Periodo da escravidAo O Brasil tem seu corpo na América e sua alma na ÁfricaPeriodo da escravidAo O Brasil tem seu corpo na América e sua alma na África
Periodo da escravidAo O Brasil tem seu corpo na América e sua alma na África
 
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptxEB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
 
Poema - Maio Laranja
Poema - Maio Laranja Poema - Maio Laranja
Poema - Maio Laranja
 
Slides Lição 7, CPAD, O Perigo Da Murmuração, 2Tr24.pptx
Slides Lição 7, CPAD, O Perigo Da Murmuração, 2Tr24.pptxSlides Lição 7, CPAD, O Perigo Da Murmuração, 2Tr24.pptx
Slides Lição 7, CPAD, O Perigo Da Murmuração, 2Tr24.pptx
 
Formação T.2 do Modulo I da Formação HTML & CSS
Formação T.2 do Modulo I da Formação HTML & CSSFormação T.2 do Modulo I da Formação HTML & CSS
Formação T.2 do Modulo I da Formação HTML & CSS
 
Sequência didática Carona 1º Encontro.pptx
Sequência didática Carona 1º Encontro.pptxSequência didática Carona 1º Encontro.pptx
Sequência didática Carona 1º Encontro.pptx
 
O que é, de facto, a Educação de Infância
O que é, de facto, a Educação de InfânciaO que é, de facto, a Educação de Infância
O que é, de facto, a Educação de Infância
 
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptxSlides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
 
História concisa da literatura brasileira- Alfredo Bosi..pdf
História concisa da literatura brasileira- Alfredo Bosi..pdfHistória concisa da literatura brasileira- Alfredo Bosi..pdf
História concisa da literatura brasileira- Alfredo Bosi..pdf
 

(ACH2055) Arquitetura de Computadores - Aula 03

  • 1. Arquitetura de Computadores ACH2055 Aula 03 – Assembly MIPS (Parte I) Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 1 / 37
  • 2. A Arquitetura MIPS Defini¸c˜ao Microprocessor Without Interlocked Pipeline Stages Desenvolvida pela MIPS Technologies (1984) Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 2 / 37
  • 3. A Arquitetura MIPS Defini¸c˜ao Microprocessor Without Interlocked Pipeline Stages Desenvolvida pela MIPS Technologies (1984) Trata-se de uma arquitetura de conjunto de instru¸c˜oes Instruction Set Architecture – ISA No caso do MIPS, RISC (veremos mais adiante) Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 2 / 37
  • 4. A Arquitetura MIPS Defini¸c˜ao Microprocessor Without Interlocked Pipeline Stages Desenvolvida pela MIPS Technologies (1984) Trata-se de uma arquitetura de conjunto de instru¸c˜oes Instruction Set Architecture – ISA No caso do MIPS, RISC (veremos mais adiante) Presentes em diversos sistemas Videogames, roteadores etc Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 2 / 37
  • 5. A Arquitetura MIPS Vantagens Instru¸c˜oes tˆem tamanho fixo 32 e 64 bits X86 n˜ao tem tamanho fixo S˜ao mais f´aceis de se manipular, especialmente por uma pipeline (veremos mais adiante) Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 3 / 37
  • 6. A Arquitetura MIPS Vantagens Instru¸c˜oes tˆem tamanho fixo 32 e 64 bits X86 n˜ao tem tamanho fixo S˜ao mais f´aceis de se manipular, especialmente por uma pipeline (veremos mais adiante) As instru¸c˜oes seguem um formato geral fixo OPERAC¸ ˜AO <lista de operandos> Ex: ADD $s1, $s2, $s3 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 3 / 37
  • 7. Programando em MIPS Simuladores Wemips (online) https: //rivoire.cs.sonoma. edu/cs351/wemips/ Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 4 / 37
  • 8. Programando em MIPS Simuladores Wemips (online) https: //rivoire.cs.sonoma. edu/cs351/wemips/ Mars (.jar) http://courses. missouristate.edu/ kenvollmar/mars/ Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 4 / 37
  • 9. Programando em MIPS Registradores MIPS possui 32 registradores de uso geral Numerados de 0 a 31 Em geral referenciados pelo seu n´umero ($0 a $31) ou nome (ex: $t1) Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 5 / 37
  • 10. Programando em MIPS Registradores MIPS possui 32 registradores de uso geral Numerados de 0 a 31 Em geral referenciados pelo seu n´umero ($0 a $31) ou nome (ex: $t1) Embora possam ser usados livremente, h´a uma conven¸c˜ao em seu uso Seguida por programadores e compiladores Seguir essa conven¸c˜ao permite que um c´odigo possa funcionar com outros em MIPS Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 5 / 37
  • 11. Programando em MIPS Registradores – Conven¸c˜ao Nome N´umero Uso zero 0 Constante zero at 1 Reservado para o montador v0 – v1 2 – 3 Registradores de resultado a0 – a3 4 – 7 Registradores de argumentos t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios s0 – s7 16 – 23 Registradores salvos k0 – k1 26 – 27 Registradores do Kernel gp 28 Global Pointer sp 29 Stack Pointer fp 30 Frame Pointer ra 31 Return Address Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
  • 12. Programando em MIPS Registradores – Conven¸c˜ao zero sempre cont´em o valor 0 (hard-wired) Nome N´umero Uso zero 0 Constante zero at 1 Reservado para o montador v0 – v1 2 – 3 Registradores de resultado a0 – a3 4 – 7 Registradores de argumentos t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios s0 – s7 16 – 23 Registradores salvos k0 – k1 26 – 27 Registradores do Kernel gp 28 Global Pointer sp 29 Stack Pointer fp 30 Frame Pointer ra 31 Return Address Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
  • 13. Programando em MIPS Registradores – Conven¸c˜ao Iniciados em v guardam a avalia¸c˜ao de uma express˜ao ou os resultados de uma fun¸c˜ao Nome N´umero Uso zero 0 Constante zero at 1 Reservado para o montador v0 – v1 2 – 3 Registradores de resultado a0 – a3 4 – 7 Registradores de argumentos t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios s0 – s7 16 – 23 Registradores salvos k0 – k1 26 – 27 Registradores do Kernel gp 28 Global Pointer sp 29 Stack Pointer fp 30 Frame Pointer ra 31 Return Address Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
  • 14. Programando em MIPS Registradores – Conven¸c˜ao Iniciados em a guar- dam argumentos para as rotinas Nome N´umero Uso zero 0 Constante zero at 1 Reservado para o montador v0 – v1 2 – 3 Registradores de resultado a0 – a3 4 – 7 Registradores de argumentos t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios s0 – s7 16 – 23 Registradores salvos k0 – k1 26 – 27 Registradores do Kernel gp 28 Global Pointer sp 29 Stack Pointer fp 30 Frame Pointer ra 31 Return Address Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
  • 15. Programando em MIPS Registradores – Conven¸c˜ao Iniciados em t guardam valores que n˜ao precisam ser preservados entre chamadas Nome N´umero Uso zero 0 Constante zero at 1 Reservado para o montador v0 – v1 2 – 3 Registradores de resultado a0 – a3 4 – 7 Registradores de argumentos t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios s0 – s7 16 – 23 Registradores salvos k0 – k1 26 – 27 Registradores do Kernel gp 28 Global Pointer sp 29 Stack Pointer fp 30 Frame Pointer ra 31 Return Address Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
  • 16. Programando em MIPS Registradores – Conven¸c˜ao Iniciados em s guardam valores que precisam ser preservados entre chamadas Nome N´umero Uso zero 0 Constante zero at 1 Reservado para o montador v0 – v1 2 – 3 Registradores de resultado a0 – a3 4 – 7 Registradores de argumentos t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios s0 – s7 16 – 23 Registradores salvos k0 – k1 26 – 27 Registradores do Kernel gp 28 Global Pointer sp 29 Stack Pointer fp 30 Frame Pointer ra 31 Return Address Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
  • 17. Programando em MIPS Registradores – Conven¸c˜ao Iniciados em k s˜ao reservados para o kernel do S.O. Nome N´umero Uso zero 0 Constante zero at 1 Reservado para o montador v0 – v1 2 – 3 Registradores de resultado a0 – a3 4 – 7 Registradores de argumentos t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios s0 – s7 16 – 23 Registradores salvos k0 – k1 26 – 27 Registradores do Kernel gp 28 Global Pointer sp 29 Stack Pointer fp 30 Frame Pointer ra 31 Return Address Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
  • 18. Programando em MIPS Registradores – Conven¸c˜ao Fonte: [1] gp aponta para o endere¸co do fim dos primeiros 32K no segmento de dados est´aticos Nome N´umero Uso zero 0 Constante zero at 1 Reservado para o montador v0 – v1 2 – 3 Registradores de resultado a0 – a3 4 – 7 Registradores de argumentos t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios s0 – s7 16 – 23 Registradores salvos k0 – k1 26 – 27 Registradores do Kernel gp 28 Global Pointer sp 29 Stack Pointer fp 30 Frame Pointer ra 31 Return Address Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
  • 19. Programando em MIPS Registradores – Conven¸c˜ao Fonte: [1] Permitindo assim acesso r´apido aos primeiros 64K desse segmento Nome N´umero Uso zero 0 Constante zero at 1 Reservado para o montador v0 – v1 2 – 3 Registradores de resultado a0 – a3 4 – 7 Registradores de argumentos t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios s0 – s7 16 – 23 Registradores salvos k0 – k1 26 – 27 Registradores do Kernel gp 28 Global Pointer sp 29 Stack Pointer fp 30 Frame Pointer ra 31 Return Address Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
  • 20. Programando em MIPS Registradores – Conven¸c˜ao Fonte: [1] sp guarda o endere¸co do ´ultimo local da pilha Nome N´umero Uso zero 0 Constante zero at 1 Reservado para o montador v0 – v1 2 – 3 Registradores de resultado a0 – a3 4 – 7 Registradores de argumentos t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios s0 – s7 16 – 23 Registradores salvos k0 – k1 26 – 27 Registradores do Kernel gp 28 Global Pointer sp 29 Stack Pointer fp 30 Frame Pointer ra 31 Return Address Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
  • 21. Programando em MIPS Registradores – Conven¸c˜ao fp guarda o endere¸co da primeira palavra da moldura de pilha do procedimento Nome N´umero Uso zero 0 Constante zero at 1 Reservado para o montador v0 – v1 2 – 3 Registradores de resultado a0 – a3 4 – 7 Registradores de argumentos t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios s0 – s7 16 – 23 Registradores salvos k0 – k1 26 – 27 Registradores do Kernel gp 28 Global Pointer sp 29 Stack Pointer fp 30 Frame Pointer ra 31 Return Address Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
  • 22. Programando em MIPS Registradores – Conven¸c˜ao ra guarda o endere¸co de retorno de uma chamada de procedimento Nome N´umero Uso zero 0 Constante zero at 1 Reservado para o montador v0 – v1 2 – 3 Registradores de resultado a0 – a3 4 – 7 Registradores de argumentos t0 – t9 8 – 15, 24 – 25 Registradores tempor´arios s0 – s7 16 – 23 Registradores salvos k0 – k1 26 – 27 Registradores do Kernel gp 28 Global Pointer sp 29 Stack Pointer fp 30 Frame Pointer ra 31 Return Address Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 6 / 37
  • 23. Programando em MIPS Instru¸c˜oes Aritm´eticas Cada instru¸c˜ao executa uma ´unica opera¸c˜ao, possuindo 3 campos 2 operandos e um local para armazenamento do resultado Cada um correspondendo a um dos 32 registradores dispon´ıveis Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 7 / 37
  • 24. Programando em MIPS Instru¸c˜oes Aritm´eticas Cada instru¸c˜ao executa uma ´unica opera¸c˜ao, possuindo 3 campos 2 operandos e um local para armazenamento do resultado Cada um correspondendo a um dos 32 registradores dispon´ıveis Formato: opera¸c˜ao $resultado, $operando1, $operando2 Ex: add $t0, $s2, $s3 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 7 / 37
  • 25. Programando em MIPS Principais Instru¸c˜oes Aritm´eticas Adi¸c˜ao add $t0, $s2, $s3 Subtra¸c˜ao sub $t0, $s2, $s3 Multiplica¸c˜ao mul $t0, $s2, $s3 Divis˜ao div $t0, $s2, $s3 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 8 / 37
  • 26. Programando em MIPS Principais Instru¸c˜oes Aritm´eticas Adi¸c˜ao add $t0, $s2, $s3 Subtra¸c˜ao sub $t0, $s2, $s3 Multiplica¸c˜ao mul $t0, $s2, $s3 Divis˜ao div $t0, $s2, $s3 Todas com vers˜oes para inteiros sem sinal addu, subu, divu Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 8 / 37
  • 27. Programando em MIPS Principais Instru¸c˜oes Aritm´eticas Adi¸c˜ao add $t0, $s2, $s3 Subtra¸c˜ao sub $t0, $s2, $s3 Multiplica¸c˜ao mul $t0, $s2, $s3 Divis˜ao div $t0, $s2, $s3 Todas com vers˜oes para inteiros sem sinal addu, subu, divu Para ponto flutuante etc add.d, sub.d, mul.d, div.d Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 8 / 37
  • 28. Programando em MIPS Constantes (valores imediatos) Essas instru¸c˜oes, contudo, trabalham com registradores pr´e-carregados Como carregar esses registradores? Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 9 / 37
  • 29. Programando em MIPS Constantes (valores imediatos) Essas instru¸c˜oes, contudo, trabalham com registradores pr´e-carregados Como carregar esses registradores? Com operadores imediatos li $s2, 10 (load immediate – a constante 10 ´e armazenada no registrador $s2) Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 9 / 37
  • 30. Programando em MIPS Constantes (valores imediatos) Essas instru¸c˜oes, contudo, trabalham com registradores pr´e-carregados Como carregar esses registradores? Com operadores imediatos li $s2, 10 (load immediate – a constante 10 ´e armazenada no registrador $s2) Instru¸c˜oes aritm´eticas tamb´em tˆem vers˜oes assim: Ex: addi $t0, $s2, 4 Presentes apenas para soma e subtra¸c˜ao Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 9 / 37
  • 31. Programando em MIPS Constantes (valores imediatos) De fato, a instru¸c˜ao li n˜ao existe Trata-se de uma pseudo-instru¸c˜ao Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 10 / 37
  • 32. Programando em MIPS Constantes (valores imediatos) De fato, a instru¸c˜ao li n˜ao existe Trata-se de uma pseudo-instru¸c˜ao Traduzida pelo montador como “addiu destino, 0, valor” addiu – add immediate unsigned Ex: li $s4, 10 ⇒ addiu $s4, $zero, 10 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 10 / 37
  • 33. Programando em MIPS Constantes (valores imediatos) De fato, a instru¸c˜ao li n˜ao existe Trata-se de uma pseudo-instru¸c˜ao Traduzida pelo montador como “addiu destino, 0, valor” addiu – add immediate unsigned Ex: li $s4, 10 ⇒ addiu $s4, $zero, 10 Ou “ori destino, 0, valor” ori – or immediate Ex: li $s4, 10 ⇒ ori $s4, $zero, 10 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 10 / 37
  • 34. Programando em MIPS Estrutura de um Programa MARS Dividido em 2 partes: declara¸c˜ao e c´odigo Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 11 / 37
  • 35. Programando em MIPS Estrutura de um Programa MARS Dividido em 2 partes: declara¸c˜ao e c´odigo Declara¸c˜ao Usa a diretiva .data Itens subsequentes ser˜ao armazenados no segmento de dados, no pr´oximo endere¸co dispon´ıvel Se for fornecido um endere¸co (.data end → opcional), ser˜ao armazenados a partir desse endere¸co Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 11 / 37
  • 36. Programando em MIPS Estrutura de um Programa MARS Dividido em 2 partes: declara¸c˜ao e c´odigo Declara¸c˜ao Usa a diretiva .data Itens subsequentes ser˜ao armazenados no segmento de dados, no pr´oximo endere¸co dispon´ıvel Se for fornecido um endere¸co (.data end → opcional), ser˜ao armazenados a partir desse endere¸co Formato dos itens: nome: .tipo de armazenagem valor Ex: var1: .word 10 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 11 / 37
  • 37. Programando em MIPS Estrutura de um Programa MARS Palavras seguidas por ‘:’ (ex: var1) s˜ao r´otulos, marcando o endere¸co de mem´oria a seguir (onde 10 est´a na RAM) Dividido em 2 partes: declara¸c˜ao e c´odigo Declara¸c˜ao Usa a diretiva .data Itens subsequentes ser˜ao armazenados no segmento de dados, no pr´oximo endere¸co dispon´ıvel Se for fornecido um endere¸co (.data end → opcional), ser˜ao armazenados a partir desse endere¸co Formato dos itens: nome: .tipo de armazenagem valor Ex: var1: .word 10 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 11 / 37
  • 38. Programando em MIPS Estrutura de um Programa C´odigo Usa a diretiva .text Itens subsequentes ser˜ao armazenados no segmento de texto Se for fornecido um endere¸co (.text end → opcional), ser˜ao armazenados a partir desse endere¸co Parte do programa em que as instru¸c˜oes a serem executadas s˜ao escritas Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 12 / 37
  • 39. Programando em MIPS Estrutura de um Programa C´odigo Usa a diretiva .text Itens subsequentes ser˜ao armazenados no segmento de texto Se for fornecido um endere¸co (.text end → opcional), ser˜ao armazenados a partir desse endere¸co Parte do programa em que as instru¸c˜oes a serem executadas s˜ao escritas De in´ıcio, focaremos apenas nessa parte Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 12 / 37
  • 40. Programando em MIPS Um Primeiro Programa Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
  • 41. Programando em MIPS Um Primeiro Programa Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
  • 42. Programando em MIPS Um Primeiro Programa Coment´arios iniciam com # e v˜ao at´e o final da linha Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
  • 43. Programando em MIPS Um Primeiro Programa Montamos o programa... Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
  • 44. Programando em MIPS Um Primeiro Programa Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
  • 45. Programando em MIPS Um Primeiro Programa E ent˜ao rodamos Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
  • 46. Programando em MIPS Um Primeiro Programa Podemos visualizar o conte´udo dos registradores Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 13 / 37
  • 47. Programando em MIPS Instru¸c˜oes Relacionais Possuem o mesmo formato das aritm´eticas opera¸c˜ao $resultado, $operando1, $operando2 Ex: slt $t0, $s2, $s3 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 14 / 37
  • 48. Programando em MIPS Instru¸c˜oes Relacionais Possuem o mesmo formato das aritm´eticas opera¸c˜ao $resultado, $operando1, $operando2 Ex: slt $t0, $s2, $s3 Existem, contudo, apenas 2 instru¸c˜oes SLT e SLTI De fato, h´a mais duas, relacionadas a desvios, que veremos mais adiante Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 14 / 37
  • 49. Programando em MIPS Instru¸c˜oes Relacionais SLT – Set on Less Than slt $t0, $s1, $s2 $t0 ser´a 1 se $s1 < $s2. Do contr´ario, $t0 ser´a 0 Equivale a $st0 ← $s1 < $s2 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 15 / 37
  • 50. Programando em MIPS Instru¸c˜oes Relacionais SLT – Set on Less Than slt $t0, $s1, $s2 $t0 ser´a 1 se $s1 < $s2. Do contr´ario, $t0 ser´a 0 Equivale a $st0 ← $s1 < $s2 SLTI – Set on Less Than Immediate (com sinal) slti $t0, $s1, 10 Mesmo comportamento de slt Exite tamb´em a vers˜ao para unsigned int: sltiu Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 15 / 37
  • 51. Programando em MIPS Instru¸c˜oes L´ogicas S˜ao 7 as instru¸c˜oes l´ogicas em MIPS Deslocamento `a esquerda (SLL) Deslocamento `a direita (SRL) And bit a bit (AND, ANDI) Or bit a bit (OR, ORI) Nor bit a bit (NOR) Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 16 / 37
  • 52. Programando em MIPS Instru¸c˜oes L´ogicas SLL – Shift Left Logical sll resultado, origem, deslocamento sll $t2, $s0, 4 Desloque o conte´udo de $s0 4 bits para a esquerda e armazene o resultado em $t2 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 17 / 37
  • 53. Programando em MIPS Instru¸c˜oes L´ogicas SLL – Shift Left Logical sll resultado, origem, deslocamento sll $t2, $s0, 4 Desloque o conte´udo de $s0 4 bits para a esquerda e armazene o resultado em $t2 SRL – Shift Right Logical srl resultado, origem, deslocamento srl $t2, $s0, 2 Desloque o conte´udo de $s0 2 bits para a direita e armazene o resultado em $t2 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 17 / 37
  • 54. Programando em MIPS Instru¸c˜oes L´ogicas S˜ao chamadas l´ogicas por n˜ao preservarem sinal nem distin- guirem expoente de mantissa SLL – Shift Left Logical sll resultado, origem, deslocamento sll $t2, $s0, 4 Desloque o conte´udo de $s0 4 bits para a esquerda e armazene o resultado em $t2 SRL – Shift Right Logical srl resultado, origem, deslocamento srl $t2, $s0, 2 Desloque o conte´udo de $s0 2 bits para a direita e armazene o resultado em $t2 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 17 / 37
  • 55. Programando em MIPS Instru¸c˜oes L´ogicas Os bits s˜ao simplesmente mo- vidos sem preocupa¸c˜ao com seu significado SLL – Shift Left Logical sll resultado, origem, deslocamento sll $t2, $s0, 4 Desloque o conte´udo de $s0 4 bits para a esquerda e armazene o resultado em $t2 SRL – Shift Right Logical srl resultado, origem, deslocamento srl $t2, $s0, 2 Desloque o conte´udo de $s0 2 bits para a direita e armazene o resultado em $t2 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 17 / 37
  • 56. Programando em MIPS Instru¸c˜oes L´ogicas AND and resultado, origem1, origem2 and $t0, $s1, $s2 $t0 recebe o resultado de um AND bit a bit entre $s1 e $s2 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 18 / 37
  • 57. Programando em MIPS Instru¸c˜oes L´ogicas AND and resultado, origem1, origem2 and $t0, $s1, $s2 $t0 recebe o resultado de um AND bit a bit entre $s1 e $s2 ANDI – AND Immediate andi resultado, origem1, valor andi $t0, $s2, 10 $t0 recebe o resultado de um AND bit a bit entre $s2 e 10 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 18 / 37
  • 58. Programando em MIPS Instru¸c˜oes L´ogicas OR or resultado, origem1, origem2 or $t0, $s1, $s2 $t0 recebe o resultado de um OR bit a bit entre $s1 e $s2 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 19 / 37
  • 59. Programando em MIPS Instru¸c˜oes L´ogicas OR or resultado, origem1, origem2 or $t0, $s1, $s2 $t0 recebe o resultado de um OR bit a bit entre $s1 e $s2 ORI – OR Immediate ori resultado, origem1, valor ori $t0, $s2, 10 $t0 recebe o resultado de um OR bit a bit entre $s2 e 10 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 19 / 37
  • 60. Programando em MIPS Instru¸c˜oes L´ogicas NOR Implementado assim para seguir o padr˜ao de 2 operandos Podemos, contudo, simular o NOT usando NOR: A NOR 0 NOT (A OR 0) NOT A Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 20 / 37
  • 61. Programando em MIPS Instru¸c˜oes L´ogicas NOR Implementado assim para seguir o padr˜ao de 2 operandos Podemos, contudo, simular o NOT usando NOR: A NOR 0 NOT (A OR 0) NOT A nor resultado, origem1, origem2 nor $t0, $s1, $zero $t0 recebe o resultado de um NOT bit a bit em $s1 Lembre-se que todos os 32 (ou 64) bits s˜ao invertidos Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 20 / 37
  • 62. Programando em MIPS Endere¸camento de Mem´oria MIPS endere¸ca cada byte de mem´oria Com 32 bits, endere¸cos de palavras adjacentes diferem em 4 Temos assim 232 ÷ 4 = 230 palavras de mem´oria Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 21 / 37
  • 63. Programando em MIPS Endere¸camento de Mem´oria MIPS endere¸ca cada byte de mem´oria Com 32 bits, endere¸cos de palavras adjacentes diferem em 4 Temos assim 232 ÷ 4 = 230 palavras de mem´oria A mem´oria ent˜ao ´e vista como um arranjo unidimensional Com o endere¸co funcionando como ´ındice Fonte: [1] Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 21 / 37
  • 64. Programando em MIPS Endere¸camento de Mem´oria Mas e como os bytes est˜ao arranjados dentro da palavra? O mais significativo (big-endian) ou o menos significativo (little-endian) no endere¸co mais baixo? Fonte: [1] Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 22 / 37
  • 65. Programando em MIPS Endere¸camento de Mem´oria Mas e como os bytes est˜ao arranjados dentro da palavra? O mais significativo (big-endian) ou o menos significativo (little-endian) no endere¸co mais baixo? Big-endian Little-endian Fonte: [1] Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 22 / 37
  • 66. Programando em MIPS Endere¸camento de Mem´oria Mas e como os bytes est˜ao arranjados dentro da palavra? O mais significativo (big-endian) ou o menos significativo (little-endian) no endere¸co mais baixo? MIPS ´e do tipo big-endian Big-endian Little-endian Fonte: [1] Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 22 / 37
  • 67. Programando em MIPS Instru¸c˜oes de Acesso `a Mem´oria MIPS possui diversas instru¸c˜oes de acesso `a mem´oria As principais sendo lw e sw Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 23 / 37
  • 68. Programando em MIPS Instru¸c˜oes de Acesso `a Mem´oria MIPS possui diversas instru¸c˜oes de acesso `a mem´oria As principais sendo lw e sw LW – Load Word Transfere uma palavra da RAM para um registrador lw registrador, deslocamento(registrador base) lw $t0, 30($s0) Carregue em $t0 a palavra no endere¸co correspondente a $s0 + 30 O deslocamento (aqui 30) pode ser negativo Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 23 / 37
  • 69. Programando em MIPS Instru¸c˜oes de Acesso `a Mem´oria SW – Store Word Transfere uma palavra de um registrador para a RAM sw registrador, deslocamento(registrador base) sw $t0, 30($s0) Armazene o conte´udo de $t0 no endere¸co correspondente a $s0 + 30 Novamente, o deslocamento pode ser negativo Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 24 / 37
  • 70. Programando em MIPS Instru¸c˜oes de Acesso `a Mem´oria E como sabemos o endere¸co de mem´oria? Ou especificamos, carregando o registrador com li (cuidado!!!) Ou deixamos que o montador tome conta disso Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 25 / 37
  • 71. Programando em MIPS Instru¸c˜oes de Acesso `a Mem´oria E como sabemos o endere¸co de mem´oria? Ou especificamos, carregando o registrador com li (cuidado!!!) Ou deixamos que o montador tome conta disso Como? Usando as diretivas de montador MIPS Ex: .data v1: .word 20 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 25 / 37
  • 72. Programando em MIPS Instru¸c˜oes de Acesso `a Mem´oria Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 26 / 37
  • 73. Programando em MIPS Instru¸c˜oes de Acesso `a Mem´oria Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 26 / 37
  • 74. Programando em MIPS Instru¸c˜oes de Acesso `a Mem´oria “lw registrador, r´otulo” ´e uma pseudo-instru¸c˜ao Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 26 / 37
  • 75. Programando em MIPS Instru¸c˜oes de Acesso `a Mem´oria Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 27 / 37
  • 76. Programando em MIPS Arranjos Suponha que temos um arranjo em mem´oria .data arr: .word 2, 0, -1, 5, -3, 2, 2, 10, 9, -2 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 28 / 37
  • 77. Programando em MIPS Arranjos Suponha que temos um arranjo em mem´oria .data arr: .word 2, 0, -1, 5, -3, 2, 2, 10, 9, -2 Como acessar o elemento arr[3]? Precisamos armazenar o endere¸co-base do arranjo em um registrador, para calcular o deslocamento la $t1, arr Pseudo-instru¸c˜ao que carrega em $t1 o endere¸co representado por arr Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 28 / 37
  • 78. Programando em MIPS Arranjos Como acessar o elemento arr[3] (cont.)? lw $t2, 3($t1)? Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 29 / 37
  • 79. Programando em MIPS Arranjos Como acessar o elemento arr[3] (cont.)? lw $t2, 3($t1)? Mas armazenamos palavras, n˜ao bytes O ´ındice precisa ser multiplicado pelo tamanho da palavra Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 29 / 37
  • 80. Programando em MIPS Arranjos Como acessar o elemento arr[3] (cont.)? lw $t2, 3($t1)? Mas armazenamos palavras, n˜ao bytes O ´ındice precisa ser multiplicado pelo tamanho da palavra Ent˜ao lw $t2, 12($t1) .data arr: .word 2, 0, -1, 5, -3, 2, 2, 10, 9, -2 .text la $t1, arr lw $t2, 12($t1) Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 29 / 37
  • 81. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes MIPS possui 3 fam´ılias de instru¸c˜oes: Instru¸c˜oes do Tipo R (Register) add $s1, $s2, $s3 sll $t2, $s0, 4 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 30 / 37
  • 82. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes MIPS possui 3 fam´ılias de instru¸c˜oes: Instru¸c˜oes do Tipo R (Register) add $s1, $s2, $s3 sll $t2, $s0, 4 Instru¸c˜oes do Tipo I (Immediate) addi $t0, $s2, 4 lw $t2, 12($t1) Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 30 / 37
  • 83. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes MIPS possui 3 fam´ılias de instru¸c˜oes: Instru¸c˜oes do Tipo R (Register) add $s1, $s2, $s3 sll $t2, $s0, 4 Instru¸c˜oes do Tipo I (Immediate) addi $t0, $s2, 4 lw $t2, 12($t1) Instru¸c˜oes do Tipo J (Jump) Usadas em desvios (mais adiante) Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 30 / 37
  • 84. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes Instru¸c˜oes Tipo R (Register) Fonte: [1] Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
  • 85. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes Instru¸c˜oes Tipo R (Register) Fonte: [1] C´odigo da opera¸c˜ao (opcode) Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
  • 86. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes Instru¸c˜oes Tipo R (Register) Fonte: [1] Primeiro registrador-fonte da opera¸c˜ao Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
  • 87. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes Instru¸c˜oes Tipo R (Register) Fonte: [1] Segundo registrador-fonte da opera¸c˜ao Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
  • 88. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes Instru¸c˜oes Tipo R (Register) Fonte: [1] Registrador-destino (recebe o resultado da opera¸c˜ao) Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
  • 89. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes Instru¸c˜oes Tipo R (Register) Fonte: [1] Shift amount – deslocamento (usado em instru¸c˜oes como sll e srl) Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
  • 90. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes Instru¸c˜oes Tipo R (Register) Fonte: [1] C´odigo de fun¸c˜ao – seleciona a variante espec´ıfica da opera¸c˜ao no campo op Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
  • 91. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes Instru¸c˜oes Tipo R (Register) Fonte: [1] Campos n˜ao usados s˜ao carregados com zero Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 31 / 37
  • 92. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes Instru¸c˜oes Tipo I (Immediate) Fonte: [1] Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
  • 93. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes Instru¸c˜oes Tipo I (Immediate) Fonte: [1] C´odigo da opera¸c˜ao (opcode) Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
  • 94. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes Instru¸c˜oes Tipo I (Immediate) Fonte: [1] Registrador-fonte da opera¸c˜ao Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
  • 95. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes Instru¸c˜oes Tipo I (Immediate) Fonte: [1] Registrador de destino da opera¸c˜ao Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
  • 96. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes Instru¸c˜oes Tipo I (Immediate) Fonte: [1] Valor (constante ou endere¸co) usado na opera¸c˜ao Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
  • 97. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes Instru¸c˜oes Tipo I (Immediate) Fonte: [1] Note que isso nos d´a um limite de ±215 bytes de deslocamento (h´a o bit de sinal) em lw $reg1, desl($reg2) Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
  • 98. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes Instru¸c˜oes Tipo I (Immediate) Fonte: [1] Por isso, ao apontar para o byte 32K no segmento de dados, $gp d´a acesso aos primeiros 64K desse segmento Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 32 / 37
  • 99. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes Instru¸c˜oes Tipo J (Jump) Fonte: Adaptada de [1] Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 33 / 37
  • 100. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes Instru¸c˜oes Tipo J (Jump) Fonte: Adaptada de [1] C´odigo da opera¸c˜ao (opcode) Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 33 / 37
  • 101. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes Instru¸c˜oes Tipo J (Jump) Fonte: Adaptada de [1] Endere¸co de mem´oria Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 33 / 37
  • 102. Programando em MIPS Codifica¸c˜ao das Instru¸c˜oes Fonte: Adaptada de [1] Os formatos s˜ao diferenciados no circuito pelo valor no campo op Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 34 / 37
  • 103. Programando em MIPS Pseudo-instru¸c˜oes Instru¸c˜oes adicionadas pelo montador, para simplificar algumas opera¸c˜oes Tratadas por ele como se fossem instru¸c˜oes leg´ıtimas Traduzidas para instru¸c˜oes reais Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 35 / 37
  • 104. Programando em MIPS Pseudo-instru¸c˜oes Instru¸c˜oes adicionadas pelo montador, para simplificar algumas opera¸c˜oes Tratadas por ele como se fossem instru¸c˜oes leg´ıtimas Traduzidas para instru¸c˜oes reais Exemplos: Pseudo-instru¸c˜ao Expans˜ao li $s4, 10 addiu $s4, $zero, 10 move $t0, $t1 add $t0, $zero, $t1 Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 35 / 37
  • 105. Referˆencias 1 Patterson, D.A.; Hennessy, J.L. (2013): Computer Organization and Design: The Hardware/Software Interface. Morgan Kaufmann. 5a ed. Para detalhes sobre MIPS consulte tamb´em o Apˆendice A 2 https://www.embarcados.com.br/arquitetura-de-conjunto- de-instrucoes-mips/ Curso bastante completo, em portuguˆes 3 https://sweetcode.io/building-first-simple-program- mips-assembly-language/ Tutorial b´asico passo a passo 4 https://sites.cs.ucsb.edu/~franklin/64/lectures/ mipsassemblytutorial.pdf Tutorial mais profundo Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 36 / 37
  • 106. Referˆencias 5 WEMIPS https://rivoire.cs.sonoma.edu/cs351/wemips/ Simulador MIPS online 6 MARS (MIPS Assembler and Runtime Simulator) http://courses.missouristate.edu/kenvollmar/mars/ Simulador MIPS (.jar, multiplataforma) 7 https://en.wikipedia.org/wiki/Logical_shift Diferen¸ca entre deslocamento l´ogico e aritm´etico Norton Trevisan Roman (norton@usp.br) 1 de novembro de 2019 37 / 37