Buscar

MIPS Arquitetura e Linguagem Assembly

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

MIPS
Arquitetura  e  Linguagem  
Assembly
Tipos  de  Dados  e  Literais
• Tipos de dados:
– Todas as instruções são de 32 bits
– Byte, halfword (2 bytes), word (4 bytes)
– Um caractere ocupa 1 byte
– Um inteiro ocupa 1 word (4 bytes)
• Números:
– Digitados naturalmente, ex.: 4
– Caracteres são digitados com aspas simples, ex.:‘b’
– Strings são digitados com aspas duplas, ex.: ”Umstring”
Registradores
• 32  registradores  de  propósito  geralll
• Precedidos  por  $ nas  instruções  assembly
• Dois  formatos  para  endereçamento:
– Numérico:  $0 até  $31
– Nomes  alternativos,  ex.:  $t1,  $sp
Registradores
Nome Número Uso 
$zero 0 constante 0 
$at 1 reservado para o montador 
$v0 2 avaliação de expressão e resultados de uma função 
$v1 3 avaliação de expressão e resultados de uma função 
$a0 4 argumento 1 
$a1 5 argumento 2 
$a2 6 argumento 3 
$a3 7 argumento 4 
!
Registradores
Nome Número Uso 
$t0 8 temporário (não preservado pela chamada) 
$t1 9 temporário (não preservado pela chamada) 
$t2 10 temporário (não preservado pela chamada) 
$t3 11 temporário (não preservado pela chamada) 
$t4 12 temporário (não preservado pela chamada) 
$t5 13 temporário (não preservado pela chamada) 
$t6 14 temporário (não preservado pela chamada) 
$t7 15 temporário (não preservado pela chamada) 
!
Registradores
Nome Número Uso 
$s0 16 temporário salvo (preservado pela chamada) 
$s1 17 temporário salvo (preservado pela chamada) 
$s2 18 temporário salvo (preservado pela chamada) 
$s3 19 temporário salvo (preservado pela chamada) 
$s4 20 temporário salvo (preservado pela chamada) 
$s5 21 temporário salvo (preservado pela chamada) 
$s6 22 temporário salvo (preservado pela chamada) 
$s7 23 temporário salvo (preservado pela chamada) 
!
Registradores
Nome Número Uso 
$t8 24 temporário (não preservado pela chamada) 
$t9 25 temporário (não preservado pela chamada) 
$k0 26 reservado para o kernel do sistema operacional 
$k1 27 reservado para o kernel do sistema operacional 
$gp 28 ponteiro para área global 
$sp 29 stack pointer 
$fp 30 frame pointer 
$ra 31 endereço de retorno (usado por chamada de função)!
!
Estrutura  do  Programa
§ Arquivo de texto plano com declarações
de dados, código do programa
§ Seção de declaração dos dados seguida
pela seção de código do programa
Estrutura  do  Programa
• Declarações  de  dados
– Colocadas  na  seção  do  programa  identificada  
com  a  diretiva  .data
– Declara  os  nomes  de  variáveis  usadas  no  
programa
• Armazenadas  na  memória  principal  (RAM)
Estrutura  do  Programa
• Código
– Colocado  na  seção  do  programa  identificada  
com  a  diretirva .text
– Contém  o  código  do  programa  (instruções)
– Ponto  de  inicio,  ex.:  rótulo  main
– Ponto  de  encerramento:  exit (chamada  de  
sistema)
Comentário
• Inicia  com  o  caractere  #
• Termina  no  final  da  linha
Modelo  de  programa
# Comentario com o nome do programa e descrição da funcao
# Template.asm
# Estrutura basica de um programa em linguagem assembly do MIPS
.data # as declarações de variaveis seguem essa linha
# ...
.text # as instrucoes seguem essa linha
main: # indica o inicio do codigo (primeira instrucao
# a executar)
# ...
# Fim do programa
# deixe uma linha em branco por causa do simulador
Declarações  de  dados
• Formato  das  declarações:
nome: tipo_de_dados valor(es)
– cria  uma  variável  na  memória,  com  o  tipo  
especificado,  o  nome  e  valores  dados.
– valor(es)  usualmente  dão  o  valor  inicial;;
– para  reservar  memória  use  o  tipo  .space,  dê  
o  número  de  espaços  a  serem  alocados.
– Obs:  rótulos  sempre  são  seguidos  de  dois  
pontos  (  :  )
Declarações  de  dados
• Exemplo:
var1: .word 3
array1: .byte 'a','b’
array2: .space 40
– var1:  variável  inteira  inicializada  com  valor  3
– array1:  vetor  de  caracteres  inicializado  com  
’a’  e  ‘b’  
– array2:  vetor  de  40  caracteres  (bytes)  não  
inicializado
Instruções  de  acesso  à  
memória
• Apenas  as  instruções  de  load e  store
acessam  os  dados  na  memória
– Todas  as  outras  instruções  usam  
registradores  como  operando.
• Load word
lw registrador, endereco
• Carrega  a  word (4  bytes)  do  endereço  de  memória  
no  registrador.  
Instruções  de  acesso  à  
memória
• Store word
sw registrador, endereco
• Armazena  a  word (4  bytes)  do  registrador  no  
endereço  de  memória.  
• Load immediate
li registrador, valor
• Carrega  o  valor  no  registrador.  
Exemplo1.asm
Exemplo1.asm
1. Início  da  seção  de  declaração  de  dados
2. Cria  a  variável  var1 do  tipo  inteiro,  com  o  valor  
23
4. Início  da  seção  de  código
5. Cria  rótulo  main para  marcar  o  início  do  
programa
6. Carrega  o  conteúdo  de  var1 no  registrador  $t0
7. Carrega  o  valor  5 no  registrador  $t1
8. Armazena  o  valor  do  registrador  $t1 na  variável  
var1
Endereçamento  indireto  e  
indexado
• Load address
la registrador, variável
• Carrega  o  endereço  da  variável  no  registrador
• Load word (indireto)
lw registrador1, (registrador2)
• Carrega  a  word que  está  no  endereço  armazenado  no  
registrador2,  para  o  registrador1
• Store word (indireto)
sw registrador1, (registrador2)
• Armazena  a  word no  registrador1  para  o  endereço  
armazenado  no  registrador2
Endereçamento  indireto  e  
indexado
• Endereçamento  indexado  é  o  mesmo  que  
endereçamento  base-­deslocamento
• Load word (indexado)
lw registrador1, offset(registrador2)
• carrega  a  word que  está  no  endereço  (registrador2  +  
offset)  no  registrador1
• obs:  o  offset  pode  ser  negativo
• Store word (indexado)
sw registrador1, offset(registrador2)
• Armazena  a  word no  registrador1  no  endereço  dado  
por  (registrador2+offset)
• obs:  o  offset  pode  ser  negativo
Endereçamento  indireto  e  
indexado
• Observação:  o  endereçamento  indexado  é  
especialmente  útil  para:
– Vetores:  acesso  aos  elementos  como  um  
offset  (deslocamento)  a  partir  do  endereço  
inicial  do  vetor.
Exemplo2.asm
Instruções  aritméticas
• Add
add registrador0, registrador1, registrador2
• salva  o  resultado  da  soma  do  registrador1  com  o  
registrador2  no  registrador0
• obs:  soma  com  sinal
• Add immediate
addi registrador0, registrador1, constante
• salva  o  resultado  da  soma  do  registrador1  com  o  
constante  no  registrador0
• obs:  soma  com  sinal
Instruções  aritméticas
• Sub
sub registrador0, registrador1, registrador2
• salva  o  resultado  da  subtração  do  registrador1  
com  o  registrador2  no  registrador0
• obs:  subtração  com  sinal
Instruções  lógicas
• And
and registrador0, registrador1, registrador2
• guarda  o  resultado  da  operação  lógica  AND  entre  
registrador1  e  registrador2  no  registrador0
• And immediate
andi registrador0, registrador1, constante
• guarda  o  resultado  da  operação  lógica  AND  entre  
registrador1  e  constante  no  registrador0
Instruções  lógicas
• Or
or registrador0, registrador1, registrador2
• guarda  o  resultado  da  operação  lógica  OR  entre  
registrador1  e  registrador2  no  registrador0
• Or immediate
ori registrador0, registrador1, constante
• guarda  o  resultado  da  operação  lógica  OR  entre  
registrador1  e  constante  no  registrador0
Instruções  de  controle  de  fluxo
• Jump (desvio  incondicional)
• Branches (desvio  condicional)
Instruções  de  controlede  fluxo
• Jump
j destino
• Desvia  para  o  destino  (rótulo)
Instruções  de  controle  de  fluxo
• Branch equal
beq registrador0, registrador1, destino
• desvia  para  o  destino,  se:  registrador0  =  registrador1
• Branch less than
blt registrador0, registrador1, destino
• desvia  para  o  destino,  se:  registrador0  <  registrador1
• Branch less than or equal to
ble registrador0, registrador1, destino
• desvia  para  o  destino,  se:  registrador0  <=  registrador1
Instruções  de  controle  de  fluxo
• Branch greater than
bgt registrador0, registrador1, destino
• desvia  para  o  destino,  se:  registrador0  >  registrador
• Branch greater than or equal to
bge registrador0, registrador1, destino
• desvia  para  o  destino,  se:  registrador0  >=  registrador1
• Branch not equal
bne registrador0, registrador1, destino
• desvia  para  o  destino,  se:  registrador0  !=  registrador1

Continue navegando