Baixe o app para aproveitar ainda mais
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
Compartilhar