Anotações da 2a Edição



Documentos relacionados
MIPS ISA (Instruction Set Architecture)

Organização e Projetos de Computadores. Capítulo 2. Organização e Projetos de Computadores. Instruções

Arquitetura de Computadores

Arquitetura de Computadores. Linguagem de Máquina

MODOS DE ENDEREÇAMENTO

Arquitetura de Computadores I. Prof. Ricardo Santos (Cap 2)

Capítulo 3. Instruções: Aritmética MIPS

Capítulo 3. This material may not be copied or distributed for commercial purposes without express written permission of the copyright holder.

Organização e Arquitetura de Computadores I

Conjunto de Instruções MIPS

MIPS. Prof. Carlos Bazilio

Conjunto de Instruções e Arquitectura p.1

Arquitetura de Computadores I Prof. Ricardo Santos (Cap 2)

PARTE II - CONJUNTO DE INSTRUÇÕES ARQUITETURA DE COMPUTADORES ANTONIO RAMOS DE CARVALHO JÚNIOR

Aula 14: Instruções e Seus Tipos

Computadores de Programação (MAB353)

Relembrando desempenho...

Computadores de Programação (MAB353)

Relembrando desempenho...

SSC0114 Arquitetura de Computadores

Conjunto de. Instrução MIPS. Parte II. Instruções MIPS. Instruções MIPS. Instruções MIPS :: Instruções lógicas. :: Instruções lógicas

SSC0611 Arquitetura de Computadores

RISC simples. Aula de Março de

Sistemas Processadores e Periféricos Aula 2 - Revisão

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I

Infraestrutura de Hardware. Instruindo um Computador

Organização e Arquitetura de Computadores I

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

Arquitetura de Computadores I. Prof. Ricardo Santos (Cap 2)

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2)

Registradores na Arquitetura MIPS. 29/4/2016 MIPS - Instruction Set Architecture

Introdução à Arquitetura de Computadores

Sistemas Processadores e Periféricos Aula 5 - Revisão

Conjunto de Instruções. Conjunto de Instruções

Conjunto de Instruções

3. INSTRUÇÕES. Instrução é uma palavra da linguagem de máquina. Instruction Set do MIPS ( usado pela NEC, Nintendo, Silicon Graphics e Sony.

ARQUITETURA DE COMPUTADORES

Implementação de um soft-core em VHDL baseado no conjunto de instruções MIPS-I

Sistemas de Computação. Instruções de Linguagem de Máquina

Organização de Computadores

Arquitetura de Computadores - Arquitetura RISC. por Helcio Wagner da Silva

Componentes do Computador e. aula 3. Profa. Débora Matos

Caminho dos Dados e Atrasos

Arquitetura de Computadores

Arquitetura de Sistemas Digitais (FTL066) Instruções: Linguagem do Computador Segunda Lista de Exercícios

Arquitectura de Computadores

Computador: Hardware + Software

NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Conjunto de instruções. O Conjunto de Instruções. Conjunto de instruções. Instruções típicas. Instruções típicas. Instruções típicas

Capítulo MC10 Organização Básica de Processadores

Processadores BIP. Conforme Morandi et al (2006), durante o desenvolvimento do BIP, foram definidas três diretrizes de projeto:

Organização de Computadores 1

Computadores de Programação (MAB353)

Tópicos Avançados em Sistemas Computacionais: Infraestrutura de Hardware Aula 10

Arquitetura de Computadores I

Arquitetura de Computadores. Tipos de Instruções

MIPS Implementação. sw) or, slt. Vamos examinar uma implementação que inclui um subconjunto de instruções do MIPS

Organização e Arquitetura de Computadores I

Capítulo 4. MARIE (Machine Architecture Really Intuitive and Easy)

Arquitetura de Computadores. Assembly Miscelâneas. Mário O. de Menezes.

Prof. Marcos Quinet Universidade Federal Fluminense UFF Pólo Universitário de Rio das Ostras - PURO

Informática I. Aula 5. Aula 5-13/05/2006 1

Arquitetura de Computadores I

Predição de Desvios e Processadores Superescalares Especulativos

Linguagem de Montagem Funcionamento de CPU e Assembly Rudimentar

ArchC. Wesley Nunes Gonçalves

O Processador: Caminho de Dados e Controle

Índice. Tudo! (datapath de um ciclo)

Organização e Arquitetura de computadores

ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM

Arquiteturas RISC. (Reduced Instructions Set Computers)

