Aula-02 Arquitetura do conjunto de instruções – ISA (Instruction Set Architecture)

Slides:



Advertisements
Apresentações semelhantes
Parte 1: Organização de Computadores
Advertisements

Parte 1: Organização de Computadores
Conjunto de Instruções MIPS
PIPELINE (continuação).
Organização e Arquitetura de Computadores I Linguagem de Máquina
CPU: Controle e processamento
Arquitetura de Computadores
WebDesign Redes de Computadores Aula 05
WebDesign Redes de Computadores Aula 07
Arquitetura e organização de computadores.
A Arquitetura: conjunto de instruções
O Conjunto de Instruções
1 O Conjunto de Instruções ISA – Instruction Set Architecture.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Ambientais Ciência da Computação Aula 03: Computador.
Software Básico Silvio Fernandes
ARQUITETURAS RISC E CISC
Arquitetura dos Microprocessadores 8086 e 8088 Sistemas Embarcados.
Arquitetura dos Microprocessadores 8086 e 8088
Exemplo de arquitetura registrador-registrador- MIPS
MIPS MULTICICLO Fluxo de Dados e Controle
Processador Fluxo de Dados e Controle
Arquitetura de Sistemas Operacionais
MC542 Organização de Computadores Teoria e Prática
Daniel M. Aquino, Marcelo C. Perez, Thais A. B. Fernandes
CISC e RISC.
Professor: Erivelto Tschoeke – UDESC/CEPLAN
O MICROPROCESSADOR INTEL 8080
Sistemas Digitais Microprocessados
REPRESENTAÇÃO DE INSTRUÇÕES
Arquitetura de Computadores I
Organização da Memória Principal
Arquitetura de Computadores
Autor: Fernando de Mesentier Silva
Nível Máquina Formatos de Instruções
Arquitecturas RISC Arquitectura e Conjunto de Instruções
Arquitecturas RISC Programação em assembly
Instruções: A Linguagem de Máquina – Aula 01
Processadores – Aula 3 Professor: André Luis Meneses Silva
Processadores – Aula 3 Professor: André Luis Meneses Silva
2- Entendendo o que é Arquitetura e Organização
Introdução à Programação
Linguagem de Montagem.
Representação de Instruções
Aula 3©Universidade do Algarve 1 Do alto-nível ao assembly Compiladores, Aula Nº 3 João M. P. Cardoso.
Classes de Arquiteturas Tipos de operação Codificação das operações
ORGANIZAÇÃO DE COMPUTADORES
Arquitetura de computadores
Organização e Arquitetura de Computadores
Organização e Arquitetura de Computadores
Agenda - Aula 2 Introdução (Computador Digital) Processadores
Agenda Modos de Endereçamento.
Processamento de dados na UCP e memória UCP
Arquitetura de Computadores
Software Básico Nível ISA Capítulo 5 Mitsuo Takaki
Unidade Central De Processamento: Processador
A Linguagem de Máquina – Desvios e Laços
A Linguagem de Máquina – Funções e recursividade Prof. André Luis M. Silva orgearq wordpress.com.
Microprocesadores x Microcontroladores
8088 Assembly Software Básico Mitsuo Takaki.
Arquitetura de Computadores 2009 Infra-estrutura Hardware
Parte 3 Seção de Dados e Unidade de Controle
Arquitetura de computadores
Instruções Condicionais e de Acesso a Memória Universidade Federal de Uberlândia Faculdade de Computação Prof. Dr. rer. nat. Daniel D. Abdala GSI013 –
ARQUITETURA DE COMPUTADORES Nível do Conjunto de Instruções
A linguagem de Máquina – Instruções Básicas
Arquitetura do ARM RISC (Reduced Instruction Set Computer) – Conjunto relativamente grande de registradores – Modelo “load/store “de processamento Operações.
Organização de Computadores Implementação da UCP Construção do caminho de dados Controle Implementação monociclo.
 Evolução constante das linguagens de programação de alto nível (LAN) desde o Fortran (primeira LAN)  Surgimento de novos paradigmas como a OO, Orientação.
Construção de Via de dados Trabalho Avaliativo do Primeiro Bimestre. Marcos André de Sena Silva.
Computador MIPS Organização básica e conjunto de instruções.
Transcrição da apresentação:

Aula-02 Arquitetura do conjunto de instruções – ISA (Instruction Set Architecture)

Arquitetura do Conjunto de Instruções Instruction Set Architecture (ISA) software Conjunto de instruções hardware

