ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I

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

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

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

Infraestrutura de Hardware. Instruindo um Computador

AULA 05: LINGUAGEM DE MONTAGEM: SUPORTE A PROCEDIMENTOS

SSC0114 Arquitetura de Computadores

Especificação do Projeto de Processador RISC

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

MIPS ISA (Instruction Set Architecture)

SSC0611 Arquitetura de Computadores

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

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

Organização e Arquitetura de Computadores I

Conjunto de Instruções MIPS Parte I

Relembrando desempenho...

Relembrando desempenho...

Nível Máquina Formatos de Instruções

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

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

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

Ministério da Educação UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ. Aula 1. Cibele Lemos Freire Viginoski

Infra-estrutura de Hardware

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

Organização de Computadores μarquitetura. Na Aula Anterior... Introdução. Nesta Aula. MIPS-Monociclo. Formas de Organização 17/10/2016

MICROPROCESSADORES II (EMA911915) NIOS II - ASSEMBLY 2 O SEMESTRE / 2018

Organização e Arquitetura de Computadores I

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

Operações de Controle de Fluxo e Acesso a Memória. Na Aula Anterior... Nesta Aula. Instruções de Controle de Fluxo. if then - else.

Organização de Computadores

1: 2: 2, [1] [2] 0x x001f8021 $16,$0,$31 13 [3] 0x x

Arquitetura de Computadores. Linguagem de Máquina

ção de Computadores II

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

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

DataPath II Tomando o controle!

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

Disciplina: Organização de Computadores Professor: Ney Laert Vilar Calazans. Lista de associação de números e mnemônicos para os registradores do MIPS

O Processador: Via de Dados e Controle

Dicas: Nas linhas 7 e 8 as constantes imediatas são especificadas como caracteres ASCIIE, o que é aceito pelo montador MARS.

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

Infraestrutura de Hardware. Instruindo um Computador Subrotinas, Tipos de Dados e Modos de Endereçamento

Microcontroladores e Interfaces

Prof. Gustavo Oliveira Cavalcanti

Arquiteturas de Computadores

UCP: Construindo um Caminho de Dados (Parte I)

Faculdade de Computação

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

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

Cap - 3: Linguagem de Máquina - MIPS

Arquitetura de Computadores

66 [2] 0x x c

Conjunto de Instruções MIPS Parte IV

AULA 03: FUNCIONAMENTO DE UM COMPUTADOR

Infra-estrutura de Hardware

Arquitetura de Computadores. Prof. Alexandro Baldassin. 1o semestre/2017

Disciplina: Organização e Arquitetura de Computadores II Professores: Fabiano Hessel e Ney Calazans 22/abril/2009

lw, sw add, sub, and, or, slt beq, j

1: 2: 2, [1] [2] 0x x3c011001

Organização ou MicroArquitectura

[1] $2,$0,$3 105 [2] 0x004000e8

MIPS. Prof. Carlos Bazilio

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

Número de Linha. Código objeto

Infra- Estrutura de Hardware

Disciplina: Organização de Computadores Professor: Ney Laert Vilar Calazans

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

Lista de Revisão para a Primeira Avaliação

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

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

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

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

Figura 1. Datapath do MIPS Superescalar Especulativo CES SE

Disciplina: Organização de Computadores Professor: Ney Laert Vilar Calazans

William Stallings Arquitetura e Organização de Computadores 8 a Edição

4. Modelo de Programação do DLX Introdução

Aula 17: UCP: Construindo um Caminho de Dados (Parte I)

Microprocessadores I ELE Aula 7 Conjunto de Instruções do Microprocessador 8085 Desvios

Arquitetura de Computadores MIPS

Prof. Leonardo Augusto Casillo

Sumário. Aula Anterior. Exercício 7.1 Contagem de bits a 1 numa palavra Exercício 7.2 Deslocamento de n bits num operando de 64 bits.

Microprocessadores CPU. Unidade de Controle. Prof. Henrique

Unidade Central de Processamento 2. Registradores

ORGANIZAÇÃO DE COMPUTADORES CAPÍTULO 6: PROCESSADORES. Prof. Juliana Santiago Teixeira

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

SSC510 Arquitetura de Computadores 1ª AULA

Faculdade de Computação

O Funcionamento do Processador

