Faculdade de Ciências Aplicadas e
Sociais de Petrolina – FACAPE
Instruções MIPS
Transferência de Dados
Conjunto de
Instruções MIPS
Parte II
Lógicas
Controle
Suporte a procedimentos
Prof. Sérgio
Adaptado dos slides de Sistemas Processadores do Prof. Frank Torres - UFMG
Organização de Computadores
1
Instruções MIPS
:: Instruções lógicas
Operação lógica
deslocamento à
esquerda
deslocamento à
direita
2
Instruções MIPS
:: Instruções lógicas
Instrução MIPS
Operações de deslocamento (shift).
Significado
sll
shift left logical
srl
shift right logical
E bit a bit
and, andi
and
OU bit a bit
or, ori
or
NOU bit a bit
nor
not or
Organização de Computadores
Organização de Computadores
Deslocam todos os bits de uma palavra para
esquerda ou direita, preenchendo os bits vazios
com zero (não cíclico).
São instruções do tipo R (registrador).
A quantidade de bits a serem deslocados é
especificada pelo campo shamt (shift amount).
3
Organização de Computadores
4
Instruções MIPS
:: Instruções lógicas
Instruções MIPS
:: Instruções lógicas
shift left logical (sll)
shift left logical (sll)
sll $t2, $s0, 4
# $t2 ← $s0 << 4
sll $t2, $s0, 4
Conteúdo:
op
$s0
0110 1000 1111 0000 0111 0110 1111 1111
Instrução
(decimal)
$t2
1000 1111 0000 0111 0110 1111 1111 0000
Instrução
(binário)
Organização de Computadores
5
# $t2 ← $s0 << 4
rs
rt
rd
0
0
16
10
4
0
--
$s0
$t2
shamt
sll
000000
00000
10000
01010
00100
000000
Organização de Computadores
6
Instruções MIPS
:: Instruções lógicas
shift right logical (srl)
shift right logical (srl)
# $t2 ← $s0 >> 8
srl $t2, $s0, 8
Conteúdo:
op
$s0
0110 1000 1111 0000 0111 0110 1111 1111
Instrução
(decimal)
$t2
0000 0000 0110 1000 1111 0000 0111 0110
Instrução
(binário)
Organização de Computadores
7
funct
sll
Instruções MIPS
:: Instruções lógicas
srl $t2, $s0, 8
shamt
rs
# $t2 ← $s0 >> 8
rt
rd
shamt
funct
0
0
16
10
8
2
srl
--
$s0
$t2
shamt
srl
000000
00000
10000
01010
01000
000010
Organização de Computadores
8
Instruções MIPS
:: Instruções lógicas
Instruções MIPS
:: Revisão – Complemento de 2
shift right arithmetic (sra)
0100 = +4
Desloca bits à direita, preservando o sinal (compl. a 2).
Deslocamento de n bits corresponde à divisão por 2n.
Dica: para divisões com valores de tipo integer.
sra $t2, $s0, 4
Complemento de 1: 1011
Soma 1:
+1
1100 = -4
# $t2 ← $s0 >> 4
Conteúdo:
$s0
1110 1000 1111 0000 0111 0110 1111 1111
$t2
1111 1110 1000 1111 0000 0111 0110 1111
Organização de Computadores
9
Organização de Computadores
10
Instruções MIPS
:: Instruções lógicas
Instruções MIPS
:: Instruções lógicas
shift right arithmetic (sra)
AND bit a bit (and)
and $t0, $t1, $t2
sra $t2, $s0, 4
op
Instrução
(decimal)
Instrução
(binário)
rs
rt
rd
shamt
Conteúdo:
funct
0
0
16
10
4
3
sra
--
$s0
$t2
shamt
sra
000000
00000
10000
01010
00100
000011
Organização de Computadores
# $t0 ← $t1 & $t2
# $t2 ← $s0 >> 4
11
$t1
0000 0000 1111 0000 0000 0110 0000 1111
$t2
0000 0000 0110 0000 0000 1111 0000 1110
$t0
0000 0000 0110 0000 0000 0110 0000 1110
Organização de Computadores
12
Instruções MIPS
:: Instruções lógicas
Instruções MIPS
:: Instruções lógicas
AND bit a bit (and)
OR bit a bit (or)
and $t0, $t1, $t2
Instrução
(decimal)
Instrução
(binário)
or $t0, $t1, $t2
# $t0 ← $t1 & $t2
op
rs
rt
rd
shamt
funct
0
9
10
8
0
(24)h
and
$t1
$t2
$t0
--
and
000000
01001
01010
01000
00000
Conteúdo:
100100
Organização de Computadores
13
Instruções MIPS
:: Instruções lógicas
$t2
0000 0000 0110 0000 0000 0000 0000 1110
$t0
0000 0000 1111 0000 0000 0110 0000 1111
Organização de Computadores
14
A operação NOT (negação) tem apenas um
operando.
# $t0 ← $t1 | $t2
op
rs
rt
rd
shamt
funct
0
9
10
8
0
(25)h
or
$t1
$t2
$t0
--
or
000000
0000 0000 1111 0000 0000 0110 0000 1111
NOR bit a bit (nor)
or $t0, $t1, $t2
Instrução
(binário)
$t1
Instruções MIPS
:: Instruções lógicas
OR bit a bit (or)
Instrução
(decimal)
# $t0 ← $t1 | $t2
01001
01010
01000
00000
Para acompanhar o formato de dois operandos,
a instrução NOR foi projetada no lugar do NOT.
Se um operando for zero, NOR é equivalente
ao NOT:
100101
A NOR 0 = NOT (A OR 0) = NOT (A)
Organização de Computadores
15
Organização de Computadores
16
Instruções MIPS
:: Instruções lógicas
Instruções MIPS
:: Instruções lógicas
NOR bit a bit (nor)
XOR bit a bit (xor)
nor $t0, $t1, $zero
op
Instrução
(decimal)
Instrução
(binário)
rs
# $t0 ← ~$t1
rt
rd
shamt
xor $t0, $t1, $t2
funct
0
9
0
8
0
(27)h
nor
$t1
$zero
$t0
--
nor
000000
01001
00000
01000
00000
100111
Organização de Computadores
op
Instrução
(decimal)
Instrução
(binário)
17
rs
# $t0 ← $t1 ⊕ $t2
rt
rd
0
9
10
8
0
(26)h
$t1
$t2
$t0
--
xor
000000
01001
01010
01000
00000
100110
Organização de Computadores
18
Instruções MIPS
:: Instruções lógicas
AND imediato (andi)
OR imediato (ori)
Instrução
(decimal)
Instrução
(binário)
# $t0 ← $t1 & 40
op
rs
rt
immediate
(C)h
9
8
40
andi
$t1
$t0
constante
001100
01001
01000
0000000000101000
Organização de Computadores
ori $t0, $t1, 40
19
funct
xor
Instruções MIPS
:: Instruções lógicas
andi $t0, $t1, 40
shamt
# $t0 ← $t1 | 40
op
rs
rt
immediate
Instrução
(decimal)
(D)h
9
8
40
ori
$t1
$t0
constante
Instrução
(binário)
001101
01001
01000
0000000000101000
Organização de Computadores
20
Instruções MIPS
:: Instruções lógicas :: Resumo
Categoria
lógicas
Nome
Exemplo
Operação
or
or $8,$9,$10
$8 = $9 or $10
and
and $8,$9,$10
$8 = $9 and $10
xor
xor $8,$9,$10
$8 = $9 xor $10
nor
nor $8,$9,$10
$8 = $9 nor $10
andi
andi $8,$9,5
$8 = $9 and 5
Imediato em 16 bits
ori
ori $8,$9,40
$8 = $9 or 40
Imediato em 16 bits
sll
sll $8,$9,10
$8 = $9 << 10
Deslocamento ≤ 32
Instruções MIPS
Comentários
Transferência de Dados
Lógicas
Controle
Suporte a procedimentos
srl
srl $8,$9,5
$8 = $9 >> 5
Deslocamento ≤ 32
sra
sra $8,$9,5
$8 = $9 >> 5
Desl. ≤ 32, preserva sinal
Operações Lógicas do MIPS
Organização de Computadores
21
Organização de Computadores
22
Organização de Computadores
23
Organização de Computadores
24
Organização de Computadores
25
Organização de Computadores
26
Organização de Computadores
27
Organização de Computadores
28
Instruções MIPS
:: Instruções de controle
Instruções MIPS
:: Instruções de controle
Instruções para tomada de decisão.
Instruções MIPS para salto condicional:
Alteram o fluxo de controle do programa.
Alteram a “próxima” instrução a ser executada.
Instruções de controle.
Salto condicional.
Salto incondicional.
Branch on equal (beq)
Branch on not equal (bne)
Set on less than (slt)
Set on less than immediate (slti)
Instruções MIPS para salto incondicional:
jump (j)
Organização de Computadores
29
Instruções MIPS
:: Instruções de controle
30
Instruções MIPS
:: Instruções de controle :: Ex 01
Branch on not equal (bne)
Desvia o programa para <label1> se $t0 != $t1
bne $t0, $t1, label1
Organização de Computadores
Exemplo:
bne $8, $9, sai
add $10, $8, $9
sai: nop
#if ($t0 != $t1) goto label1
Branch on equal (beq)
Desvia o programa para <label2> se $t0 == $t1
beq $t0, $t1, label2
Organização de Computadores
#if ($t0 == $t1) goto label2
31
Organização de Computadores
32
Organização de Computadores
33
Organização de Computadores
34
Organização de Computadores
35
Organização de Computadores
36
Instruções MIPS
:: Instruções de controle :: Formato
Branch on not equal (bne)
bne $t0, $t1, label
op
Instrução
(decimal)
Instrução
(binário)
Organização de Computadores
37
Instruções MIPS
:: Instruções de controle :: Formato
beq $t0, $t1, label
Instrução
(binário)
op
rs
rt
immediate
4
8
9
xxx
beq
$t0
$t1
nº de words saltadas
000100
01000
01001
xxx (16 bits)
Organização de Computadores
rt
immediate
5
8
9
xxx
bne
$t0
$t1
nº de words saltadas
000101
01000
01001
xxx (16 bits)
Organização de Computadores
38
Instruções MIPS
:: Instruções de controle :: Formato
As instruções de desvio condicional armazenam,
no campo immediate, a quantidade de palavras
(words) que devem ser saltadas para chegar à
instrução marcada pelo label (rótulo).
Branch on equal (beq)
Instrução
(decimal)
rs
Um número positivo indica que o salto deve ser
no sentido para frente (até o fim do código).
Um número negativo indica que o salto deve ser
no sentido para trás (até o início do código).
39
Organização de Computadores
40
Instruções MIPS
:: Instruções de controle
Instruções MIPS
:: Instruções de controle
Instruções do tipo “Set on less than”
combinadas com instruções do tipo
“Branch” permitem criar todas as
condições relativas:
Set on less than (slt)
Compara dois registradores.
slt $s1, $s2, $s3
#if ($s2 < $s3) $s1 = 1
#else $s1 = 0
igual
diferente
maior
maior ou igual
menor
menor ou igual
Set on less than immediate (slti)
Compara um registrador e uma constante.
slti $s1, $s2, 100
#if ($s2 < 100) $s1 = 1
#else $s1 = 0
Organização de Computadores
41
Instruções MIPS
:: Instruções de controle
Exemplo
Desvio incondicional para um endereço de
memória apontado por um label.
label
Instruções do tipo branch indicam desvio da
sequência do programa mediante análise de
uma condição.
Instruções do tipo jump indicam desvio
incondicional da sequência do programa.
Organização de Computadores
42
Instruções MIPS
:: Instruções de controle :: Ex 02
Jump (j)
j
Organização de Computadores
else:
sai:
43
bne $8, $9, else
add $10, $8, $9
j sai
sub $10, $8, $9
nop
Organização de Computadores
44
Organização de Computadores
45
Organização de Computadores
46
Organização de Computadores
47
Organização de Computadores
48
Organização de Computadores
49
Organização de Computadores
50
Instruções MIPS
:: Instruções de controle :: Formato
Set on less than (slt)
slt $t0, $t1, $t2
op
Instrução
(decimal)
Instrução
(binário)
Organização de Computadores
51
rs
#if ($t1 < $t2) $t0 = 1
#else $t0 = 0
rt
rd
shamt
funct
0
9
10
8
0
(2A)h
slt
$t1
$t2
$t0
--
slt
000000
01001
01010
01000
00000
101010
Organização de Computadores
52
Instruções MIPS
:: Instruções de controle :: Formato
Instruções MIPS
:: Instruções de controle :: Formato
Set on less than immediate (slti)
Jump (j)
slti $t0, $t1, 100
op
Instrução
(decimal)
Instrução
(binário)
rs
#if ($t1 < 100) $t0 = 1
#else $t0 = 0
rt
(A)h
9
8
100
$t1
$t0
valor
001010
01001
01000
0000000001100100
op
53
Instruções MIPS
:: Instruções de controle :: Formato
Ao contrário das instruções de desvio condicional
(beq e bne), o campo target da instrução jump
armazena o endereço da memória
correspondente à instrução marcada pelo label.
Como o endereço de memória é um múltiplo de
4 bytes (100b), seus dois últimos bits não são
representados na instrução jump.
O novo endereço consiste dos 4 bits mais
significativos do PC atual e dos 26 (+2) bits
da instrução.
Organização de Computadores
label
immediate
slti
Organização de Computadores
j
55
# PC ← endereço[label]
target
Instrução
(decimal)
(2)h
xxx
j
endereço da instrução
Instrução
(binário)
000010
xxx (26 bits)
Organização de Computadores
54
Instruções MIPS
:: Instruções de controle :: Resumo
Categoria
Nome
Exemplo
bne
bne $8,$9,rotulo
beq
beq $8,$9,rotulo
se $8 = $9 então
PC ← endereço[rotulo]
j
j rotulo
PC ← endereço[rotulo]
slt
slt $10,$8,$9
se $8 < $9
então $10 ← 1
senão $10 ← 0
slti
slti $10,$8,100
se $8 < 100
então $10 ← 1
senão $10 ← 0
Suporte a
decisão
Organização de Computadores
Operação
se $8 ≠ $9 então
PC ← endereço[rotulo]
56
Questões
Como fazer?
“while loop”
while (save[i] != k) {
i += 1;
}
Organização de Computadores
Questões
Como fazer?
“for loop”
Código assembly
// $s3 = i, $s5 = k, $s6 = base of save[]
Loop: sll $t1, $s3, 2
add $t1, $t1, $s6
lw $t0, 0($t1)
beq $t0, $s5, Exit
addi $s3, $s3, 1
j Loop
Exit: nop
#t1 = 4*i
#t1 = end. de save[i]
# t0 = valor de save[i]
# if save[i] = k vai p. Exit
#i=i+1
57
for (j < k) {
j += 1;
}
Organização de Computadores
Código assembly
// $s1 = j, $s2 = k
# t1 = 1 if j < k, else t1 = 0
Loop: slt $t1,$s1,$s2
beq $t1, $0, Exit # if j>= k then Exit
addi $s1,$s1, 1 # j = j + 1
j Loop
Exit: nop
58
Download

Conjunto de Instruções MIPS Parte II