Computador de von Neumann - instruções e dados na mesma memória - as instruções são lidas da memória e executadas na unidade de processamento, uma a uma - as instruções são armazenadas na mesma seqüência da execução - a unidade de controle é responsável pelo controle da leitura e execução das instruções

Arquitetura do Conjunto de Instruções Instruction Set Architecture (ISA) O que vem a ser um conjunto de instruções? a fronteira entre o hardware e o software cada instrução é diretamente executada pelo hardware Como é representado? por um formato binário pois o hardware só entende bits os entes físicos são bits, bytes, words, n-words tamanho de palavra (word) é tipicamente 32 ou 64 bits hoje em dia, mas pequenos tamanhos são encontrados em processadores embarcados e processadores DSPs opções – formatos de comprimentos fixos e variáveis Fixos – cada instrução codificado num campo de mesmo tamanho (tipicamente uma palavra) Variáveis – meia palavra, palavra, múltiplas palavras

Abstração Descendo no nível de abstrações revelam-se outras informações

Exemplo ampliado swap(int v[], int k); { int temp; temp = v[k] v[k] = v[k+1]; v[k+1] = temp; } swap: muli $2, $5, 4 add $2, $4, $2 lw $15, 0($2) lw $16, 4($2) sw $16, 0($2) sw $15, 4($2) jr $31

Características das instruções Usualmente uma operação simples Identificada pelo campo de op-code Mas operações requerem operandos – 0, 1 ou 2 Para identificar onde eles estão, eles devem ser endereçados Endereço é para uma parte do armazenamento Possibilidades típicas de armazenamento são memória principal, registradores ou pilha 2 opções: endereçamento explícito ou implícito Implícito – o código de operação (op-code) implica no endereço dos operandos ADD numa máquina a pilha – retira (pop) 2 elementos do topo da pilha, e coloca (push) o resultado Explícito – o endereço é especificado em algum campo da instrução notar o potencial para 3 endereços – 2 operandos + 1 destino quais são as vantagens do endereçametno de registradores vs memória

Que operações são necessárias Aritmética + lógica ADD, SUB, MULT, DIV, SHIFT – lógico e aritmético, AND, OR, XOR, NOT Transferência de dados – copy, load, store Controle – branch, jump, call, return, trap Sistema – gerenciamento de memória e SO Ponto Flutuante Mesmo que as aritméticas porém usam operandos maiores ecimal – se fosse operar em decimal String – move, compare, search Manipulação de campos de bits

Arquitetura do Conjunto de Instruções do MIPS: Iremos trabalhar com a arquitetura do conjunto de instruções MIPS, projetado na Universidade de Stanford pela equipe do Prof. John Hennessy. similar a outras arquiteturas desenvolvidas desde 1980 Princípio da regularidade, p.ex.: todas as instruções de 32 bits Princípio da simplicidade, p.ex.: instruções simples, somente 3 formatos de instruções Usado por NEC, Nintendo, Silicon Graphics, Sony

Aritmética MIPS Todas as instruções tem 3 operandos A ordem dos operandos é fixa (primeiro o operando destino) Exemplo: C code: A = B + C MIPS code: add $s0, $s1, $s2 (associado às variáveis pelo compilador)

Aritmética MIPS Princípio: simplicidade favorece regularidade. C code: A = B + C + D; E = F - A; MIPS code: add $t0, $s1, $s2 add $s0, $t0, $s3 sub $s4, $s5, $s0 Os operandos devem ser registradores Somente 32 registradores disponíveis no MIPS

Registradores vs. Memória Os operandos de instruções arithméticas devem ser registradores, — somente 32 registradores disponíveis O compilador associa variáveis a registradores E programas com um número grande de variáveis? Processor I/O Control Datapath Memory Input Output

Organização de Memória Vista como um grande vetor unidimensional, com endereços. Um endereço de memória é um índice para o vetor "Byte addressing" significa que o índice aponta para um byte de memória. 8 bits of data 1 8 bits of data 2 8 bits of data 3 8 bits of data 4 8 bits of data 5 8 bits of data 6 8 bits of data ...

Organização de Memória A maioria dos dados usam palavras ou "words" Para MIPS, um word é constituído de 32 bits ou 4 bytes. 232 bytes têm endereços de 0 a 232-1 230 words têm endereços de bytes 0, 4, 8, ... 232-4 Words são alinhados: O que significam os dois bits menos significativos de um endereço de word? 32 bits of data Os registradores carregam dados de 32 bits 4 32 bits of data 8 32 bits of data 12 32 bits of data ...

