- Google Sites

Propaganda
PARTE II - CONJUNTO DE
INSTRUÇÕES
ARQUITETURA DE COMPUTADORES
ANTONIO RAMOS DE CARVALHO JÚNIOR
Introdução
Instruções são representadas em linguagem de
máquina (binário)
Existem linguagens intermediárias que
representam instruções - linguagens de
montagem (Assembly)
Operações feitas em registradores
Foco da disciplina na arquitetura MIPS
INSTRUÇÕES MIPS
Registradores
O tamanho de cada registrador é de 4 bytes (32 bits)
A arquitetura MIPS possui um número limitado de registradores: 32
Representação de alguns registradores:
$t0 - $t9: registradores temporários
$s0 - $s7: registradores salvos
$a0 - $a3: argumentos, salvam valres intermediários em
algumas operações
$zero: valor constante 0 (zero)
Arquitetura MIPS
Instruções de 32 bits - RISC
32 registradores - de 0 à 31
Alguns registradores são reservados para operações do
processador e troca de informações, dois registradores
importantes são:
IR - Instruction Register: registrador que armazena a
instrução que está sendo executada
PC - Program Counter: guarda o numero da “linha” da
próxima instrução a ser chamada
Instruções aritméticas
Operação sempre é feita entre dois registradores
Representar a soma A + B + C necessita de mais
de uma instrução
Instrução
Exemplo
Significado
Adição (add)
add $t1, $t2, $t3
$t1 = $t2 + $t3
Subtração (sub)
sub $t1, $t2, $t3
$t1 = $t2 - $t3
Adição imediata
(addi)
addi $t1, $t2, V
$t1 = $t2 + V
Instruções aritméticas
Faça as operações abaixo em Assembly:
A. $t1 + $t2 - $t3 + $t4
B. $t1*2 - $t2*2
C. $t1 + ($t2 - $t3 - $t4)
Transferência de dados
Salva ou resgata um valor da memória para um
registrador
Load: carrega o valor de um endereço em um registrador
Store: salva o valor de um registrador em um endereço
fornecido
Instrução
Load word (lw)
Store word (sw)
Exemplo
Significado
lw $t1, 100($t2) $t1 = MEMORY[$t2 + 100]
lw $t1, 100($t2)
MEMORY[$t2+100] = $t1
Salto condicional e
incondicional
Faz um salto ou não para a instrução informada
(número da linha) de acordo com uma condição
Instrução
Exemplo
Significado
if ($t1 = $t2)
Branch on equal (beq) beq $t1, $t2, 25
PC = PC + 4 + 25*4
Branch on not equal
(bne)
bne $t1, $t2, 25
Jump (j)
j 100
if ($t1 != $t2)
PC = PC + 4 + 25*4
PC = 100*4
Salto condicional e
incondicional
Converta os pseudocódigos em C abaixo para
assembly:
if a == b {
c = a + b*2;
} else {
c = b + a*2;
}
int C = 0;
for (int i = 0; i == 10; i++) {
C = i+C;
}
REPRESENTAÇÃO DE
INSTRUÇÕES
Codificação MIPS
Instruções do tipo-R (operações lógicas e
aritméticas - add, sub, and, or)
6 bits 5 bits 5 bits 5 bits 5 bits 6 bits
op
•
•
•
•
rs
rt
rd
shamt
funct
op: Operação básica a ser realizada
rs: registrador contendo o primeiro operando-fonte
rt: registrador contendo o segundo operando-fonte
rd: registrador que guarda o resultado da operação, também conhecido como
registrador destino
• shamt: quantidade de bits a serem deslocados (não será usado neste momento)
• funct: determina a operação que será realizada, pois existem várias operações a
serem feitas por instruções do tipo R
Codificação MIPS
Instruções do tipo-I (transferência de dados entre
registradores e memória - lw ou sw)
6 bits 5 bits 5 bits
op
•
•
•
•
rs
rt
16 bits
endereço
op: Operação básica a ser realizada
rs: registrador contendo o primeiro operando-fonte
rt: registrador contendo o segundo operando-fonte
endereço: endereço de acesso para a operação
Codificação MIPS
Instruções de salto condicional - bne ou beq Utiliza desvio relativo pois 16 bits pode ser pouco
para representar um desvio
6 bits 5 bits 5 bits
op
•
•
•
•
rs
rt
16 bits
endereço
op: Operação básica a ser realizada
rs: registrador contendo o primeiro operando-fonte
rt: registrador contendo o segundo operando-fonte
endereço: número de linhas a serem “saltadas”
Codificação MIPS
Instruções do tipo J (jump) - salto incondicional
6 bits
op
26 bits
endereço de salto
• op: Operação básica a ser realizada
• endereço de salto: endereço de instrução (linha) para o qual o programa irá após
esta instrução
Registradores MIPS
Nome
Núm Reg
Utilização
$zero
0
$v0-$v1
2-3
$a0-$a3
4-7
guarda resultados para avaliar expressões
argumentos
$t0-$t7
8-15
temporários
$s0-$s7
16-23
salvos
$t8-$t9
24-25
mais temporários
$gp
28
global pointer
$sp
29
stack pointer
$fp
30
frame pointer
$ra
31
endereço de retorno a procedimento
valor da constante 0
Codificação de instruções
Nome
Exemplo
Instrução
add
0
18
19
17
0
32
add $s1, $s2, $s3
sub
0
18
19
17
0
34
sub $s1, $s2, $s3
lw
35
18
17
100
lw $s1, 100($s2)
sw
43
18
17
100
sw $s1, 100($s2)
beq
4
17
18
25
beq $s1, $s2, 100
bne
5
17
18
25
bne $s1, $s2, 100
j
2
2500
j 10000
Convertendo assembly
para binário
Exemplo: add $t0, $s1, $s2
6 bits 5 bits 5 bits 5 bits 5 bits 6 bits
op
rs
rt
rd
shamt
funct
op = 0 | funct = 32
RS = $s1 = 17 | RT = $s2 = 18 | RD =
$t0 = 8
SHAMT = sem uso = 0
000000
10001
10010
01000
00000
100000
op
rs
rt
rd
shamt
funct
Download