Você está na página 1de 12

Escola de Engenharia

Universidade Federal de Minas Gerais (UFMG)


ELT123 - Arquitetura e Organização de Computadores

Tópico 3: Arquitetura (Conceito de Programa Armazenado)

Prof. Jhonattan Cordoba Ramirez


Sequência lógica

• Linguagens de alto nivel:


• C, Java, Python, etc…
• Escritos em um nível de abstração maior do
que Assembly
• Construções comuns de software de alto nível:
• Declarações if/else
• For loops
• While loops
• Arrays
• Chamadas de função
Instruções lógicas
Operadores: AND, OR, NOT A B A AND B A B A OR B

0 0 0 0 0 0
• AND: útil para mascarar bits
0 1 0 0 1 1
• Mascarando todos os bytes menos significativos
1 0 0 1 0 1
de um valor: 1 1 1 1 1 1
• 0xF234012F AND 0x000000FF = 0x0000002F
and $t1, $t2, $t3 or $t1, $t2, $t3
• OR: útil para combinar campos de bits 1101 1010 AND 1011 0011 ---> 1001 0010 1001 1010 OR 1011 0011 ---> 1011 1011

• Combine 0xF2340000 com 0x000012BC: A B A XOR B A B A NOR B

• 0xF2340000 OR 0x000012BC = 0xF23412BC 0 0 0 0 0 1

0 1 1 0 1 0
• NOR: útil para inverter bits:
1 0 1 1 0 0
• Negação de OR 1 1 0 1 1 0
• A NOR $0 = NOT A
xor $t1, $t2, $t3 nor $t1, $t2, $t3
• Outros operadores 0101 1110 XOR 1000 0111 ---> 1101 1001 1111 0110 NOR 1000 0111 ---> 0000 1000

• XOR: bits OR exclusivos


Instruções lógicas: Exemplo

Registradores de fonte

and $s3, $s1, $s2


or $s4, $s1, $s2 Resultados

xor $s5, $s1, $s2


nor $s6, $s1, $s2
Instruções lógicas
Operadores: ANDi, ORi, XORi

• 16 bits imediatamente são definidos como zero


• A instrução nori não é disponibilizada, pois essa mesma função pode ser facilmente implementada
utilizando-se outras instruções.

Registradores de fonte

andi $s2, $s1, 0xFA34


ori $s3, $s1, 0xFA34
Resultados
xori $s4, $s1, 0xFA34
Instruções de deslocamento

Deslocamento lógico

sll: shift left logic (deslocamento lógico à esquerda)


Exemplo: sll $t0, $t1, 5 # $ t0 <= $ t1 << 5
srl: shift right logic (deslocamento lógico à direita)
Exemplo: srl $ t0, $ t1, 5 # $t0 <= $t1 >> 5
sra: shift right aritmético ( deslocamento aritmético à direita)
Exemplo: sra $t0, $t1, 5 # $t0 <= $t1 >>> 5
Instruções de deslocamento

Deslocamento de variáveis

sllv: shift left logic variable (deslocamento de variável lógica à esquerda)


Exemplo: sllv $t0, $t1, $t2 # $t0 <= $t1 << $t2
srlv: shift right logic variable (deslocamento de variável lógica à direita)
Exemplo: srlv $t0, $t1, $t2 # $t0 <= $t1 >> $t2
srav: shift right arithmetic variable (deslocamento aritmético de variável à direita)
Exemplo: srav $t0, $t1, $t2 # $t0 <= $t1 >>> $t2
Instruções de deslocamento

MIPS assembly code MIPS assembly code


sll $t0, $s1, 4 sllv $s3, $s1, $s2
srl $s2, $s1, 4 srlv $s4, $s1, $s2
sra $s3, $s1, 4 srav $s5, $s1, $s2

Registradores de fonte Registradores de fonte

Resultados Resultados
$t0 $s3
$s2 $s4
$s3 $s5
Outras instruções

Gerando constantes de 16 bits usando addi Multiplicação (mult) e Divisão (div)

C code MIPS assembly code • Registradores de propósitos especiais: hi e lo


# Palavra definida com 16 # $S0 = a • A instrução mult $s0, $s1 multiplica os valores
bits addi $s0, $0, 0x4f3c em $s0 e $s1:
int a = 0x4f3c • Os 32-bits mais significativos do produto
Constantes de 32 bits usando load upper immediate (lui) e ori são colocados em hi e os 32-bits menos

C code MIPS assembly code significativos são colocados em lo.


• A instrução div $s0, $s1 computa $s0/$s1.
# Palavra definida com 32 bits # $S0 = a
• O quociente é colocado em lo e o resto é
int a = 0xFEDC8765 lui $s0, 0xFEDC
colocado em hi.
ori $s0, 0x8765
O que é armazenado na memória?

• Instruções (também conhecido como texto)


• Dados
• Global/estatico: Fixado antes do programa ser
inicializado.
• Dinamico: Posicionado dentro do programa
• How big is memory?
• At most 232 = 4 gigabytes (4 GB)
• From address 0x00000000 to 0xFFFFFFFF
Exemplo
Exercício
addi $S0, $0, 32764
lw $t1, 0($S0)
lw $t0, 4($0)
lb $t1, 2($S0)
addi $t2, $t1, 14
add $t0, $t0, $t1
sb $t2, 3($0)
sw $t1, 4($0)
sb $t0, 2($0)

• Como ficará o conteúdo do banco de registradores


e da memória de dados após a execução do
programa em assembly do MIPS dado,
considerando que os dados estejam organizados na
memória na forma little endian?
• Repita o exercício, agora para big endian.
• Como fica traduzido o código assembly dado em
código de máquina do MIPS32?
• Que trecho em código em linguagem C melhor
representa o código assembly apresentado?

Você também pode gostar