BARRAMENTO DO SISTEMA

Prova P4/PS Disciplina: Organização de Computadores-EC Professor: Ney Laert Vilar Calazans lui+ori syscall 1. .text 2. main: $s0, string 3.

ANHANGUERA EDUCACIONAL. Capítulo 2. Conceitos de Hardware e Software

Organização e Arquitetura de Computadores I

Infra-estrutura de Hardware

ARQUITECTURA DE COMPUTADORES

Arquitetura de processadores: RISC e CISC

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias:

Infraestrutura de Hardware. Implementação Monociclo de um Processador Simples

Arquitetura de Computadores Paralelismo, CISC X RISC, Interpretação X Tradução, Caminho de dados

28/9/2010. Unidade de Controle Funcionamento e Implementação

Edeyson Andrade Gomes

Conjunto de Instruções. Prof. Leonardo Barreto Campos 1

Microcontroladores e Interfaces 3º Ano Eng. Electrónica Industrial

Descrição e análise da implementação em Assembly MIPS da função itoa

Geração de código. Ivan Ricarte INTRODUÇÃO À COMPILAÇÃO

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES ARQUITETURAS RISC E CISC. Prof. Dr. Daniel Caetano

3. O NIVEL DA LINGUAGEM DE MONTAGEM

A Unidade Central de Processamento é a responsável pelo processamento e execução de programas armazenados na MP.

RISC - Reduced Instruction Set Computer

2 Formalidades referentes ao trabalho

Cap - 3: Linguagem de Máquina - MIPS

Geração de código intermediário. Novembro 2006

Conjunto de instruções e modos de. aula 4. Profa. Débora Matos

Aula 26: Arquiteturas RISC vs. CISC

Transcrição:

Anotações da 2a Edição OBS: Essas anotações são adaptações do material suplementar (apresentações PPT) ao Livro do Hennessy e Patterson. Supõe-se que os estudantes tenham noções de lógica digital e linguagem assembly para o entendimento das aulas. 1

Conjunto de Instruções MIPS 2

Aritmética MIPS Todas as Instruções tem 3 operandos Ordem dos operandos é fixa (destino sempre primeiro) Exemplo: C code: C = A + B MIPS code: add $s0, $s1, $s2 (associado a variáveis definidas pelo compilador) 3

Aritmética MIPS Princípios de design: simplicidade favorece a regularidade. Por que? Obviamente, isto complica algumas coisas... C code: A = B + C + D; E = F - A; MIPS code: add $t0, $s1, $s2 add $s0, $t0, $s3 sub $s4, $s5, $s0 Operandos devem ser registradores, e só existem 32 deles Princípio de Projeto: quanto menor, mais rápido! Por que? 4

Registradores x Memória Operandos das Instruções Aritméticas devem ser registradores, Somente 32 registradores estão disponíveis O Compilador associa variáveis com registradores... O que significa um programa com muitas variáveis? Control Input Memory Datapath Output Processor I/O 5

Organização da Memória Memória: enorme vetor unidimensional acessado por endereços. Endereço de memória = índice para o vetor Endereçar um Byte" = índice que aponta para um byte da memória. 0 1 2 3 4 5 6... 8 bits of data 8 bits of data 8 bits of data 8 bits of data 8 bits of data 8 bits of data 8 bits of data 6

Organização da Memória Bytes são interessantes, mas geralmente o acesso é feito a palavras mais longas que 1 byte Como vimos, para o MIPS, a palavra é de 32 bits (4 bytes). 0 4 8 12... 32 bits of data 32 bits of data 32 bits of data 32 bits of data 2 32 bytes com endereços byte de 0 a 2 32-1 2 30 palavras com endereços 0, 4, 8,... 2 32-4 registradores armazenam 32 bits de dados Palavras são alinhadas: Assim, o que representam os 2 bits menos significativos do endereço de uma palavra? 7

Instruções Instruções load (trazer de) e store (enviar para) Exemplo: C code: MIPS code: A[12] = h + A[12]; lw $t0, 36($s3) add $t0, $s2, $t0 sw $t0, 36($s3) O destino da palavra ($t0) a ser armazenada vem no início da instrução sw Lembre-se que todos os operandos aritméticos são registradores e não endereços de memória! 8

