Buscar

Topico_03 (Conceito de programa armazenado)

Prévia do material em texto

Tópico 3: Arquitetura (Conceito de Programa Armazenado)
Prof. Jhonattan Cordoba Ramirez
Escola de Engenharia
Universidade Federal de Minas Gerais (UFMG)
ELT123 - Arquitetura e Organização de Computadores
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
• AND: útil para mascarar bits
• Mascarando todos os bytes menos significativos 
de um valor:
• 0xF234012F AND 0x000000FF = 0x0000002F
• OR: útil para combinar campos de bits
• Combine 0xF2340000 com 0x000012BC:
• 0xF2340000 OR 0x000012BC = 0xF23412BC
• NOR: útil para inverter bits:
• Negação de OR
• A NOR $0 = NOT A
• Outros operadores
• XOR: bits OR exclusivos
A B A AND B
0 0 0
0 1 0
1 0 0
1 1 1
A B A OR B
0 0 0
0 1 1
1 0 1
1 1 1
A B A XOR B
0 0 0
0 1 1
1 0 1
1 1 0
A B A NOR B
0 0 1
0 1 0
1 0 0
1 1 0
xor $t1, $t2, $t3 nor $t1, $t2, $t3
and $t1, $t2, $t3 or $t1, $t2, $t3
1101 1010 AND 1011 0011 ---> 1001 0010 1001 1010 OR 1011 0011 ---> 1011 1011
0101 1110 XOR 1000 0111 ---> 1101 1001 1111 0110 NOR 1000 0111 ---> 0000 1000
and $s3, $s1, $s2
or $s4, $s1, $s2
xor $s5, $s1, $s2
nor $s6, $s1, $s2
Registradores de fonte
Instruções lógicas: Exemplo
Resultados
Instruções lógicas
• 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.
Operadores: ANDi, ORi, XORi
andi $s2, $s1, 0xFA34
ori $s3, $s1, 0xFA34
xori $s4, $s1, 0xFA34
Registradores de fonte
Resultados
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 lógico
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
sll $t0, $s1, 4
srl $s2, $s1, 4
sra $s3, $s1, 4
MIPS assembly code
Registradores de fonte
Resultados
Instruções de deslocamento
Registradores de fonte
Resultados
sllv $s3, $s1, $s2
srlv $s4, $s1, $s2
srav $s5, $s1, $s2
MIPS assembly code
$t0
$s2
$s3
$s3
$s4
$s5
Outras instruções
Gerando constantes de 16 bits usando addi
# $S0 = a
addi $s0, $0, 0x4f3c
MIPS assembly code
# Palavra definida com 16 
bits
int a = 0x4f3c
C code
Constantes de 32 bits usando load upper immediate (lui) e ori
# $S0 = a
lui $s0, 0xFEDC
ori $s0, 0x8765
MIPS assembly code
# Palavra definida com 32 bits
int a = 0xFEDC8765
C code
Multiplicação (mult) e Divisão (div)
• Registradores de propósitos especiais: hi e lo
• A instrução mult $s0, $s1 multiplica os valores
em $s0 e $s1:
• Os 32-bits mais significativos do produto
são colocados em hi e os 32-bits menos
significativos são colocados em lo.
• A instrução div $s0, $s1 computa $s0/$s1.
• O quociente é colocado em lo e o resto é
colocado em hi.
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
• 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?
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) 
Exercício
	Tópico 3: Arquitetura (Conceito de Programa Armazenado)
	Slide Number 2
	Slide Number 3
	Slide Number 4
	Slide Number 5
	Slide Number 6
	Slide Number 7
	Slide Number 8
	Slide Number 9
	Slide Number 10
	Slide Number 11
	Slide Number 12

Continue navegando