Buscar

02 - Linguagem de Maquina IV

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

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

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ê viu 3, do total de 29 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

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

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ê viu 6, do total de 29 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

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

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ê viu 9, do total de 29 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

Prévia do material em texto

Arquitetura e Organização de 
Computadores
Instruções: A linguagem de máquina
Parte IV
Prof. Sílvio Fernandes
UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO
DEPARTAMENTO DE CIÊNCIAS EXATAS E NATURAIS
CURSO DE CIÊNCIA DA COMPUTAÇÃO
Comunicando-se com as pessoas
 A maioria dos computadores hoje utiliza bytes
de 8 bits para representar caracteres
obedecendo um padrão (como ASCII)
 MIPS oferece instruções para mover bytes
 Load byte (lb) lê um byte da memória,
colocando-o nos 8 bits mais à direita de um
registrador
 Store byte (sb) separa o byte mais à direita de
um registrador e o escreve na memória
2
Comunicando-se com as pessoas
 Sintaxe do lb e sb
 lb $t0, 0($sp) # lê byte da origem
 sb $t0, 0($gp) # escreve byte no destino
 Qual é o código correspondente no MIPS para
void strcpy(char x[], char y[]){
int i = 0;
while((x[i] = y[i]) != ‘\0’) /* copia e testa byte*/
i += 1;
}
Considere os endereços base de x e y encontrados
em $a0 e $a1, enquanto i está em $s0
3
Comunicando-se com as pessoas
strcpy:
addi $sp, $sp, -4 #ajusta pilha para mais 1 item
sw $s0, 0($sp) #salva $s0
add $s0, $zero, $zero # i = 0+0
L1: add $t1, $s0, $a1 #endereço de y[i] em $t1
lb $t2, 0($t1) # $t2 = y[i]
add $t3, $s0, $a0 #endereço de x[i] em $t3
sb $t2, 0($t3) # x[i] = y[i]
beq $t2, $zero, L2 #se y[i] == 0, vai para L2
addi $s0, $s0, 1 # i = i+1
j L1 # vai para L1
L2: lw $s0, 0($sp) # y[i] == 0; fim da string; restura $s0
addi $sp, $sp, 4 #retira 1 word da pilha
jr $ra #retorna
4
Comunicando-se com as pessoas
 MIPS possui instruções para carregar e
armazenar quantidades de 16 bits, chamadas
halfwords
 Load half (lh) lê uma halfword da memória,
colocando-a nos 16 bits mais à direita de um
registrador
 lh $t0, 0($sp) #lê halfword (16 bits) da origem
 Store half (sh) separa a halfword
correspondente aos 16 bits mais à esquerda de
um registrador e escreve na memória
 sh $t0, 0($gp) #escreve halfword (16 bits) no destino
5
Endereçamento no MIPS para
operandos e endereços de 32 bits
 Até o momento, consideramos que endereços
de memória já estariam em registradores.
Lembrem-se que cada endereço de memória
é representado por 32 bits.
 Lembrando que as instruções com constantes
(imediatas) do MIPS só trabalham com 16 bits.
 Como fazemos para carregar constate de 32
bits no registrador $s0?
6
Endereçamento no MIPS para
operandos e endereços de 32 bits
 Precisamos usar duas instruções; nova instrução
“load upper immediate”:
7
Endereçamento no MIPS para
operandos e endereços de 32 bits
 Depois, precisamos acertar os bits de ordem
inferior, por exemplo:
Endereçamento em desvios
condicionais e jumps
 Já a instrução de desvio incondicional jump
utiliza um terceiro formato de instrução (tipo j).
 Nessas instruções temos 26 bits para especificar
o local para onde desejamos desviar.
9
Endereçamento em desvios 
condicionais e jumps
 No entanto, para desvios condicionais temos 
um problema:
 Nosso campo de desvio só possui 16 bits.
 Fazendo os cálculos, 216 = 65536;
 E agora pessoal, será que no MIPS só podemos 
fazer programas de no máximo 64 kbytes?
10
Endereçamento em desvios 
condicionais e jumps
 Para evitar este problema, os processadores
trabalham com uma técnica denominada de
endereçamento relativo.
 Basicamente a ideia é associar o endereço
expresso em uma instrução condicional a um
outro elemento (registrador).
 Qual seria este registrador?
 O registrador utilizado é o PC. Lembrem-se o PC a
todo momento se atualiza, armazenando o endereço
da instrução atual, sendo executada.
 PC = Registrador + Endereço de desvio
11
Endereçamento em desvios 
condicionais e jumps
 Porque isso resolve?
 Isso resolve porque, em geral, os endereços de desvio não