Um 1o. Exemplo Como poderíamos escrever esse código de troca de valor de duas posições (k e k+1) de um vetor? swap(int v[], int k); { int temp; temp = v[k] v[k] = v[k+1]; v[k+1] = temp; } swap: muli $4, $5, 4 add $2, $4, $2 lw $15, 0($2) lw $16, 4($2) sw $16, 0($2) sw $15, 4($2) jr $31 9

Mas, aprendemos que: MIPS Carrega palavras, mas acessa bytes Aritmética somente em 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 10

Instruções MIPS Todas as instruções têm 32 bits Todas têm opcode (código de instrução) de 6 bits O modo de endereçamento é codificado juntamente com o opcode 31 26 25 0 opcode 11

Linguagem de Máquina Instruções, assim como registradores de palavras de dados, tem tamanho de 32 bits Exemplo: add $t0, $s1, $s2 registradores têm números, $t0=8, $s1=17, $s2=18 Formato de uma Instrução R típico: 000000 10001 10010 01000 00000 100000 op rs rt rd shamt funct Observe a ordem na instrução assembly e na implementação! São diferentes! Você pode imaginar o que esses nomes (siglas) indicam? op código de operação rs, rt registradores fonte rd registrador destino shamt (shift amount) é usado em instruções de deslocamento funct código de função da ULA. É associado ao campo op (no caso de ULA é 00000) 12

Linguagem de Máquina Considere as instruções load-word e store-word: O que o princípio da regularidade nos traz? Novo princípio: Bons projetos envolve um compromisso... Introdução de um novo tipo de formato de Instrução Instruções tipo-i para transferência de dados (lw e sw) Outros formatos para instruções tipo-r para registradores Exemplo: lw $t1, 32($s2) 1 0 0 03511 1 018 0 1 0 0 190 0 1 0 0 032 0 0 0 0 0 0 0 1 0 0 0 0 0 op rs rt 16 bit number rs registrador-base para o cálculo do endereço de memória rt registrador-destino (para lw) ou registrador-fonte (para sw) Onde está o compromisso? 13

Controle de Fluxo no MIPS Pontos de decisão podem criar instruções alterar o fluxo de controle, i.e., mudar a próxima instrução a ser executada Endereço destino sempre especificado! Instruções MIPS de desvio condicional: bne $t0, $t1, Label beq $t0, $t1, Label Exemplo: if (i!=j) h=i+j; bne $s0, $s1, Label... Label: add $s3, $s0, $s1... 14

Uso de instruções de controle 15

Controle de Fluxo Instruções MIPS de desvio incondicional (jumps): 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:... Você poderia pensar numa construção simples de um loop em MIPS? 16

Mais ainda: 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 Prox. instr. label L se $s4!= $s5 beq $s4,$s5,l Prox. instr. label L se $s4 == $s5 j L Prox. instr. label L Formatos: R op rs rt rd shamt funct I,J* op rs rt endereço 16 bit ou imediato J op endereço de 26 bits J* = desvio condicional 17

Controle do Fluxo Temos: beq, bne E se quisermos uma nova instrução do tipo branch-if-less-than? if $s1 < $s2 then slt $t0,$s1,$s2 $t0 = 1 else $t0 = 0 Usando beq, bne e $t0 pode se implementar a lógica requerida A Instrução pode ser usada para construir "blt $s1,$s2,label" é possível se construir estruturas de controle genéricas Note que o montador necessita de um registrador para fazer isso existem políticas de uso específicas para os registradores 18

Convenções e Política de Uso dos 32 Registradores MIPS Nome No.Registrador Uso $zero 0 valor constante 0 $v0-$v1 2-3 valores para resultados e avaliação de expressões $a0-$a3 4-7 argumentos $t0-$t7 8-15 temporários $s0-$s7 16-23 salvos/armazenados $t8-$t9 24-25 mais temporários $gp 28 ponteiro global $sp 29 ponteiro de pilha (stack pointer) $fp 30 ponteiro de quadro (frame pointer) $ra 31 endereço de retorno OBS: Registro 1, chamado $at, é reservado para o montador. Os registros 26 e 27, chamados $k0 e $k1, são reservados para o Sistema Operacional 19

Constantes Constantes pequenas são usadas frequentemente... Ex: A = A + 5; B = B + 1; C = C - 18; Soluções? Colocar constantes típicas na memória e carregá-las. Criar registradores hard-wired para certas constantes: ex. $zero Instruções MIPS para imediatos: addi $29, $29, 4 slti $8, $18, 10 andi $29, $29, 6 ori $29, $29, 4 Como podemos fazer isso? Lembram-se da instrução muli do 1º exemplo (swap) 20

