Você está na página 1de 25

Arquitetura de Computadores

06 - MIPS 2

Prof. Laerte M. Rodrigues


laerte.rodrigues@ifmg.edu.br
Instruções lógicas
I Operações de deslocamento (shift)
I Deslocam todos os bits de uma palavra para esquerda ou direita
preenchendo os bits de acordo com o operador
I Não é uma operação cíclica com os bits
I São instruções do tipo R
I A quantidade de bits a serem deslocados é especificada pelo
campo shamt (shift amount)
I Aplicação de inteiros em potência de 2 com números positivos
I 22 = 4 =2 << 1
I ssl (shift left logical)
Instruções lógicas

I Move a palavra para a esquerda, as posições à direita são


preenchidas com 0
I sll [REG DEST], [REG SRC], SIZE
I REG DEST: Registrador destino
I REG SRC: Registrador origem
I SIZE: Quantidade de bits que serão deslocados
I Dado a instrução sll $t0,$s0,4
Instruções lógicas
Op-code Rs Rt Rd Shamt Function-code
6bits 5bits 5bits 5bits 5bits 6bits
I
0x0 sssss ttttt ddddd 00000 ffffff
0x0 - $t0 $t0 4 sll
0 - 8 16 4 0
000000 00000 01000 10000 00100 000000
I Execução
I $s0: 0001 1101 0010 1101 1001 0111 1011 1000
I $t0: 1101 0010 1101 1001 0111 1011 1000 0000
I srl (shift right logical)
I Move a palavra para a direita, as posições à esquerda são
preenchidas com 0
Instruções lógicas
I srl [REG DEST], [REG SRC], SIZE
I REG DEST: Registrador destino
I REG SRC: Registrador origem
I SIZE: Quantidade de bits que serão deslocados
I Dado a instrução srl $t9,$s4,3
Op-code Rs Rt Rd Shamt Function-code
6bits 5bits 5bits 5bits 5bits 6bits
I
0x0 sssss ttttt ddddd 00000 ffffff
0x0 - $t9 $s4 3 srl
0 - 25 20 3 2
000000 00000 11001 10100 00011 000010
I Execução
Instruções lógicas
I $s4: 1010 0011 1111 1101 1110 1101 1101 1000
I $t9: 0001 0100 0111 1111 1011 1101 1011 1011
I sra (shift right arithmetic)
I Desloca bits à direita, preservando o sinal (compl. a 2)
I Deslocamento de n bits corresponde à divisão por 2n
I Aplicação: Operações aritméticas de divisão com números
inteiros
I 64/2 = 32 = 32 >> 1
I sra [REG DEST], [REG SRC], SIZE
I REG DEST: Registrador destino
I REG SRC: Registrador origem
I SIZE: Quantidade de bits que serão deslocados
I Dado a instrução sra $t5,$s3,5
Instruções lógicas
Op-code Rs Rt Rd Shamt Function-code
6bits 5bits 5bits 5bits 5bits 6bits
I
0x0 sssss ttttt ddddd 00000 ffffff
0x0 - $t5 $s3 1 sra
0 - 13 19 5 3
000000 00000 01101 11001 00101 000011
I Execução
I $s3: 1110 0011 1111 1101 1110 1101 1101 1000
I $t5: 1111 1111 0001 1111 1110 1111 0110 1110
I and bit a bit
I Operação lógica AND com todos os bits dos 2 registradores
Instruções lógicas
I Dado a instrução add $t0,$t1,$s0
Op-code Rs Rt Rd Shamt Function-code
6bits 5bits 5bits 5bits 5bits 6bits
I
0x0 sssss ttttt ddddd 00000 ffffff
0x0 $s0 $t1 $t0 0 sra
0 16 9 8 0 2416
000000 10000 01001 01000 00000 100100
I Execução:
I $t1: 0001 0101 0010 0011 0011 1111 1110 1101
I $s0: 1101 1111 0110 1101 1111 0101 0000 0000
I $t0: 0001 0101 0010 0001 0011 0101 0000 0000
I or bit a bit
Instruções lógicas
I Operação lógica OR com todo os bits dos 2 registradores
I Dado a instrução add $t0,$t1,$s0
Op-code Rs Rt Rd Shamt Function-code
6bits 5bits 5bits 5bits 5bits 6bits
I
0x0 sssss ttttt ddddd 00000 ffffff
0x0 $s0 $t1 $t0 0 sra
0 16 9 8 0 2516
000000 10000 01001 01000 00000 100101
I Execução:
I $t1: 0001 0101 0010 0011 0011 1111 1110 1101
I $s0: 1101 1111 0110 1101 1111 0101 0000 0000
I $t0: 1101 1111 0110 1111 1111 1111 1110 1101
Instruções lógicas
I NOR
I Operação bit a bit com a porta lógica NOR
I O NOR necessita de 2 registradores, e, o NOT pode ser feito
com um registrador NOR com 0
I Dado a instrução nor $t0,$t1,$zero
Op-code Rs Rt Rd Shamt Function-code
6bits 5bits 5bits 5bits 5bits 6bits
I
0x0 sssss ttttt ddddd 00000 ffffff
0x0 $zero $t1 $t0 0 sra
0 0 9 8 0 2716
000000 00000 01001 01000 00000 100111
Instruções lógicas
I Execução:
I $t1: 0001 0101 0010 0011 0011 1111 1110 1101
I $zero: 0000 0000 0000 0000 0000 0000 0000 0000
I $t0: 1110 1010 1101 1100 1100 0000 0001 0010
I XOR
I Operação bit a bit XOR
I Dado a instrução xor $t0,$s2,$s3
Op-code Rs Rt Rd Shamt Function-code
6bits 5bits 5bits 5bits 5bits 6bits
I
0x0 sssss ttttt ddddd 00000 ffffff
0x0 $s3 $s2 $t0 0 sra
0 19 18 8 0 2616
000000 10011 10010 01000 00000 100110
Instruções lógicas
I Execução:
I $s1: 0001 0101 0010 0011 0011 1111 1110 1101
I $s2: 1011 1111 1101 0001 0011 0101 1011 1111
I $t0: 1010 1010 1111 0010 0000 1010 0101 0010
I and (And immediate)
I Operação And com uma constante
I addi $s2,$s5,16
Op-code Rs Rt Immediate
6bits 5bits 5bits 16bits
ffffff sssss ttttt iiiiiiiiiiiiiiii
I
andi $s5 $s2 16 (constante)
C16 21 18 16
001100 10101 10001 0000000000010000
Instruções lógicas
Processamento de instruções
sequenciais