a) Calcule o valor médio de CPI apresentado na execução deste programa P, utilizando-se C1 sem e com otimização. Resposta:

Conteúdos: Debora, Edcarllos, livros! slides disponíveis!

Instruções. Maicon A. Sartin

Organização de Computadores

Disciplina: Arquitetura de Computadores

Universidade Federal do Rio de Janeiro Bacharelado em Ciência da Computação. Arquitetura de Computadores I. Organização Básica do Computador

Organização e Arquitetura de Computadores I

CAPÍTULO 4 CAMINHO DE DADOS E CONTROLE

CPU. Funções: Componentes: Processamento; Controle. UC (Unidade de Controle); Registradores; ALU s, FPU s etc. Arquitetura de Computadores 3

Disciplina: Organização de Computadores-EC Professor: Ney Laert Vilar Calazans

Arquiteturas de Computadores. Princípios e exemplos de conjuntos de instruções

Transcrição:

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I AULA 04: ASPECTO BÁSICO DO PROJETO DE UMA CPU SIMPLES E LINGUAGEM DE MONTAGEM Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação

QUAIS OS COMPONENTES DE UMA CPU?

COMPONENTES DE UMA CPU

COMPONENTES BÁSICOS DE UMA CPU Barramento Unidade de Controle Banco de registradores Unidade Lógica e Aritmética (ULA) Contador de Programa (PC) Processador Registrador de Instrução (IR) Memória

ARQUITETURA DE UMA CPU SIMPLES VISÃO ABSTRATA Clock Busca - Decodifica - Executa

DETALHE DO PROCESSADOR Controller (Unidade de controle) Responsável por controlar as operações do datapath. Datapath (Caminho de dados) Um conjunto de registradores Os registradores alimentam as duas entrada da ULA. A ULA A saída da ULA é conectada a um dos registradores. O barramento

DETALHAMENTO MEMÓRIA As memórias são endereçadas por byte (8 bits). Contudo as memórias são vistas como uma sequência de palavras de 32 bits. Por isso os endereços de palavras devem ser múltiplos de 4. Existem dois tipos de sistemas para numeração dos bytes dentro da memória: Big endian: Byte mais significante tem menor endereço da palavra. Little endian: Byte mais significante tem o maior endereço.

DETALHAMENTO MEMÓRIA BIG ENDIAN VS LITTLE ENDIAN Valor da palavra (hexadecimal): 6151CE94

O QUE MAIS É PRECISO PARA PROJETAR UMA CPU?

PROJETO DE UMA CPU SIMPLES Definir o conjunto de registradores Poucos registradores (menos significa mais rápido). Mais de 32 registradores exigiria: Um ciclo de clock maior. Formato de instruções maiores, para comportar mais bits de endereçamento. Definir os tipos e os formatos das instruções Instruções de tamanho fixo. Poucos formatos de instruções. Mais de três operandos por instruções exigiria um projeto de hardware mais complicado Número reduzido de modo de endereçamento Definir o repertório de instruções Repertório de instruções limitados

PROJETO DE UMA CPU SIMPLES REGISTRADORES Registradores Número Uso $zero 0 Valor constante igual a zero. $at 1 Assembler temporário. $v0 - $v1 2-3 Retorno de função. $a0 - $a3 4-7 Argumento de função. $t0 - $t7 8-15 Variáveis temporárias, que não precisam ser salvas. $s0 - $s7 16 23 Variáveis salvas por uma função chamada. $t8 - $t9 24-25 Mais variáveis temporárias. $k0 - $k1 26-27 Temporários para o sistema operacional $gp 28 Apontador global. $sp 29 Apontador de pilha. $fp 30 Apontador de quadro. $ra 31 Endereço de retorno.

PROJETO DE UMA CPU SIMPLES INSTRUÇÕES: TIPOS E FORMATOS As instruções do programa assembly devem ser traduzidas em números binários para que a máquina as execute. Existem 3 tipos de instruções e formato (todos com 32 bits): Instruções de processamento: Lógicas e Aritméticas. Instruções de transferência de dados. Instruções de decisão e controle: Desvio de fluxo. Formato R Formato I Formato J

