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



Documentos relacionados
Aula 7 Sumário. O conjunto de instruções. Conjunto de instruções. Conjunto de instruções. Instruções típicas. Instruções típicas

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

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

Aula 14: Instruções e Seus Tipos

Conjunto de Instruções e Arquitectura p.1

Arquitetura de Computadores. Linguagem de Máquina

Organização e Arquitetura de Computadores I

2 Formalidades referentes ao trabalho

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

Introdução à Arquitetura de Computadores

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

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

Arquitetura de Computadores

O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema.

Unidade 10: A Unidade Lógica Aritmética e as Instruções em Linguagem de Máquina Prof. Daniel Caetano

Organização de Computadores 1

Programação ao nível da máquina. Operações lógicas e aritméticas

Operadores lógicos (bit a bit)

Arquitectura de Computadores RECUPERAÇÃO DO 1º TESTE

CISC - Complex Instruction Set Computer

Computadores de Programação (MAB353)

ULA Sinais de Controle enviados pela UC

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

Linguagem de Montagem Funcionamento de CPU e Assembly Rudimentar

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

Organização e Arquitetura de Computadores I

ULA- Unidade Lógica Aritmética. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h

MICROPROCESSADORES. Arquitectura do Conjunto de Instruções. Nuno Cavaco Gomes Horta. Universidade Técnica de Lisboa / Instituto Superior Técnico

Laboratório de Sistemas Processadores e Periféricos Lista de comandos de Assembly

Arquitectura de Computadores

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

ARQUITETURA DE COMPUTADORES

O Nível ISA. Modelo de programação Arquitecturas CISC e RISC Introdução ao IA-32 da Intel

MODOS DE ENDEREÇAMENTO

Organização e Arquitetura de Computadores I

O modelo do computador

RISC simples. Aula de Março de

AJProença, Sistemas de Computação, UMinho, 2017/18 1. Componentes (físicos) a analisar: a unidade de processamento / o processador:

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

ARQUITECTURA DE COMPUTADORES CAPÍTULO II AULA X

3º Trabalho de Laboratório. Unidade de Controlo Microprogramada

Funcionamento básico de um computador

Primeiro nível desenvolvido, historicamente Atualmente existente entre o nível da microarquitetura e do sistema operacional

Organização e Arquitetura de Computadores I

Conjunto de Instruções (ISA) I

Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01

ARQUITECTURA DE COMPUTADORES

Introdução. INF1005 Programação I 33K Prof. Gustavo Moreira gmoreira@inf.puc-rio.br

A FÓRMULA DE CONVERSÃO ENTRE AS UNIDADES É: F = 1.8 C

Arquitectura de Computadores II. Máquinas Virtuais

Memória. Espaço de endereçamento de um programa Endereços reais e virtuais Recolocação dinâmica Segmentação

ArchC. Wesley Nunes Gonçalves

MICROPROCESSADORES Nuno Cavaco Gomes Horta Universidade Técnica de Lisboa / Instituto Superior Técnico

Programando o computador IAS

Nível da Microarquitetura

Arquitectura de Computadores

Figura 1 - O computador

Arquitetura e Organização de Computadores

Capítulo 3 Processadores de Propósito Geral: Software

Arquitetura de Computadores. Prof. João Bosco Jr.


3. O NIVEL DA LINGUAGEM DE MONTAGEM

Representação de Dados

Arquitetura de Um Processador I

BARRAMENTO DO SISTEMA

Arquitetura de Computadores. Tipos de Instruções

4-1. Parte2: A Arquitetura do Conjunto de Instruções

Organização e Arquitetura de Computadores I. de Computadores

Arquitetura do conjunto de instruções (ISA); características de instruções de máquina; tipos de operandos

O estudo da arquitectura de computadores efectua-se com recurso à Abstracção

Arquitetura de Computadores RISC x CISC. Gustavo Pinto Vilar

1. SINTAXE DA LINGUAGEM ASSEMBLY