I Normalmente o programa fica alocado na memória primeiro


que os dados
I Endereço reservado para o uso da memória para dados
I Após o fim da execução de cada instrução o PC é
incrementado em 4
I O MIPS espera uma instrução para a finalização da execução do
programa
Processamento de instruções
sequenciais
I Para cada ciclo, o MIPS irá carregar o valor do endereço
apontado pelo PC no IR
I O PC pode ser controlado por instruções de desvio
I Salto condicional
I Salto incondicional
I bne (Branch Not Equal)
I Executa o desvio caso os valores a serem testados forem
diferentes
I bne [REG 1], [REG 2], [LABEL]
Processamento de instruções
sequenciais

I REG 1 e REG 2 são os registradores a serem testados


I LABEL o rótulo da instrução em que será desviada
I bne $s1, $s3, fim
add $s4, $s3, $s5
sai: NOP
Processamento de instruções
sequenciais

I
Processamento de instruções
sequenciais
Op-code Rs Rt Immediate
6bits 5bits 5bits 16bits
I
ffffff sssss ttttt iiiiiiiiiiiiiiii
bne $s1 $s3 sai (n. de words saltadas)
5 17 18 1
001100 10001 10010 0000000000000001
I beq (Branch on Equal)
I Executa o desvio caso os valores a serem testados forem iguais
I beq [REG 1], [REG 2], [LABEL]
I REG 1 e REG 2 são os registradores a serem testados
Processamento de instruções
sequenciais
I LABEL o rótulo da instrução em que será desviada
I Execução do desvio e fluxo do controle
I As instruções de desvio condicional armazenam, no campo
immediate, a quantidade de palavras (words) que devem ser
saltadas para chegar ‘a instrução marcada pelo label (rótulo)
I Um número positivo indica que o salto deve ser no sentido para
frente (até o fim do código)
I Um número negativo indica que o salto deve ser no sentido para
trás (até o início do código)
I slt (Set on Less Than)
Processamento de instruções
sequenciais
I Compara 2 registradores e armazena a resposta no registrador
alvo
I slt $s2,$s3,$t0
Op-code Rs Rt Rd Shamt Function-code
6bits 5bits 5bits 5bits 5bits 6bits
I
0x0 sssss ttttt ddddd 00000 ffffff
0x0 $s3 $t0 $s2 0 sra
0 19 8 18 0 2A16
000000 10011 01000 10010 00000 101010
I slti (Set on less than immediate)
Processamento de instruções
sequenciais
I Compara um registrador e uma constante
I slti $s2,$s3,30
I O uso do slt e beq juntos podem ser feitos para criar
qualquer outro tipo de instrução relacional
I j (JUMP)
I Desvio incondicional para um endereço de memória apontado por
um label
I Instruções do tipo branch indicam desvio da sequência do
programa mediante análise de uma condição
Processamento de instruções
sequenciais
I Instruções do tipo jump indicam desvio incondicional da
sequência do programa
I bne $s1, $s3, else
add $s4, $s3, $s5
j sai
else: sub $t0, $t1, $s5
sai: nop
Processamento de instruções
sequenciais

I
Processamento de instruções
sequenciais
I 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
I Como o endereço de memória é um múltiplo de 4 bytes seus dois
últimos bits não são representados na instrução jump
I O novo endereço consiste de 4 Bits mais significativos do PC
atual e de 26 (+2) Bits da instrução
Exercício

I Transcreva para assembly e monte o código binário do


seguinte programa (considere todas as variáveis como
palavras)
I k é um vetor com 10 elementos
1 a =0
2 b =8
3 while ( a < 10)
4 k[a] = k[a] + b
5 a = a + 1

Você também pode gostar