ficam muito longe dos locais onde é solicitado o desvio.
 Mas e para chamada de funções? Tem algum sentido
ela ficar próxima do local do desvio? Como isso é
resolvido?
 Lembrem-se que para funções utilizamos j ou jr que
possuem um espaçamento de bits ainda maior (26 bits).
 Adicionalmente, o MIPS otimiza isso tudo. Seu
endereçamento é feito por palavras (endereçamento
alinhado), logo o espaço de endereçamento aumenta em
mais 4 vezes.
12
Endereçamento em desvios 
condicionais e jumps
 Um loop while foi compilado para o código assembly
Loop: sll $t1, $s3, 2 # $t1 = 4 * i
add $t1, $t1, $s6 # $t1 = endereço de save[i]
lw $t0, 0($t1) # $t0 = save[i]
Bne $t0, $s5, Exit #vá para exit se save[i] != k
addi $s3, $s3, 1 # i = i + 1
j Loop
Exit:
13
Endereçamento em desvios 
condicionais e jumps
 Se considerarmos que o loop inicia na posição 80000 
da memória, qual é o código de máquina do MIPS?
 A instrução bne (4ª. Linha) acrescenta 2 words ou 8 
bytes ao endereço da instrução seguinte (80016), 
especificando o destino do desvio em relação à 
instrução seguinte (8 + 80016)
 A instrução de salto na última linha utiliza o endereço 
completo (20000*4 = 80000), correspondente ao rótulo 
Loop
14
Endereçamento em desvios 
condicionais e jumps
 Desviando para um lugar mais distante
 Dada um desvio onde o reg. $s0 é igual ao reg. $s1
beq $s0, $s1, L1
 Substitui-o por um par de instruções que ofereça uma 
distância de desvio muito maior
bne $s0, $s1, L2
j L1
L2:
15
Formas de endereçamento.
 Endereçamento em Registrador
 Onde o operando é um registrador
 add e sub, por exemplo.
 Endereçamento imediato
 Onde o operando é uma constante dentro da própria instrução
 addi e subi, por exemplo.
 Endereçamento de base
 Onde o operando está no local de memória cujo endereço é a soma de um 
registrador e uma constante.
 lw, sw
 Endereçamento relativo ao PC
 Onde o endereçamento é a soma do PC e uma constante na instrução
 bne, beq, por exemplo.
 Endereçamento pseudodireto.
 Onde o endereço de jump são os 26 bits da instrução concatenados com os 
bits mais altos do PC.
 j e jr.
16
Formas de endereçamento.
17
Formato das Instruções MIPS
18
Operandos MIPS
19
Nome Exemplo Comentário
32 registradores
$s0-$s7, $t0-$t9, $zero, 
$a0-$a3, $v0-$v1, $gp, 
$fp, $sp, $ra, $at
Locais rápidos para dados. No MIPS, os dados precisam estar em 
registradores para a realização de operações aritméticas. O 
registrador $zero sempre é igual a 0. O registrador $at é reservado 
para o montador tratar de constantes grandes
230 words na 
memória
Memória[0],
Memória[4],
...
Memória[4294967292]
Acessadas apenas por instruções de transferência de dados no 
MIPS. O MIPS utiliza endereços em bytes, de modo que os endereços 
em words sequenciais diferem em 4 vezes. A memória contém 
estruturas de dados, arrays e spilled registers.
Registradores
Nome do Registrador 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
$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 do Registrador Número Uso
$s0 16 temporário salvo (preservado pela chamada)
$s1 17 temporário salvo (preservado pela chamada)
$s2 18 temporário salvo (preservadopela 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)
$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)
Assembly do MIPS
22
Categoria Instrução Exemplo Significado Comentário
Aritmética
Add add $s1, $s2, $s3 $s1 = $s2+$s3 3 operandos; dados registradores
Subtract sub $s1, $s2, $s3 $s1 = $s2-$s3 3 operandos; dados registradores
Add Immediate dddi $s1, $s2, 100 $s1 = $s2+100 Usada para somar constantes
Lógica
And and $s1, $s2, $s3 $s1 = $s2 & $s3 3 operandos em reg; AND bit a bit
Or or $s1, $s2, $s3 $s1 = $s2 | $s3 3 operandos em reg; OR bit a bit
Nor nor $s1, $s2, $s3 $s1 = ~($s2 | $s3) 3 operandos em reg; NOR bit a bit
And Immediate andi $s1, $s2, 100 $s1 = $s2 & 100 AND bit a bit entre reg. e constante
Or Immediate ori $s1, $s2, 100 $s1 = $s2 | 100 OR bit a bit entre reg. e constante
Shift left logical sll $s1, $s2, 10 $s1 = $s2 << 10 Deslocamento à esquerda por const.
Shift rigth logical srl $s1, $s2, 10 $s1 = $s2 >> 10 Deslocamento à direita por const.
Transferência 
de dados
Load word lw $s1, 100($s2) $s1 = Mem[$s2+100] Dados da mem. para o registrador
Store Word sw $s1, 100($s2) Mem[$s2+100] = $s1 Dados do registrador para a mem.
Assembly do MIPS
23
Categoria Instrução Exemplo Significado Comentário
Transferência 
de dados
load half lh $s1, 100($s2) $s1 = Mem[$s2+100] Halfword da memória para registrador
store half sh $s1, 100($s2) Mem[$s2+100] = $s1 Halfword de um reg. para memória
load byte lb $s1, 100($s2) $s1 = Mem[$s2+100] Byte da memória para registrador
store byte sb $s1, 100($s2) Mem[$s2+100] = $s1 Byte de um registrador para memória
load upper
immed.
lui $s1, 100 $s1 = 100 * 216 Carrega constante nos 16 bits mais 
altos
Desvio 
Condicional
Branch on equal beq $s1, $s2, L If($s1 == $s2) go to L Testa igualdade e desvia
Branch on not
equal
bne $s1, $s2, L If($s1 != $s2) go to L Testa desigualdade e desvia
Set on less than stl $s1, $s2, $s3 If($s2 < $s3) $s1 = 1;
Else $s1 = 0
Compara menor que
Set less than
immediate
stli $s1, $s2, 100 If($s2 < 100) $s1 = 1;
Else $s1 = 0
Compara menor que constante
Desvio
incondicional
Jump j L go to L Desvia para endereço de destino
Jump register jr $ra go to $ra Para switch e retorno de 
procedimento
Jump and link jal L $ra = PC + 4
go to L
Para chamada de procedimento
Pseudo-instruções
 Alguns montadores também implementam 