Arquitetura e Organização de Computadores

Máquina Multinível. Um programa pode ser definido como uma seqüência de instruções que descrevem como executar uma determinada tarefa.

TE11008 Arquitetura e Organização de Computadores Nível da Linguagem de Montagem p. 1

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

SIS17 - Arquitetura de Computadores

Evolução dos Processadores

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis

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

Primeiros "computadores" digitais. Execução de um programa. Consolas. Primórdios dos computadores. Memória interna. Computadores com memória interna

ARQUITETURA DE COMPUTADORES

Capítulo 8. Software de Sistema

Processadores Características (Introdução)

Arquitetura de Computadores - Princípio de Funcionamento da CPU. Por Helcio Wagner da Silva

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Sistemas Computacionais II Professor Frederico Sauer

Organização e Arquitetura de Computadores. Hugo Barros @hugobarros.com.br

Computadores de Programação (MAB353)

Arquitetura de Computadores

O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware

Organização e Arquitetura de Computadores I. de Computadores

Organização e Arquitetura de Computadores. Aula 10 Ponto Flutuante Parte I Juliana F. Camapum Wanderley

Introdução à Organização e Arquitetura de Computadores. Prof. Leonardo Barreto Campos 1

Introdução. A Informação e sua Representação (Parte III) Universidade Federal de Campina Grande Departamento de Sistemas e Computação

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

Organização de Computadores Hardware

Introdução à Arquitetura de Computadores. Renan Manola Introdução ao Computador 2010/01

Transcrição:

Conjunto de instruções O Conjunto de Instruções ISA Instruction Set Architecture Alguns conceitos... Linguagem máquina Combinação de 0 s e 1 s organizados segundo palavras que são as instruções que o processador percebe Linguagem assembly Linguagem que permite uma correspondência directa ao código máquina, e que para todos os efeitos é mais fácil de programar do que escrever directamente os 0 s e 1 s Arquitectura Hardware (circuitos) Organização (datapath, unidade de controlo) Conjunto de instruções ou ISA Instruction Set Architecture 1 2 Conjunto de instruções Até agora, lidámos com o conjunto de instruções do processador MAC-1 Transferências de dados É preciso ter em conta que CPUs diferentes têm arquitecturas diferentes e conjuntos de instruções diferentes Por exemplo, o conjunto de instruções de um processador Intel Core 2 Duo é diferente do conjunto de instruções de um processador ARM (usado em telemóveis) Load Store Transferir (mover) Push Pop Trocar LD, LW ST, LW MOV PUSH POP XCH, SWAP Mas apesar de os conjuntos de instruções serem diferentes, os tipos de instruções disponíveis em cada conjunto são idênticos Tipicamente, quando são utilizadas instruções do tipo Load / Store, a instrução MOV apenas permite transferências entre registos (ou então não existe). 3 4 Aritméticas Lógicas Incrementar Decrementar Somar Subtrair Multiplicar Dividir Simétrico INC DEC ADD SUB MUL DIV NEG Geralmente existem instruções distintas para inteiros e reais (vírgula flutuante) Exemplo: IADD (inteiros) FADD (vírgula flutuante) Atenção a NEG, cuja finalidade costuma ser calcular o simétrico (complemento para 2) e não a negação... Clear Set Negação AND OR XOR CLR SET NOT AND OR XOR CLR colocar um registo a 0 SET colocar um registo a 1 Existem tipicamente outros tipos de CLRs e SETs que visam colocar a 0 ou a 1 apenas um bit do estado (flag) da unidade funcional 5 6 1