PROJETO DE UMA CPU SIMPLES INSTRUÇÕES: FORMATO R (REGISTRADOR) OP é sempre zero para o formato R. RS é o registrador do primeiro operando de origem. RT é o registrador do segundo operando de origem. RD é o registrador que recebe o resultado da operação. SHAMT é a quantidade de deslocamento (shift amount). FUNCT especifica qual a operação a ser executada.

PROJETO DE UMA CPU SIMPLES INSTRUÇÕES: FORMATO I (IMEDIATO) OP especifica qual operação a ser executada. RS é o registrador do operando de origem. RT é o registrador que recebe o resultado da operação. IMM é o endereço de memória ou constante numérica.

PROJETO DE UMA CPU SIMPLES INSTRUÇÕES: FORMATO J (JUMP) OP especifica qual operação a ser executada. ADDR é o local da memória (endereço) a saltar, onde estão as próximas instruções a serem executadas.

PROJETO DE UMA CPU SIMPLES REPERTÓRIO INSTRUÇÕES Instruções de processamento: Lógicas e aritméticas Instruções Descrição ADD RD RS RT RD <- RS + RT ADDI RT RS IMM RT <- RS + IMM SUB RD RS RT RD <- RS RT AND RD RS RT RD <- RS AND RT OR RD RS RT RD <- RS OR RT ORI RT RS IMM RT <- RS OR IMM XOR RD RS RT RD <- RS XOR RT SLL * RD RT SHAMT RT <- RT << SHAMT LUI RT IMM RT <- IMM << 16 * SLL de i bits é multiplicar por 2 i.

PROJETO DE UMA CPU SIMPLES REPERTÓRIO INSTRUÇÕES Instruções de transferência de dados Instruções LW RT OFFSET(RS) SW RT OFFSET(RS) Descrição RT <- memória[offset + RS] memória[offset +RS] <- RT OFFSET é em bytes

PROJETO DE UMA CPU SIMPLES REPERTÓRIO INSTRUÇÕES Instruções de decisão e controle: Desvio de fluxo Alteram o fluxo de controle do programa. Alteram a próxima instrução a ser executada. Instruções para salto condicional Branch on equal (BEQ). Branch on not equal (BNE). Set on less than (SLT). Set on less than immediate (SLTI). Instruções para salto incondicional Jump (J).

PROJETO DE UMA CPU SIMPLES REPERTÓRIO INSTRUÇÕES Instruções de decisão e controle: Desvio de fluxo Instruções Descrição BEQ RS RT OFFSET Desvia se RS igual RT BNE RS RT OFFSET Desvia se RS diferente de RT SLT RD RS RT RD <- (RS < RT)? 1 : 0 SLTI RT RS IMM RT <- (RS < IMM)? 1 : 0 J OFFSET Desvio para OFFSET.

COMO ESCREVER UM PROGRAMA PARA ESSA CPU SIMPLES?

LINGUAGEM DE MONTAGEM ASSEMBLY Sintaxe de instruções em assembly Label: Opcional, identifica o bloco do programa. Op-code: Instrução, identificado por um Mnemônico. Operandos: Registradores ou memória. Comentários: Opcional, tudo que vem depois de #.

LINGUAGEM DE MONTAGEM ASSEMBLY Adição As variáveis a, b e c estão armazenadas, respectivamente, nos registradores $s0, $s1 e $s2. Linguagem de Alto Nível a = b + c; a = a + 4; b = a 12; Linguagem de Montagem add $s0 $s1 $s2 addi $s0 $s0 4 addi $s1 $s0-12

LINGUAGEM DE MONTAGEM ASSEMBLY Subtração As variáveis a, b e c estão armazenadas, respectivamente, nos registradores $s0, $s1 e $s2. Linguagem de Alto Nível Linguagem de Montagem a = b - c; sub $s0 $s1 $s2

LINGUAGEM DE MONTAGEM ASSEMBLY Operações Aritméticas Complexas As variáveis a, b, c e d estão armazenadas, respectivamente, nos registradores $s0, $s1, $s2 e $s3 Linguagem de Alto Nível a = b + c - d; Linguagem de Montagem sub $t0 $s2 $s3 # t0 = c d add $s0 $s1 $t0 # a = b + t0