Instruções de referência à memória Instruções Load-Word e Store-Word Exemplo: C code: A[8] = h + A[8]; MIPS code: lw $t0, 32($s3) add $t0, $s2, $t0 sw $t0, 32($s3) Store-Word tem destino por último Lembrar que os operandos aritméticos são de registradores, não de memória!

Nosso Primeiro Exemplo swap(int v[], int k); { int temp; temp = v[k] v[k] = v[k+1]; v[k+1] = temp; } swap: muli $2, $5, 4 add $2, $4, $2 lw $15, 0($2) lw $16, 4($2) sw $16, 0($2) sw $15, 4($2) jr $31

O que vimos: MIPS — carrega words mas endereça bytes — aritmética somente usando registradores Instrução Significado add $s1, $s2, $s3 $s1 = $s2 + $s3 sub $s1, $s2, $s3 $s1 = $s2 – $s3 lw $s1, 100($s2) $s1 = Memory[$s2+100] sw $s1, 100($s2) Memory[$s2+100] = $s1

Linguagem de Máquina Instruções, como registradores e words, tem também 32 bits Exemplo: add $t0, $s1, $s2 registradores tem numerações, $t0=9, $s1=17, $s2=18 Formato de Instruções aritméticas - tipo-R (registradores): op rs rt rd shamt funct 000000 10001 10010 01001 00000 100000

Linguagem de Máquina Considerar as instruções load-word e store-word, Introduz um novo tipo de formato de instrução tipo-I para instruções de transferência de dados outro formato é o tipo-R para registradores Exemplo: lw $t0, 32($s2) Formato das instruções tipo-I op rs rt 16 bit number 35 18 9 32

Conceito de Programa Armazenado na memória (von Neumann) Instruções são conjunto de bits Os programas são armazenados na memória —para serem lidos e executados Se as instruções estão na mesma memória como os dados, elas podem também serem lidas e escritas como se fossem dados. Ciclos de Fetch & Execute Instruções são lidas (fetched) e colocadas num registrador especial Os bits no registrador "controlam" as ações subsequentes Busca (Fetch) a próxima instrução e continua Processor Memory memory for data, programs, compilers, editors, etc.

Instruções de Controle Instruções de tomadas de decisão altera o fluxo de controle, i.e., muda a próxima instrução a ser executada Instruções de desvio condicional do MIPS: bne $t0, $t1, Label beq $t0, $t1, Label Exemplo: if (i==j) h = i + j; bne $s0, $s1, Label add $s3, $s0, $s1 Label: ....

Instruções de Controle Instruções de salto incondicional do MIPS: j label Exemplo: if (i!=j) beq $s4, $s5, Lab1 h=i+j; add $s3, $s4, $s5 else j Lab2 h=i-j; Lab1: sub $s3, $s4, $s5 Lab2: ...

Revisão: op rs rt rd shamt funct R I op rs rt 16 bit address J Instrução Significado add $s1,$s2,$s3 $s1 = $s2 + $s3 sub $s1,$s2,$s3 $s1 = $s2 – $s3 lw $s1,100($s2) $s1 = Memory[$s2+100] sw $s1,100($s2) Memory[$s2+100] = $s1 bne $s4,$s5,L Next instr. is at Label if $s4 = $s5 beq $s4,$s5,L Next instr. is at Label if $s4 = $s5 j Label Next instr. is at Label Formatos: R I J op rs rt rd shamt funct op rs rt 16 bit address op 26 bit address

Fluxo de Controle Temos: beq, bne, que tal Branch-if-less-than? Nova instrução: if $s1 < $s2 then $t0 = 1 slt $t0, $s1, $s2 else $t0 = 0 Pode-se usar essa instrução para "blt $s1, $s2, Label" — pode agora construir estruturas de controle geral Note que o assembler precisa de um registrador para tal, — existe uma regra para o uso de registradores

Regra para o uso de registradores

Constantes Constantes pequenas são usadas frequentemente (50% dos operandos) p.ex., A = A + 5; B = B + 1; C = C - 18; Soluções? Colocar as constantes típicas nas instruções criar registradores hardwired (como $zero) para constantes como um. Instruções MIPS: addi $29, $29, 4 slti $8, $18, 10 andi $29, $29, 6 ori $29, $29, 4