Controlo de programa Procedimentos Jump Jump if equal Jump if not equal Jump if zero JMP JE JNE JZ Muitos processadores utilizam a designação branch em vez de jump. Na maioria das vezes as designações são sinónimas. Chamar procedimento CALL Retornar RETN CALL / RETN o endereço de retorno é colocado / lido da pilha. Jump if not zero Jump if above etc... JNZ JA Noutros podem existir diferenças: por exemplo, jump poderia ser um salto para um endereço absoluto e branch um salto para um endereço relativo. Jump and link JAL Jump register JR JAL / JR o endereço de retorno é colocado / lido de num registo. 7 8 As instruções encontram-se organizadas segundo campos com significado específico: Código de operação (opcode) Indica qual é o tipo ou finalidade da instrução Operandos Origem e destino dos dados (endereços ou registos) Valores constantes que vão na própria instrução Modo de endereçamento Indica o modo como devem ser interpretados os operandos Muitas vezes está incluído no próprio opcode e não num campo em separado Exemplos de algumas instruções já conhecidas LODD x LOCO c INSP y 9 10 É habitual classificar os formatos de instrução de acordo com o número de operandos 1, 2, ou 3 operandos ou mesmo sem operandos (muito usadas em arquitecturas baseadas em stack) Exemplo: Considere que se pretende calcular: M[x] (M[a] + M[b]) (M[c] - M[d]) com 3 operandos... Pode-se especificar um destino e duas fontes ADD R1, a, b SUB R2, c, d MUL x, R1, R2 # R1 M[a] + M[b] # R2 M[c]+ M[d] # M[x] R1 R2 Nota: Assumiu-se que as fontes / destino dos dados podem ser endereços ou registos. Como veremos mais à frente, não é uma assunção muito realista, uma vez que obriga a instruções com comprimento demasiado longo. 11 12 2

com 2 operandos... Especifica-se uma fonte e um destino MOV R1, a ADD R1, b MOV R2, c SUB R2, d MUL R1, R2 MOV x, R2 # R1 M[a] # R1 R1 + M[b] # R2 M[c] # R2 R2 M[d] # R1 R1 R2 # M[x] = R2 Nota: assumiu-se que o registo destino acumula resultados, pelo que serve de fonte, de uma forma implícita com 1 operando... Vão sendo guardados os resultados num registo acumulador Especifica-se apenas uma fonte ou um destino LOAD a ADD b STORE x LOAD c SUB d MUL x STORE x # AC M[a] # AC AC + M[b] # M[x] AC # AC M[c] # AC AC + M[d] # AC AC M[x] # M[x] AC 13 14 sem operandos... Todas as operações são feitas com recurso à pilha As instruções fazem implicitamente pop dos operandos e push dos resultados PUSH a # TOS M[A] PUSH b # TOS M[B] ADD # TOS TOS -1 + TOS PUSH c # TOS M[C] PUSH d # TOS M[D] SUB # TOS TOS -1 TOS MUL # TOS TOS -1 TOS TOS Topo da Pilha (Top of Stack) POP x # M[X] TOS TOS -1 2º valor na pilha (a contar do topo) Curiosidade Para facilitar a implementação de código sem operandos, pode-se utilizar a notação RPN (Reverse Polish Notation) Exemplo: a expressão (A+B) (C-D) é equivalente à seguinte, em RPN: A B + C D - A ordem pela qual aparecem os operandos e as operações em RPN é a mesma que se segue num programa idêntico ao anterior 15 16 Como maximizar o número de instruções do conjunto? Expansão do opcode Aproveita-se o facto de nem todas as instruções terem o mesmo número de operandos Para se expandir o opcode, usa-se o espaço deixado por campos que não são utilizados Resulta assim um opcode com mais bits, possibilitando um maior número de instruções Instruções de comprimento variável A ideia é ter instruções cujo comprimento varia consoante as necessidades (exemplo: dentro do mesmo conjunto, ter instruções de 16, 32 e 64 bits) Exemplo de expansão do opcode Vamos supor que se pretende projectar um conjunto de instruções com os seguintes formatos: Formato I Formato II Quantas Instruções serão possíveis para cada um dos formatos? 17 18 3