pseudo-instruções, que são instruções 
fornecidas por um montador mas não 
implementadas no hardware
PseudoMIPS Nome Formato Exemplo Significado
Move move R move $t1, $t0 add $t1, $zero, $t0
Multiply mult R mult $t1, $t0 mult $t1, $t1, $t0
Load immediate li I li $t1, 100 addiu $t1, $0, 100
Branch less than blt I blt $t1, $t0, label slt $at, $t1, $t0
bne $at, $0, label
Branch less than or equal ble I ble $t1, 34, label addi $at, $0, 35
slt $at, $t1, $at
bne $at, $0, label
Branch greater than bgt I bgt $t1, $t0, label slt $at, $t0, $t1
bne $at, $0, label
Branch greater than or equal bge I bge $t1, $t0, label slt $at, $t1, $t0
bne $at, $0, label
Diretivas do Assembler
Sintaxe Efeito
.ascii str Armazena string str em memória, mas não coloca o caracter nulo no fim da 
string. 
.asciiz str Armazena string str em memória, colocando o caracter nulo no fim da string. 
.byte b1,..., bn Armazena as n quantidades de 8 bits em bytes sucessivos na memória
.data <addr> Itens subsequentes são armazenados no segmento de dados. Se o argumento 
opcional addr está presente, os itens são armazenados começando no endereço 
addr.
.global sym Declara que o símbolo sym é global e pode ser referenciado noutros ficheiros.
.half hl, ..., hn Armazena n quantidades de 16 bits em sucessivas posições de memória. 
.word w1, ...wn Armazena n quantidades de 32 bits em words sucessivas de memória. 
.space n Reserva n bytes de espaço no segmento de dados.
.text <addr> Itens subsequentes são colocados no segmento de código. Estando presente o 
argumento opcional addr, os itens são armazenados a partir do endereço addr.
25
Chamadas de Sistema
 Estes serviços podem ser executados através 
da instrução syscall.
 O código da chamada é colocado em $v0
26
Chamadas de Sistema
27
Ferramenta
 MARS(MIPS Assembler and Runtime Simulator)
 IDE para desenvolvimento de programas assembly
MIPS
 Compilação e verificação de erro sintático
 Simulação de execução
 Gratuita
 www.cs.missouristate.edu/MARS
 Manual
 http://courses.missouristate.edu/KenVollmar/MARS/C
CSC-CP%20material/MARS%20Tutorial.doc
28
Referências
 PATTERSON, D. A. ; HENNESSY, J.L. Organização 
e projeto de computadores – a interface 
hardware software. 3. ed. Editora Campus, 
2005.
 Notas de aula do Prof. André Luis Meneses
Silva
29

Outros materiais