O que fazer com grandes constantes? É possível carregar constantes de 32 bits em um registrador Devem ser usadas 2 instruções para implementar isso: 1. Nova Instrução load upper immediate lui $t0, 1010101010101010 preenchida com zeros 1010101010101010 0000000000000000 2. Depois, completar os bits de ordem mais baixa à direita, i.e., ori $t0, $t0, 1110101010101010 1010101010101010 0000000000000000 ori 0000000000000000 1110101010101010 1010101010101010 1110101010101010 21

Linguagem Assembly x Linguagem de Máquina Assembly proporciona uma representação simbólica conveniente MUITO MAIS FÁCIL que escrever dígitos binários Ex: registrador destino é sempre o primeiro Linguagem de Máquina está em outro nível de abstração Ex: destino não é preenchido primeiro na instrução tipo-r Assembly disponibiliza apenas pseudoinstruções ex., move $t0,$t1 existe somente em Assembly Poderia ser implementado usando add $t0,$t1,$zero Quando se considera desempenho, deve-se pensar em contar instruções reais em linguagem de máquina 22

Uso das instruções 23

Uso das instruções 24

Outras questões Coisas que não estão sendo cobertas aqui: Suporte a procedures Carregadores (loaders), ligadores (linkers,), pilhas (stacks), frames, recursão, etc. Manipulação de strings e ponteiros Interrupções e exceções Chamadas de sistema (system calls) Alguns desses pontos serão tratados no futuro e em outros cursos O foco agora está em questões ligadas à arquitetura: Básico da linguagem de máquina MIPS e código de máquina Construção de um processor para executar estas instruções. 25

Sumarização: Conjunto de Instruções MIPS 26

Visão Geral do MIPS Instruções simples, todas com largura de 32 bits Bastante estruturada, pouca carga desnecessária nas instruções Somente 3 formatos de instrução R I J op rs rt rd shamt funct op rs rt 16 bit address op 26 bit address Apostar no compilador para obter desempenho Quais são os objetivos de um compilador? Ajudar o compilador no que nós queremos... 27

Papel fundamental do Compilador Sem otimizações 28

Endereços em Desvios (Branches) e Saltos (Jumps) Instruções: bne $t4,$t5,label beq $t4,$t5,label j Label Prox Instr. está em Label se $t4 $t5 Prox Instr. está em Label se $t4=$t5 Prox Instr. está em Label Formatos: I J op rs rt 16 bit address op 26 bit address Endereços não estão em 32 bits Como manipular isso para Instruções load e store? 29

Endereços em Desvios (Branches) Instruções: bne $t4,$t5,label beq $t4,$t5,label Formatos: Prox Instr. está em Label se $t4 $t5 Prox Instr. está em Label se $t4=$t5 I op rs rt 16 bit address Pode especificar um registrador (lw e sw) e adicioná-lo a um endereço Usar o Registrador de Endereço de Instrução (PC = program counter) 16 bits parece pouco, entretanto muitos desvios são próximos (princípio da localidade) Instruções Jump usam apenas os bits de mais alta ordem do PC Endereços limitados a 256 MB (pense no porquê...) 30

Sumário: Registradores MIPS Nome Exemplo Comentários $s0-$s7, $t0-$t9, $zero, Localizações rápidas de dados. No MIPS, os dados devem estar nos registradores 32 registradores $a0-$a3, $v0-$v1, $gp, aritméticos. O Registrador $zero no MIPS é sempre igual a 0. Registrador $at é $fp, $sp, $ra, $at reservado para o montador manipular constantes grandes. Memory[0], Acessado somento por instruções de transferência de dados. MIPS usa endereços de bytes, e palavras sequenciais diferenciam de 4. 2 30 memory Memory[4],..., Memória armazena estruturas de dados, como vetores, e registros encadeados, words Memory[4294967292] como aqueles salvos em procedure calls. 31