LINGUAGEM DE MONTAGEM ASSEMBLY Tomada de decisão As variáveis f, g, h, i e j estão armazenadas, respectivamente, nos registradores $s0, $s1, $s2, $s3 e $s4 if (i == j) f = g + h; f = f i; Linguagem de Alto Nível Linguagem de Montagem 0x00002000 bne $s3 $s4 0x00002008 0x00002004 add $s0 $s1 $s2 0x00002008 sub $s0 $s0 $s3

LINGUAGEM DE MONTAGEM ASSEMBLY Tomada de decisão As variáveis f, g, h, i e j estão armazenadas, respectivamente, nos registradores $s0, $s1, $s2, $s3 e $s4 if (i == j) f = g + h; else f = f i; Linguagem de Alto Nível Linguagem de Montagem 0x00002000 bne $s3 $s4 0x0000200C 0x00002004 add $s0 $s1 $s2 0x00002008 j 0x00002010 0x0000200C sub $s0 $s0 $s3 0x00002010...

LINGUAGEM DE MONTAGEM ASSEMBLY Tomada de decisão As variáveis amount e fee estão armazenadas, respectivamente, nos registradores $s0, e $s1 Linguagem de Alto Nível Linguagem de Montagem if (amount == 20) fee = 2; else if (amount == 50) fee = 3; else if (amount == 100) fee = 5; else fee = 0; 0x00002000 addi $t0 $zero 20 0x00002004 bne $s0 $t0 0x00002010 0x00002008 add $s1 $zero 2 0x0000200C j 0x00002034 0x00002010 addi $t0 $zero 50 0x00002014 bne $s0 $t0 0x00002020 0x00002018 add $s1 $zero 3 0x0000201C j 0x00002034 0x00002020 addi $t0 $zero 100 0x00002024 bne $s0 100 0x00002030 0x00002028 add $s1 $zero 5 0x0000202C j 0x00002034 0x00002030 add $s1 $zero $zero 0x00002034..

LINGUAGEM DE MONTAGEM ASSEMBLY Tomada de decisão As variáveis amount e fee estão armazenadas, respectivamente, nos registradores $s0, e $s1 Linguagem de Alto Nível switch (amount) { case 20: fee = 2; break; case 50: fee = 3; break; case 100: fee = 5; break; default: fee = 0; } Linguagem de Montagem 0x00002000 addi $t0 $zero 20 # case 20 0x00002004 bne $s0 $t0 0x00002010 0x00002008 addi $s1 $zero 2 # 0x0000200C j 0x00002034 0x00002010 addi $t0 $zero 50 #case 50 0x00002014 bne $s0 $t0 0x00002020 0x00002018 addi $s1 $zero 3 # 0x0000201C j 0x00002034 0x00002020 addi $t0 $zero 100 #case 100 0x00002024 bne $s0 $t0 0x00002030 0x00002028 addi $s1 $zero 5 # 0x0000202C j 0x00002034 0x00002030 add $s1 $zero $zero # 0x00002034...

LINGUAGEM DE MONTAGEM ASSEMBLY Repetição As variáveis pow e x estão armazenadas, respectivamente, nos registradores $s0 e $s1 int pow = 1; int x = 0; Linguagem de Alto Nível while (pow!= 128) { pow = pow * 2; x = x + 1; } Linguagem de Montagem 0x00002000 addi $s0 $zero 1 #pow=1 0x00002004 addi $s1 $zero 0 #x=0 0x00002008 addi $t0 $zero 128 0x0000200C beq $s0 $to 0x0000201C 0x00002010 sll $s0 $s0 1 #pow=pow*2 0x00002014 addi $s1 $s1 1 #x=x+1 0x00002018 j 0x0000200C 0x0000201C...

LINGUAGEM DE MONTAGEM ASSEMBLY Repetição As variáveis i e sum estão armazenadas, respectivamente, nos registradores $s0 e $s1 Linguagem de Alto Nível int sum = 0; for (i = 0; i!= 10; i = i + 1) { sum = sum + i; } Linguagem de Montagem 0x00002000 add $s1 $zero $zero 0x00002004 addi $s0 $zero 0 0x00002008 addi $t0 $zero 10 0x0000200C beq $s0 $to 0x0000201C 0x00002010 add $s1 #s1 #s0 0x00002014 addi $s0 $s0 1 0x00002018 j 0x0000200C 0x0000201C...