Exemplo de expansão do opcode (cont.) Se fossem todas do formato I teríamos 2 4 = 16 instruções diferentes Aproveitando o espaço de 2 bits disponíveis no formato II para expansão do opcode, existem outras possibilidades: 15 de formato I + 4 do formato II 14 de formato I + 8 do formato II 13 de formato I + 12 do formato II De uma forma geral teríamos, neste caso: 2 4 k instruções do formato I + k 2 2 instruções do formato II Repare que os expoentes 4 e 2 correspondem ao número de bits do opcode e da expansão, respectivamente Algumas considerações Em geral, se um conjunto de instruções permite mais operandos, menor será o número de instruções num programa No entanto, maior será o comprimento das instruções, de forma a incluir todos os operandos necessários Quanto menor for o comprimento das instruções, Maior rapidez a efectuar o fetch (pois podem ser lidas mais instruções de uma só vez) Haverá mais instruções, mas na prática irão ocupar menos espaço, pois são mais pequenas Mais difícil será a possibilidade de futuras expansões ao conjunto de instruções (factor importante do ponto de vista comercial) O normal é tentar que chegar a uma solução de compromisso 19 20 Alguns exemplos reais Intel (x86) max. 2 operandos PowerPC (Wii, Xbox 360) max. 3 operandos Cell (Playstation 3) max. 4 operandos (maioria 3) TMS (Processador de sinal) max. 3 operandos ARM max. 3 operandos (maioria 2)...e virtuais Java Virtual Machine a maioria sem operandos MAC-1 max. 1 operando MIPS max. 3 operandos Implícito Com base no opcode, o processador fica a saber implicitamente onde estão os dados envolvidos na operação Imediato Exemplo: instruções PUSH e POP Constante que é dada na própria instrução Directo Exemplos: R1 constante, instrução LOCO do MAC-1 Indica a posição de memória onde estão os valores envolvidos na operação Exemplos: R1 M[x], instruções LODD e ADDD do MAC-1 21 22 Registo directo Indica o registo onde se encontram os dados Exemplo: R1 R2 Eficiente, pois não são feitos acessos à memória Registo indirecto Especifica-se um registo e o valor guardado nesse registo é posição de memória onde estão os dados Exemplos: R1 M[R2], instruções PSHI e POPI do MAC-1 Indirecto Útil para indexar vectores Especifica-se uma posição de memória - o conteúdo dessa posição de memória dá uma outra posição onde estão localizados os dados São necessários dois acessos à memória Exemplo: R1 M[ M[x] ] Útil para aceder a listas e a matrizes bidimensionais Duplamente indirecto Semelhante ao anterior, mas a primeira posição a aceder é dada por um registo Indexado Exemplo: R1 M[ M[R2] ] Acede-se à posição de memória dada pela soma do conteúdo de um registo com um deslocamento (offset) indicado na instrução Exemplos: R1 M[R2 + offset], instruções LODL, ADDL do MAC-1 Útil para indexar vectores e gerir variáveis locais Existem outras designações para este modo: Endereçamento Local ou Baseado quando é relativo ao Stack Pointer Endereçamento Relativo quando é relativo ao Program Counter 23 24 4

Possível notação para indicar os modos de endereçamento Modo Imediato Directo Indirecto Registo-directo Registo-indirecto Indexado Duplamente indirecto Notação MOV R1, #N MOV R1, addr MOV R1, [addr] MOV R2, R1 MOV R2, [R1] MOV R2, addr[r1] MOV R2, [[R1]] Efeito R1 N R1 M[addr] R1 M[M[addr]] R2 R1 R2 M[R1] R2 M[addr+R1] R2 M[M[R1]] Exemplo Qual será o valor em R2 após MOV R2, #2 R2 = 2 MOV R2, 2 R2 = 6 MOV R2, R1 R2 = 5 MOV R2, [R1] R2 = 3 MOV R2, 2[R1] R2 = 11 MOV R2, [2] R2 = 45 Memória 25 26 5