E as constantes maiores? Gostariamos de carregar constantes de 32 bits em um registrador Devemos usar duas instruções, a instrução "load upper immediate" lui $t0, 1010101010101010 Então devemos carregar os bits menos significativos à direita, i.e., ori $t0, $t0, 1010101010101010 1010101010101010 0000000000000000 Preenchido com zeros 1010101010101010 0000000000000000 0000000000000000 1010101010101010 ori 1010101010101010

Ling. Assembly vs. Ling. de Máquina Assembly provê uma representação simbólica conveniente Mais fácil que escrever números P.ex., o operando destino é o primeiro A linguagem de máquina é a realidade num nível inferior P.ex., destino não é o primeiro Assembly pode prover 'pseudoinstruções' P.ex., “move $t0, $t1” existe somente em Assembly Seria implementada usando “add $t0,$t1,$zero” Quando o assunto é o desempenho devem ser consideradas as instruções reais

Visão geral do MIPS Instruções simples todas de 32 bits Bem estruturadas Somente três formatos de instruções Confiar no compilador para obter desempenho — quais são os objetivos do compilador? Ajudar o compilador onde é possível R I J op rs rt rd shamt funct op rs rt 16 bit address op 26 bit address

Endereços em Branchs e Jumps Instruções: bne $t4,$t5,Label A próxima instrução é no Label se $t4 <>$t5 beq $t4,$t5,Label A próxima instrução é no Label se $t4 = $t5 j Label A próxima instrução é no Label Formatos: Endereços não são de 32 bits — Como manipulá-los com instruções de load e store? op rs rt 16 bit address I J op 26 bit address

Endereços em Branchs Instruções bne $t4,$t5,Label A próxima instrução é no Label se $t4<>$t5 beq $t4,$t5,Label A próxima instrução é no Label se $t4=$t5 Formatos: Pode especificar um registrador (como lw e sw) e adicioná-lo ao endereço usar Instruction Address Register (PC = program counter) A maioria dos branchs são locais (princípio da localidade) Instruções de Jump usa apenas os bits de alta ordem do PC Limite de endereçamento de 256 MB op rs rt 16 bit address I

Resumindo: Posição rápida para os dados: os dados devem estar em registradores para realizar aritmética Registrador $zero sempre contem valor 0 Registrador $at é reservado para o assembler manipular constantes grandes Memória: acessada somente por instruções de transferência de dados Endereçado por bytes, tal que as palavras seqüenciais difiram de 4 no endereço Memória contem estrutura de dados, como arrays, e valores de registradores que transbordaram

Arquiteturas Alternativas Alternativas de Projeto: Prover operações mais potentes A meta é reduzir o número de instruções executadas O perigo é um tempo de ciclo mais lento e/ou um CPI maior As vezes referidos como “RISC vs. CISC” virtualmente todos os novos conjuntos de instruções desde 1982 tem sido RISC Veremos o PowerPC e 80x86

PowerPC Indexed addressing exemplo: lw $t1,$a0+$s3 #$t1=Memory[$a0+$s3] O que devemos fazer no MIPS? Update addressing Atualizar um registrador como parte do load (para operar sobre elementos de vetores) exemplo: lwu $t0,4($s3) #$t0=Memory[$s3+4];$s3=$s3+4 Outros: load multiple/store multiple Um registrador contador especial “bc Loop” decrementar o contador, e se não for 0 vai para loop

A partir do 80386 , também chamado de IA-32 Intel 80x86 A partir do 80386 , também chamado de IA-32 1978: Intel 8086 é anunciado (arquitetura de 16 bits) 1980: 8087 é adicionado o coprocessador de ponto flutuante 1982: 80286 aumenta o espaço de endereçamento para 24 bits, + instruções 1985: 80386 estende para 32 bits, novos modos de endereçamento 1989-1995: 80486, Pentium, Pentium Pro e algumas novas instruções (a maioria para melhorar o desempenho) 1997: MMX é adicionado “This history illustrates the impact of the “golden handcuffs” of compatibility “adding new features as someone might add clothing to a packed bag” “an architecture that is difficult to explain and impossible to love”

Uma arquitetura dominante: 80x86 Complexidade: Instruções de 1 a 17 bytes um operando deve agir como fonte e destino um operando pode vir da memória Modos de endereçamento complexos p.ex., “base ou scaled index com deslocamento de 8 ou 32 bit” Salvando a graça: As instruções mais frequentemente usadas não são tão difíceis de serem construidas Os compiladores evitam as porções da arquitetura que são lentas “what the 80x86 lacks in style is made up in quantity, making it beautiful from the right perspective”