Sumário: Assembly MIPS Linguagem Assembly MIPS Categoria Instrução Exemplo Significado Comentário add add $s1, $s2, $s3 $s1 = $s2 + $s3 3 operandos; dados em registradores Arim ética subtract sub $s1, $s2, $s3 $s1 = $s2 - $s3 3 operandos; dados em registradores add immediate addi $s1, $s2, 100 $s1 = $s2 + 100 Usado para adicionar constantes load w ord lw $s1, 100($s2) $s1 = Memory[$s2 + 100] Palavra da memória para registrador Transf. de store w ord sw $s1, 100($s2) Memory[$s2 + 100] = $s1 Palavra do registrador para memória dados load byte lb $s1, 100($s2) $s1 = Memory[$s2 + 100] Byte da memória para registrador store byte sb $s1, 100($s2) Memory[$s2 + 100] = $s1 Byte do registrador para memória load upper lui $s1, 100 $s1 = 100 * 2 16 Carregar constante no 16 bits immediate superiores branch on equal beq $s1, $s2, 25 if ($s1 == $s2) go to PC + 4 + 100 Teste de igualdade; desvio PC-relativo Desvio branch on not equal bne $s1, $s2, 25 Condicional set on less than slt $s1, $s2, $s3 if ($s1!= $s2) go to PC + 4 + 100 if ($s2 < $s3) $s1 = 1; else $s1 = 0 Teste de Desigualdade; desvio PCrelativo Comparar menor que; para beq, bne set less than slti $s1, $s2, if ($s2 < 100) $s1 = 1; Constante na comparação menor que immediate 100 else $s1 = 0 jump j 2500 go to 10000 Saltar para o endereço alvo Desvio jump register jr $ra go to $ra Para escolha, retorno de procedimento Incondicional jump and link jal 2500 $ra = PC + 4; go to 10000 Para chamada de procedimento 32

Mais detalhes sobre formas de endereçamento MIPS 1. Immediate addressing op rs rt Immediate 2. Register addressing op rs rt rd... funct Registers Register 3. Base addressing op rs rt Address Memory Register + Byte Halfword Word 4. PC-relative addressing op rs rt Address Memory PC + Word 33

op rs rt Address Memory Detalhes sobre Register formas de + endereçamento Byte Halfword Word 4. PC-relative addressing op rs rt Address Memory PC + Word 5. Pseudodirect addressing op Address Memory PC Word 34

Arquiteturas Alternativas Projetos alternativos: Prover operações mais poderosas Objetivo: reduzir o número de Instruções executadas Perigo é aumentar o tempo de ciclo e/ou aumentar o CPI Algumas vezes associado ao confronto RISC x CISC Virtualmente, todos os Conjuntos de Instruções de 1982 a 95 foram RISC VAX: minimizar o tamanho do código, de forma a tornar a linguagem assembly mais fácil Instruções de tamanho 1 a 54 bytes! Para que assembly mais fácil? Rapidamente, olhar as arquiteturas PowerPC e 80x86 (detalhes no livro do Sttalings) 35

PowerPC Endereçamento Indexado Ex: lw $t1,$a0+$s3 #$t1=memory[$a0+$s3] Como isso seria feito no MIPS? Atualizar endereçamento Atualizar um registrador como parte da carga (para andar através de arrays) Ex: lwu $t0,4($s3) #$t0=memory[$s3+4];$s3=$s3+4 Como isso seria feito no MIPS? Outros: Múltiplos load/store Um registrador contador especial bc Loop decrementa contador, se!= 0 goto loop 36

80x86 1978: O Intel 8086 é anunciado (arquitetura 16 bit) 1980: O coprocessador 8087 floating point é adicionado 1982: O 80286 amplia o espaço de endereçamento para 24 bits, + Instruções 1985: O 80386 estende para 32 bits, novos modos de endereçamento 1989-1995: O 80486, Pentium, Pentium Pro adicionam poucas Instruções (maioria delas projetadas para ganho de 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 (Hennessy & Patterson) 37

A arquitetura dominante: 80x86 Leia o livro texto para uma descrição mais detalhada Complexidade: Instruções com tamanho de 1 a 17 bytes 1 operando pode funcionar como fonte e destino 1 operando pode vir da memória Modos de endereçamento complexos Ex: índice de base ou de escala com deslocamento de 8 ou 32 bits Pontos interessantes: As instruções mais frequentemente usadas não são tão difíceis de construir Compiladores evitam 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 (Hennessy & Patterson) 38

Sumário Complexidade da Instrução é apenas UMA das variáveis Número de instruções mais baixo vs. alto CPI / taxa de clock mais baixa Princípios de projeto: Simplicidade favorece regularidade Quanto menor, mais rápido Um bom projeto implica em compromisso Fazer o caso comum mais rápido Conjunto de Instruções da Arquitetura (Instruction Set Architecture) Uma abstração MUITO importante! 39