LINGUAGEM DE MONTAGEM ASSEMBLY Array O endereço base do array é armazenado no registrador $s0. Linguagem de Alto Nível int array[5]; array[0] = array[0] * 8; array[1] = array[1] * 8; Linguagem de Montagem 0x00002000 lui $s0 0x1000 0x00002004 ori $s0 $s0 0x7000 #s0=0x10007000 0x00002008 lw $t1 0($s0) #t1=array[0] 0x0000200C sll $t1 $t1 3 #t1=t1*8 0x00002010 sw $t1 0($s0) #array[0]=t1 0x00002014 lw $t1 4($s0) #t1=array[1] 0x00002018 sll $t1 $t1 3 #t1=t1*8 0x0000201C sw $t1 0($s0) #array[0]=t1

LINGUAGEM DE MONTAGEM ASSEMBLY Array O endereço base do array é armazenado em $s0 e a variável i em $s1. Linguagem de Alto Nível int i; int array[5]; for(i = 0; i < 1000; i = i + 1) array[i] = array[i] * 8; Linguagem de Montagem 0x00002000 lui $s0 0x23B8 0x00002004 ori $s0 $s0 0xF000 #s0=0x23b8f000 0x00002008 addi $s1 $zero 0 #i=0 0x0000200C addi $t2 $zero 1000 #t2=1000 0x00002010 slt $t0 $s1 $t2 #i<1000 0x00002014 beq $t0 $zero 0x0002034 0x00002018 sll $t0 $s1 2 #t0=i*4 (offset) 0x0000201C add $t0 $t0 $s0 #endereço do array[i] 0x00002020 lw $t1 0($t0) #t1=array[i] 0x00002024 sll $t1 $t1 3 #t1=array[i]*8 0x00002028 sw $t1 0($t0) #array[i]=array[i]*8 0x0000202C addi $s1 $s1 1 #i=i+1 0x00002030 j 0x0002010 0x00002034...

COMO AS INSTRUÇÕES SÃO REPRESENTADA NA CPU?

REPRESENTAÇÃO DAS INSTRUÇÕES DO FORMATO REGISTRADOR (R) Assembly Opcode RS RT RD Shamt Funct Linguagem de Máquina add $s0 $s1 $s2 0x0 17 18 16 0x0 0x20 0000 0010 0011 0010 1000 0000 0010 0000 (0x02328020) sub $s0 $s1 $s2 0x0 17 18 16 0x0 0x22 0000 0010 0011 0010 1000 0000 0010 0010 (0x02328022) and $s3 $s1 $s2 0x0 19 18 16 0x0 0x24 0000 0010 0111 0010 1000 0000 0010 0100 (0x02728024) or $t0 $t1 $t2 0x0 9 10 8 0x0 0x15 0000 0001 0010 1010 0100 0000 0010 0101 (0x012A4025) xor $t0 $t1 $t2 0x0 9 10 8 0x0 0x26 0000 0001 0010 1010 0100 0000 0010 0110 (0x012A4026) sll $s0 $s0 1 0x0 0 16 16 0x1 0x0 0000 0000 0001 0000 1000 0000 0100 0000 (0x00108040) slt $t0 $s1 $t2 0x0 17 10 8 0x0 0x2A 0000 0010 0010 1010 0100 0000 0010 1010 (0x022A402A)

REPRESENTAÇÃO DAS INSTRUÇÕES DO FORMATO IMEDIATO (I) Assembly Opcode RS RT IMM Linguagem de Máquina addi $t0 $zero 1000 0x8 0 8 0x03E8 0010 0000 00001000 1000 0000 0010 0000 (0x20088020) ori $s0 $s0 0xF000 0xD 16 16 0xF000 0011 0110 0001 0000 1000 0000 0010 0010 (0x36108022) lui $s0 0x23B8 0xF 0 16 ox23b8 0011 1100 0001 0000 1000 0000 0010 0100 (0x3C108024) slti $t0 $t1 1000 0xA 9 8 ox03e8 0010 1001 0010 1000 0100 0000 0010 0101 (0x29284025)

REPRESENTAÇÃO DAS INSTRUÇÕES DO FORMATO JUMP (J) Assembly Opcode IMM Linguagem de Máquina j 0x200C 0x2 0x200C 0000 1000 0000 0000 0010 0000 0000 1100 (0x0800200C)