1. Macroarquitetura 2. Emulador do MIC-1 3. O Nível ISA: IJVM. Bibliografia. Teresina Pilhas 3.2. Conjunto de Instruções IJVM

Tamanho: px
Começar a partir da página:

Download "1. Macroarquitetura 2. Emulador do MIC-1 3. O Nível ISA: IJVM. Bibliografia. Teresina - 2011. 3.1. Pilhas 3.2. Conjunto de Instruções IJVM"

Transcrição

1 Universidade Federal do Piauí Centro de Tecnologia Departamento de Engenharia Elétrica Macroarquitetura - Linguagem de Máquina - Prof. Marcos Zurita zurita@ufpi.edu.br Teresina Macroarquitetura 2. Emulador do MIC-1 3. O Nível ISA: IJVM 3.1. Pilhas 3.2. Conjunto de Instruções IJVM Bibliografia 2

2 1. Macroarquitetura 3 Notação das Microinstruções do MIC-1 Conforme visto anteriormente, cada microinstrução do MIC-1 é composta de 36 bits organizados em 6 campos: NEXT_ADDRESS JAM ULA C Mem B 9 bits 3 bits 8 bits 9 bits 3 bits A descrição de todo o microprograma armazenado na memória de controle pode ser feita diretamente em binário ou hexadecimal. Entretanto, é conveniente definir uma linguagem simbólica que permita a abstração de detalhes desnecessários, mantendo, ao mesmo, a capacidade de controle da máquina ciclo-a-ciclo. 4 bits 4

3 A Linguagem MAL MAL (Micro Assembly Language) Linguagem de montagem de microinstruções; Características: Sintaxe intuitiva; Abstração do endereço da próxima microinstrução; Através de rótulos em caso de desvio; Através de inferência automática se não houver desvio. Permite que uma atribuição ou operação incida em mais de um registrador no mesmo ciclo; Inferência automática do valor dos campos não explicitados na linha da instrução (valor 0 inferido). 5 Cada instrução MAL pode conter os seguintes campos: Fuba1: H=MDR >> 1; fetch; goto(mbr) //isto é um comentário 1. Rótulo (Label); 2. Atribuição e eventual operação; 3. Deslocamento; 4. Operação de acesso à memória; 5. Desvio; 6. Comentário. Uma instrução pode não conter nenhum campo. Neste caso a máquina gastará um ciclo sem fazer nada. Com exceção do Rótulo e do Deslocamento, todos os demais campos devem ser separados por ;. 6

4 Comentários Podem ser inseridos através de //, colocando como comentário tudo que estiver à sua direita na linha. Rótulos (Labels) MAR = 0; // isto aqui é um comentário Quando utilizado, deve ser o primeiro campo a ser escrito e deve ser separado dos demais campos por :. Um Rótulo pode conter qualquer caractere alfanumérico, exceto espaços em branco. Inicio: OPC = PC-1; // esta linha tem como rótulo Inicio H = MDR; // esta linha não possui nenhum rótulo Eita 1: H = TOS; // este rótulo é inválido pois possui // um espaço em branco 7 Atribuição e Eventual Operação Pode envolver qualquer registrador como operando ou destino, observando-se as características do MIC-1: MBR não pode ser destino de operação ou atribuição; MAR não pode ser operando, apenas destino. REGISTRADOR DESTINO FONTE OU OPERANDO CPP X X H X X LV X X MAR X MBR X MBRU X MDR X X OPC X X PC X X SP X X TOS X X 8

5 A tabela abaixo lista todas as operações e atribuições possíveis pela MAL do MIC-1: N OPERAÇÃO EXEMPLO 1 DEST = H TOS = H; 2 DEST = FONTE OPC = PC; 3 DEST = H LV = not(h); 4 DEST = FONTE SP = not(mdr); 5 DEST = H + FONTE CPP = H + TOS; 6 DEST = H + FONTE +1 CPP = H + TOS + 1; 7 DEST = H + 1 LV = H + 1; 8 DEST = FONTE + 1 PC = PC + 1; 9 DEST = FONTE - H MDR = TOS - H; 10 DEST = FONTE - 1 PC = OPC - 1; 11 DEST = -H H = -H; 12 DEST = H AND FONTE OPC = H AND MBRU; 13 DEST = H OR FONTE SP = H OR TOS; 14 DEST = 0 PC = 0; 15 DEST = 1 H = 1; 16 DEST = -1 MDR = -1; 9 Deve-se notar também que o Destino especificado na tabela anterior pode conter mais de um registrador. Ex.: H=OPC=TOS=CPP=LV=SP=PC = MDR + H + 1; A linguagem adotada suporta ainda a comutatividade de operandos nas operações de soma e lógica binária. Ex.: MDR = SP + H; // equivale a MDR = H + SP CPP = TOS + H + 1; // equivale a CPP = H + TOS + 1 LV = 1 + H; // equivale a LV = H + 1 H = MBR OR H; // equivale a H = H OR MBR TOS = MDR AND H; // equivale a TOS = H AND MDR Em todos os exemplos acima, a microinstrução gerada será a mesma do código equivalente, pois no MIC-1 o registrador H é sempre o operador esquerdo da ULA. 10

6 Por outro lado, algumas operações simples são ilegais nesta linguagem, devido à limitações impostas pela microarquitetura do MIC-1. Ex.: MDR = SP + MDR; // operação ilegal, pois exige a leitura // dos registradores SP e MDR via // barramento B no mesmo ciclo H = H MDR; // operação ilegal, pois a única fonte // possível para o subtraendo (valor a ser // subtraído) deve estar no registrador H Solução aos exemplos: H = SP; // copia o valor de SP para MDR MDR = H + MDR; // efetua a soma de MDR com a cópia de SP H = MDR - H; // efetua a subtração inversa H = -H; // desinverte o sinal gerando H = H - MDR 11 Deslocamento Quando empregados, devem vir após uma atribuição ou operação, sem o separador ;. Dois tipos de deslocamento são possíveis: Deslocamento de 8 bits à esquerda (<< 8); Deslocamento de 1 bit à direita (>> 1). Os deslocamentos possíveis estão listados na tabela abaixo. N DESLOCAMENTO EXEMPLO 1 DEST = OPERAÇÃO << 8; H = 1 << 8; 2 DEST = OPERAÇÃO >> 1; TOS = MBR + 1 >> 1; Deve-se salientar que por Operação entende-se qualquer uma das listadas na tabela do slide 9. 12

7 Desvio Três operações de desvio são possíveis: Desvio incondicional; Desvio condicional; Desvio multidirecional. Desvio Incondicional pode ser feito através da notação goto Rótulo. Por exemplo: Main1: PC = PC+1; // linha de rótulo Main1 H = MBR; // linha sem rótulo TOS = 0; goto Main1 // zera TOS e vai para Main1 13 Desvio Condicional - pode ser feito através da notação: if(x) goto L1; else goto L2 Onde X pode ser o registrador Z ou N, L1 e L2 dois labels pertencentes as 256 primeiras linhas de instrução. Por exemplo: H = 1 << 8; // faz H = 256 Denovo: H = H-1; if(z) goto Zerou; else goto Denovo Zerou: MDR = MDR+1; Como um desvio condicional baseia-se no valor de N ou Z, a linguagem exige que ela seja utilizada juntamente com uma atribuição ou operação. R1: if(n) goto R1; else goto R2 // este desvio é ilegal // pois não está associado a uma operação R2: H=H+1; // ou atribuição, como há nesta linha 14

8 Eventualmente, pode-se desejar testar um determinado registrador, sem se alterar seu conteúdo. Uma alternativa para isto seria fazê-lo passar pela ULA e armazena-lo de volta (auto-atribuição). Ex.: R1: MDR = MDR; if(z) goto R2; else goto R1 // testa MDR R2: TOS = TOS-1; Entretanto, para tornar isto mais visível, a MAL é capaz de aceitar atribuições diretas a N ou Z, gerando implicitamente uma auto-atribuição do registrador. R1: Z = MDR; if(z) goto R2; else goto R1 // testa MDR R2: TOS = TOS-1; A microinstrução gerada neste caso é exatamente igual a do exemplo anterior. 15 Desvio Multidirecional - é desvio cujo destino depende do conteúdo do registrador MBR. Pode ser feito através da notação: goto (MBR or valor_de_9_bits) Se o valor_de_9_bits for nulo, basta escrever: goto (MBR) bola7: PC = PC+1; // linha de rótulo bola7 H = MBR; // copia o opcode para H TOS = 0; goto(mbr) // zera TOS e executa o opcode Este é o tipo de desvio utilizado para se executar instruções cujo opcode foi buscado na memória. 16

9 Operação de Acesso à Memória Três operações de acesso à memória são possíveis: Leitura de um dado de 32 bits via MAR/MDR (rd); MAR = SP-1; rd // ajusta MAR e ordena leitura Escrita de um dado de 32 bits via MAR/MDR (wr); TOS = TOS+1; wr // ajusta TOS e ordena escrita Busca de um opcode de 8 bits via PC/MBR (fetch). PC = PC+1; fetch // ajusta PC e ordena busca A busca de um opcode pode ocorrer simultaneamente (mesmo ciclo) que uma leitura ou escrita na memória. PC = PC+1; fetch; wr // ajusta PC e ordena busca/escrita 17 Ao fazer uso de operações de acesso à memória, devese ter em mente a latência imposta por ela, isto é: 1. Operações de leitura e busca (rd/fetch) só atualizam seus respectivos registradores (MDR/MBR) no final do ciclo seguinte, ou seja: O resultado de uma leitura ou busca em memória só pode ser utilizado em atribuições ou operações 2 ciclos após ordenada a leitura ou busca. MAR = SP = SP-1; rd // ajusta MAR e SP e ordena leitura // aguarda a leitura do valor em MDR TOS = MDR; // copia o valor lido para TOS PC = PC+1; fetch; // ajusta PC e ordena busca/escrita LV = LV+1; // incrementa LV e aguarda a busca MDR = MBR; // copia o opcode lido para MDR 18

10 2. Outra consequência da observação feita em 1 é: MDR não pode ser modificado no ciclo seguinte a uma ordem de leitura pois a memória também irá escrever nele, gerando um conflito. MAR = SP; rd // ajusta MAR e ordena leitura MDR = H; // a memória também irá escrever em MDR neste // mesmo ciclo! O valor em MDR é indefinido. 3. Apesar da escrita do opcode buscado na memória só ocorrer no final do ciclo seguinte ao da ordem, o cálculo do novo MPC só será feito após essa escrita, ou seja: MBR pode ser utilizado em instruções de desvio no ciclo imediatamente seguinte ao da ordem de busca. PC = PC+1; fetch // ajusta PC e ordena busca goto(mbr) // o novo MBR já pode ser usado para desvio Operações de escrita (wr) só utilizam os registradores MAR e MDR no ciclo corrente, isto é: MAR e MDR podem ser modificados no ciclo seguinte a uma ordem de escrita sem penalidade na gravação do valor antigo na memória. MDR = H << 8; // ajusta MDR MAR = MBRU+H; wr // ajusta MAR e ordena escrita MDR = TOS; // altera MDR sem atrapalhar a escrita 20

11 2. Emulador do MIC-1 21 Emulador do MIC-1 emumic - desenvolvido por estudantes da UNICT (Università degli Studi di Catania), sob orientação do Prof. Franco Barbanera, na Itália. Características: Licença GPL; Feito em Java (roda na maior parte dos computadores); Emula completamente a microarquitetura do MIC-1; Capaz de executar as microinstruções subciclo-a-subciclo; Possui um micromontador MAL integrado, permitindo a escrita das microinstruções na linguagem MAL; Disponível em: /SIMULATORS/emuMIC/index.html 22

12 23 3. O Nível ISA: IJVM 24

13 Pilhas O Modelo de Memória do IJVM Conjunto de Instruções IJVM Compilação JAVA Pilhas 26

14 Pilhas Quase todas as linguagens de programação suportam o conceito de sub-rotinas, que por sua vez possuem suas próprias variáveis, as chamadas variáveis locais. Variáveis locais Variáveis visíveis apenas pela sub-rotina que as criou. São criadas no momento que sub-rotina é chamada e destruídas ao seu término, liberando a memória por elas ocupada. Variáveis globais São variáveis visíveis em todo o programa. Criadas na execução do programa e destruídas no seu encerramento. 27 Ex.: Variáveis globais e locais em C #include <stdio.h> #include "interface.h" // biblioteca externa int t_ref = 273; // variável global void print_temp() // sub-rotina { int t_kelvin; // variável local t_kelvin = leporta1() + t_ref; // t_ref é visível aqui printf("temperatura = %i Kelvin", t_kelvin); void main() // rotina principal { int j=0; // variável local while (1) { // laço infinito if (j==100) { print_temp(); j=0; else { j++ 28

15 Reservar um espaço na memória para variáveis globais não constitui, a princípio, um problema: Pode-se fazê-lo simplesmente fixando um endereço na memória para cada variável e referenciando-se tais endereços de qualquer ponto do programa para acessá-las Por outro lado, como proceder com as variáveis locais? A solução sugerida para variáveis globais não funciona pois uma sub-rotina pode chamar a si mesma (recursividade), o que sobrescreveria as varáveis da primeira execução. Ex.: void procura_obst(int v) { // sub-rotina int k; // variável local k = leporta2() + v; if (k > 127) { printf("obstáculo encontrado!"); else { procura_obst(k); // Recursão: a sub-rotina // chama a si mesma 29 A solução para a alocação de variáveis locais na memória é a adoção do conceito de pilha (stack). Pilha É uma área da memória reservada para o armazenamento de variáveis locais; Nela, variáveis são empilhadas, umas sobre as outras, de modo que o topo da SP pilha contém sempre as variáveis mais recentemente criadas; Sua implementação requer dois LV apontadores: 1 : Apontador para a base da pilha ( LV) 2 : Apontador para o topo da pilha ( SP) var_5 var_4 var_3 var_2 var_1 P I L H A 30

16 Neste conceito as variáveis locais não referenciadas por seu endereço absoluto na memória e sim por sua posição relativa à base da pilha (LV). Sempre que uma sub-rotina é chamada, o apontador da base da pilha (LV) é ajustado para apontar o endereço base das variáveis locais da sub-rotina corrente. Da mesma forma, o apontador de topo da pilha (SP) também deve ser ajustado para indicar o endereço absoluto da última variável local da sub-rotina corrente. No MIC-1, a quantidade de memória consumida pelas varáveis locais de uma sub-rotina pode ser calculada (após sua alocação) através da fórmula: Mem SUB 4SPLV 1 (Eq. 3.1) 31 Ex.: Alocação de variáveis locais em C void subd() { long d[5]; void subc() { long c1, c2; // instruções... void subb() { long b1, b2, b3, b4; subc(); // instruções... void suba() { long a1, a2, a3; subb(); subd(); void main() { suba(); 1. main1() é executada; 2. main1() chama a subrotina suba(); 32

17 Ex.: Alocação de variáveis locais em C void subd() { long d[5]; void subc() { long c1, c2; // instruções... void subb() { long b1, b2, b3, b4; subc(); // instruções... void suba() { long a1, a2, a3; subb(); subd(); void main() { suba(); 3. suba() cria as variáveis locais a1, a2 e a3; Admitindo que a pilha comece no endereço 100, e que cada variável ocupe 4 bytes, temos: LV = 100 (endereço absoluto); SP = 108 (endereço absoluto); a1 endereço relativo = 0; a2 endereço relativo = 4; a3 endereço relativo = 8. SP a3 108 a2 104 LV a1 100 Quadro de variáveis locais de suba() 33 Ex.: Alocação de variáveis locais em C void subd() { long d[5]; void subc() { long c1, c2; // instruções... void subb() { long b1, b2, b3, b4; subc(); // instruções... void suba() { long a1, a2, a3; subb(); subd(); void main() { suba(); 4. suba() chama subb(); 5. subb() cria as variáveis locais b1, b2, b3 e b4: LV = 112 (endereço absoluto); SP = 124 (endereço absoluto); b1 endereço relativo = 0; b4 endereço relativo = 12; SP b4 124 b3 120 b2 116 LV b1 112 SP a3 108 a2 104 LV a1 100 Quadro de variáveis locais de subb() 34

18 Ex.: Alocação de variáveis locais em C void subd() { long d[5]; void subc() { long c1, c2; // instruções... void subb() { long b1, b2, b3, b4; subc(); // instruções... void suba() { long a1, a2, a3; subb(); subd(); void main() { suba(); 6. subb() chama subc(); 7. subc() cria as variáveis locais c1 e c2: LV = 128; SP = 132. SP c2 132 LV c1 128 SP b4 124 b3 120 b2 116 LV b1 112 a3 108 a2 104 a Ex.: Alocação de variáveis locais em C void subd() { long d[5]; void subc() { long c1, c2; // instruções... void subb() { long b1, b2, b3, b4; subc(); // instruções... void suba() { long a1, a2, a3; subb(); subd(); void main() { suba(); 8. subc() termina, restaurando os valores anteriores de SP e LV, liberando a memória ocupada por c1 e c2: LV = 112; SP = 124. SP c2 132 LV c1 128 SP b4 124 b3 120 b2 116 LV b1 112 a3 108 a2 104 a

19 Ex.: Alocação de variáveis locais em C void subd() { long d[5]; void subc() { long c1, c2; // instruções... void subb() { long b1, b2, b3, b4; subc(); // instruções... void suba() { long a1, a2, a3; subb(); subd(); void main() { suba(); 9. subc() devolve a execução para subb(); 10. subb() termina, restaurando SP e LV, liberando a memória de b1, b2, b3 e b4: LV = 100; SP = 108. SP b4 124 b3 120 b2 116 LV b1 112 SP a3 108 a2 104 LV a Ex.: Alocação de variáveis locais em C void subd() { long d[5]; void subc() { long c1, c2; // instruções... void subb() { long b1, b2, b3, b4; subc(); // instruções... void suba() { long a1, a2, a3; subb(); subd(); void main() { suba(); 11. subb() devolve a execução para suba(); 12. suba() chama subd(); SP a3 108 a2 104 LV a

20 Ex.: Alocação de variáveis locais em C void subd() { long d[5]; void subc() { long c1, c2; // instruções... void subb() { long b1, b2, b3, b4; subc(); // instruções... void suba() { long a1, a2, a3; subb(); subd(); void main() { suba(); 13. subd() cria as variáveis locais d[0] à d[4]: LV = 112; SP = 128. As variáveis de subd() ocupam o mesmo espaço anteriormente ocupado pelas variáveis de subb() e parte das de subc(). SP d[4] 128 d[3] 124 d[2] 120 d[1] 116 LV d[0] 112 a3 108 a2 104 a Pilha de Operandos São regiões da pilha (ou mesmo pilhas dedicadas) voltadas ao armazenamento de operandos durante o cálculo de uma expressão aritmética Seu tamanho pode variar durante a operação. Ex.: Suponha que a sub-rotina suba(), antes de chamar subb(), precise calcular a1 = a2 + a3; Suponha que esta soma seja feita por uma instrução no nível ISA, chamada IADD que retira os dois últimos registros da pilha, soma-os e devolve o resultado para o topo da pilha. 40

21 A execução dessa linha de código (a1=a2+a3) pode ser resumida pelos seguintes passos: 1. O operando a2 é copiado para o topo da pilha; 2. O operando a3 é copiado para o topo da pilha; 3. A instrução IADD é chamada; 4. IADD retira os operandos da pilha e soma-os; 5. IADD coloca o resultado da soma no topo da pilha; 6. O resultado é movido para a1 e SP ajustado. IADD SP a2 112 a3 108 a2 104 LV a1 100 SP a3 116 a2 112 a3 108 a2 104 LV a1 100 SP a2+a3 112 a3 108 a2 104 LV a1 100 SP a3 108 a2 104 LV a2+a O Modelo de Memória do IJVM 42

22 Partes da Memória IJVM A Memória do IJVM é dividida em 4 partes: Área do Procedimento Quadro de Variáveis Locais Pilha de Operandos Pool de Constantes SP Pool de Constantes CPP Pilha 3 Operandos Correntes Quadro 3 Variáveis Locais Correntes Quadro 2 Variáveis Locais Quadro 1 Variáveis Locais LV Área do Procedimento (Método) PC 43 O Pool de Constantes Não pode ser escrita pelos programas IJVM; Contém constantes, strings e ponteiros para endereços de memória; O registrador CPP (Constant Pool Pointer) aponta para a primeira palavra do pool de constantes. O Quadro de Variáveis Locais No início guarda valores dos parâmetros (argumentos) do procedimento (método) chamado; O registrador LV (Local Vars) contém o endereço da primeira posição do quadro de variáveis locais. 44

23 A Pilha de Operandos Fica imediatamente acima do quadro de variáveis locais; Seu tamanho não pode ultrapassar um determinado limite pré-determinado pelo compilador JAVA; Registrador SP (Stack Pointer): Armazena o endereço do topo da pilha; Muda de valor durante a execução do procedimento. A Área do Procedimento Região de memória que armazena o programa; O registrador PC (Program Counter) aponta para o endereço da próxima instrução a ser buscada Conjunto de Instruções IJVM 46

24 O Conjunto de Instruções da IJVM Hexa Mnemônico Significado 0x10 BIPUSH byte Carregue um byte na pilha 0x59 DUP Copia a palavra do topo da pilha e passe-a para a pilha 0xA7 GOTO offset Desvio incondicional 0x60 IADD Retire duas palavras da pilha; carregue sua soma 0x7E IAND Retire duas palavras da pilha; carregue AND booleano 0x99 IFEQ offset Retire uma palavra da pilha e desvie se for zero 0x9B IFLT offset Retire uma palavra da pilha e desvie se for menor que zero 0x9F IF _ICMPEO offset Retire duas palavras da pilha e desvie se elas forem iguais 0x84 IINC varnum const Some uma constante a uma variável local 0x15 ILOAD varnum Coloque uma variável local no topo da pilha 0xB6 INVOKEVIRTUAL disp Chame uma sub-rotina (método) 0x80 IOR Retire duas palavras da pilha; carregue OR booleano 0xAC IRETURN Retorne da sub-rotina (método) com um valor inteiro 0x36 ISTORE varnum Retira a palavra da pilha e armazene-a numa variável local 0x64 ISUB Retire duas palavras da pilha; carregue sua diferença 0x13 LDC_W index Carregue constante do conjunto de constantes para a pilha 0x00 NOP Não faz nada 0x57 POP Retire a palavra do topo da pilha 0x5F SWAP Troca as duas palavras do topo da pilha uma pela outra 0xC4 WIDE Prefixo de instrução; a próxima instrução tem índice de 16 bits 47 Código de Máquina das Instruções IJVM As instruções IJVM implementadas no MIC-1 podem ocupar 8, 16, 24 ou 32 bits de espaço na memória. 8 bits OPCODE 8 bits 8 bits OPCODE ARG_1 8 bits 8 bits 8 bits OPCODE ARG_1 ARG_2 8 bits 8 bits 16 bits WIDE OPCODE ARGUMENTO 48

25 Instruções de 8 bits São instruções que não requerem argumentos ou que não possuem argumentos explícitos: DUP IADD ISUB IAND IOR IRETURN NOP POP SWAP WIDE* * Trata-se, na verdade, de um prefixo de instrução. 49 Instruções de 16 bits São instruções recebem um argumento explícito de 8 bits como parâmetro: BIPUSH IINC* ILOAD* ISTORE * Podem receber também argumentos de 16 bits, neste caso passam a ser instruções de 32 bits. 50

26 Instruções de 24 bits São instruções recebem um argumento explícito de 16 bits como parâmetro ou dois argumentos de 8 bits: GOTO IFEQ IFLT IF_ICMPEQ INVOKEVIRTUAL LDC_W 51 Instruções de 32 bits As instruções ILOAD e ISTORE, em suas versões de 16 bits, recebem como parâmetro variáveis locais cujo endereço relativo não ultrapassa 255, utilizando com isso apenas argumentos de 8 bits. Caso o endereço relativo da variável local seja superior a 255, é necessário um argumento de 16 bits como parâmetro. Naturalmente, a implementação das versões estendidas dessas instruções (com parâmetros de 16 bits) difere da implementação com parâmetros de 8 bits. Consequentemente, um novo microcódigo deverá ser criado para implementar as versões estendidas de ILOAD e ISTORE. 52

27 Isto pode ser obtido basicamente de 2 formas: 1. criando um novo opcode para cada versão estendida: limita o novo opcode a ocupar um dos espaços vazios entre as instruções nos primeiros 256 endereços da memória de controle; 2. criando uma instrução especial capaz de redirecionar o opcode seguinte para um endereço na parte alta da memória de controle, onde se encontra a implementação da versão estendida da instrução em questão. O mecanismo adotado pelo IJVM é a segunda solução. A instrução especial criada para esta finalidade é o prefixo WIDE, consumindo 8 bits. Os demais 24 bits ficam no opcode da instrução que se segue (8 bits) e no seu argumento (16 bits). 53 Implementação das Instruções IJVM em MAL Todas as instruções IJVM devem garantir em sua implementação a execução da instrução seguinte. Por essa razão, a instrução interna Main1 é chamada ao final da implementação de cada instrução IJVM: Main1 é responsável por 3 operações: Main1: PC=PC+1; fetch; goto(mbr) 1. Incremento do PC, fazendo com que ele aponte para o primeiro byte após o opcode que será executado; 2. Início da busca do próximo byte e armazenamento dele no MBR (que ocorrerá no final do ciclo seguinte); 3. Desvio para o endereço apontado pelo valor corrente de MBR, isto é, execução da instrução cujo opcode foi armazenado no MBR pela instrução chamadora de Main1. 54

28 A Instrução NOP NOP 0x00 Código IJVM: Não faz nada durante um ciclo. Esta instrução é propositalmente localizada no endereço 0x00, sendo portanto a primeira instrução a ser executada quando a máquina MIC-1 é inicializada (MPC=0x000 no reset). Implementação em Microcódigo MAL 0x00 nop1: goto Main1 55 IADD IADD 0x60 Código IJVM: Retira duas palavras do topo da pilha de operandos, soma as duas e coloca o resultado no topo. Implementação em Microcódigo MAL 0x60 iadd1: MAR=SP=SP-1; rd iadd2: H=TOS iadd3: MDR=TOS=MDR+H; wr; goto Main1 56

29 ISUB ISUB 0x64 Código IJVM: Retira duas palavras do topo da pilha de operandos, subtrai as duas e coloca o resultado no topo. Implementação em Microcódigo MAL 0x64 isub1: MAR=SP=SP-1; rd isub2: H=TOS isub3: MDR=TOS=MDR-H; wr; goto Main1 57 BIPUSH Código IJVM: 0x10 valor Coloca o BYTE especificado como parâmetro no topo da pilha de operandos. Implementação em Microcódigo MAL 0x10 BIPUSH byte bipush1: SP=MAR=SP+1 bipush2: PC=PC+1; fetch bipush3: MDR=TOS=MBR; wr; goto Main1 58

30 ILOAD Código IJVM: 0x15 variável Copia o conteúdo da variável local especificada como parâmetro no topo da pilha de operandos. Implementação em Microcódigo MAL 0x15 ILOAD varnum iload1: H=LV; iload2: MAR=MBRU+H; rd iload3: MAR=SP=SP+1 iload4: PC=PC+1; fetch; wr iload5: TOS=MDR; goto Main1 59 ISTORE Código IJVM: 0x36 variável Retira a palavra que está no topo da pilha de operandos e a armazena na variável local especificada. Implementação em Microcódigo MAL 0x36 ISTORE varnum istore1: H=LV; istore2: MAR=MBRU+H istore3: MDR=TOS; wr istore4: SP=MAR=PC-1; rd istore5: PC=PC+1; fetch istore6: TOS=MDR; goto Main1 60

31 IINC IINC varnum const 0x84 variável constante Código IJVM: Soma um valor constante a uma variável local passada como parâmetro. Implementação em Microcódigo MAL 0x84 iinc1: H=LV; iinc2: MAR=MBRU+H; rd iinc3: PC=PC+1; fetch iinc4: H=MDR iinc5: PC=PC+1; fetch iinc6: MDR=MBR+H; wr; goto Main1 61 GOTO GOTO Código IJVM: 0xA7 offset[15..8] offset[7..0] Desvia incondicionalmente a execução do programa para o endereço relativo especificado. Implementação em Microcódigo MAL 0xA7 goto1: OPC=PC-1 goto2: PC=PC+1; fetch goto3: H=MBR << 8 goto4: H=MBRU OR H goto5: PC=OPC+H; fetch goto6: goto Main1 offset 62

32 IF_ICMPEQ IF_ICMPEQ Código IJVM: 0x9F offset[15..8] offset[7..0] Retira 2 palavras do topo da pilha, se elas forem iguais, desvia a execução para o endereço relativo especificado. Implementação em Microcódigo MAL 0x9F if_icmpeq1: MAR=SP=SP-1; rd if_icmpeq2: MAR=SP=SP-1 if_icmpeq3: H=MDR; rd if_icmpeq4: OPC=TOS if_icmpeq5: TOS=MDR if_icmpeq6: Z=OPC-H; if(z) goto T; else goto F T: OPC=OPC-1; fetch; goto goto2 F: PC=PC+1 F2: PC=PC+1; fetch F3: goto Main1 offset 63 WIDE WIDE 0xC4 Código IJVM: Não é propriamente uma instrução e sim um prefixo de instrução, indicando que a próxima instrução tem um parâmetro de 16 bits. O byte que se segue ao prefixo deve conter o opcode da instrução a ser executada na parte alta da memória de controle (parte cujo endereço é superior a 0x100), para isso o opcode será somado a 0x100 e executado. Implementação em Microcódigo MAL 0xC4 wide1: PC=PC+1; fetch; goto (MBR or 0x100) 64

33 WIDE_ILOAD ILOAD varnum 0xC4 0x15 variável[15..8] variável[7..0] Código IJVM: Versão estendida da instrução ILOAD, capaz de operar com variáveis cujo endereço relativo é superior a 255; Seu microcódigo encontra-se na parte alta da memória de controle (ADDR 0x100), sendo executado através do prefixo WIDE. Implementação em Microcódigo MAL 0x115 wide_iload1: PC=PC+1; fetch wide_iload2: H=MBRU << 8 wide_iload3: H=MBRU OR H wide_iload4: MAR=LV+H; rd; goto iload3 65 WIDE_ISTORE ISTORE Código IJVM: 0xC4 0x36 variável[15..8] variável[7..0] Versão estendida da instrução ISTORE, capaz de operar com variáveis cujo endereço relativo é superior a 255; Seu microcódigo encontra-se na parte alta da memória de controle (ADDR 0x100), sendo executado através do prefixo WIDE. Implementação em Microcódigo MAL 0x136 wide_istore1: PC=PC+1; fetch wide_istore2: H=MBRU << 8 wide_istore3: H=MBRU OR H wide_istore4: MAR=LV+H; goto istore3 varnum 66

34 3.4. Inicialização do MIC-1 67 Processo de Inicialização do MIC-1 Ciclo 0: A máquina é inicializada. Todos os registradores são zerados, inclusive o apontador de microprograma (MPC=0x000). 1 ciclo : Como a instrução NOP está estrategicamente localizada no endereço 0x000 da memória de controle, será ela a primeira instrução a ser executada, desviando a execução para Main1. 2 ciclo : Main1 incrementa PC e inicia a busca da instrução no endereço apontado por ele (PC=1). Como MBR ainda é igual a zero, a execução é desviada novamente para NOP. 68

35 3 ciclo : NOP consome um ciclo sem fazer nada enquanto a primeira instrução cuja busca iniciou no ciclo anterior é transferida da memória para MBR. A execução é novamente desviada para Main1. 4 ciclo: Main1 é executada novamente, incrementando PC para 2 e iniciando a busca do próximo byte (que poderá ser o opcode da próxima instrução ou um argumento da instrução corrente). MBR contém agora o opcode da primeira instrução IJVM da memória (armazenada no endereço 0x01). Com isso, goto (MBR) agora desviará a execução para o endereço da memória de controle correspondente à instrução IJVM apontada por MBR ciclo em diante: A execução continuará por um ou mais ciclos, conforme a duração da instrução IJVM chamada. Ao final do microprograma, a execução será desviada novamente para Main1. Neste ponto, o próximo opcode já deverá ter sido carregado em MBR, fazendo com que Main1 inicie a busca seguinte e execute a próxima instrução IJVM. O processo se repete dando prosseguimento a execução do programa armazenado na memória até que alguém desligue a máquina. 70

36 3.5. Compilação JAVA 71 Compilação JAVA para IJVM Considere o fragmento de código JAVA abaixo: O equivalente IJVM obtido por compilação seria: 1 i = j + k; 2 if (i == 3) 3 k = 0; 4 else JAVA 5 j = j - 1; IJVM 1 ILOAD j 2 ILOAD k 3 IADD 4 ISTORE i 5 ILOAD i 6 BIPUSH 3 7 IF_ICMPEQ L1 8 ILOAD j 9 BIPUSH 1 10 ISUB 11 ISTORE j 12 GOTO L2 13 L1: BIPUSH 0 14 ISTORE k 15 L2: 72

37 Execução do um fragmento de código IJVM 1 ILOAD j // copia a variável j para o topo da pilha 2 ILOAD k // copia a variável k para o topo da pilha 3 IADD // coloca no topo da pilha a soma j+k 4 ISTORE i // retira resultado do topo e coloca em i 5 ILOAD i // copia a variável i para o topo da pilha 6 BIPUSH 3 // coloca o valor 3 no topo da pilha 7 IF_ICMPEQ L1 // desvia para L1 se i=3 8 ILOAD j // copia a variável j para o topo da pilha 9 BIPUSH 1 // coloca o valor 1 no topo da pilha 10 ISUB // coloca no topo da pilha a subtração j-1 11 ISTORE j // retira resultado do topo e coloca em j 12 GOTO L2 // desvio incondicional para L2 13 L1: BIPUSH 0 // coloca o valor 0 no topo da pilha 14 ISTORE k // retira o valor 0 do topo e coloca em k 15 L2: // não faz nada por um ciclo Estado da pilha de operandos: Variáveis locais: 0 k j i 73 Execução do um fragmento de código IJVM 1 ILOAD j // copia a variável j para o topo da pilha 2 ILOAD k // copia a variável k para o topo da pilha 3 IADD // coloca no topo da pilha a soma j+k 4 ISTORE i // retira resultado do topo e coloca em i 5 ILOAD i // copia a variável i para o topo da pilha 6 BIPUSH 3 // coloca o valor 3 no topo da pilha 7 IF_ICMPEQ L1 // desvia para L1 se i=3 8 ILOAD j // copia a variável j para o topo da pilha 9 BIPUSH 1 // coloca o valor 1 no topo da pilha 10 ISUB // coloca no topo da pilha a subtração j-1 11 ISTORE j // retira resultado do topo e coloca em j 12 GOTO L2 // desvio incondicional para L2 13 L1: BIPUSH 0 // coloca o valor 0 no topo da pilha 14 ISTORE k // retira o valor 0 do topo e coloca em k 15 L2: // não faz nada por um ciclo Estado da pilha de operandos: j Variáveis locais: 1 k j i 74

38 Execução do um fragmento de código IJVM 1 ILOAD j // copia a variável j para o topo da pilha 2 ILOAD k // copia a variável k para o topo da pilha 3 IADD // coloca no topo da pilha a soma j+k 4 ISTORE i // retira resultado do topo e coloca em i 5 ILOAD i // copia a variável i para o topo da pilha 6 BIPUSH 3 // coloca o valor 3 no topo da pilha 7 IF_ICMPEQ L1 // desvia para L1 se i=3 8 ILOAD j // copia a variável j para o topo da pilha 9 BIPUSH 1 // coloca o valor 1 no topo da pilha 10 ISUB // coloca no topo da pilha a subtração j-1 11 ISTORE j // retira resultado do topo e coloca em j 12 GOTO L2 // desvio incondicional para L2 13 L1: BIPUSH 0 // coloca o valor 0 no topo da pilha 14 ISTORE k // retira o valor 0 do topo e coloca em k 15 L2: // não faz nada por um ciclo Estado da pilha de operandos: k j 2 Variáveis locais: k j i 75 Execução do um fragmento de código IJVM 1 ILOAD j // copia a variável j para o topo da pilha 2 ILOAD k // copia a variável k para o topo da pilha 3 IADD // coloca no topo da pilha a soma j+k 4 ISTORE i // retira resultado do topo e coloca em i 5 ILOAD i // copia a variável i para o topo da pilha 6 BIPUSH 3 // coloca o valor 3 no topo da pilha 7 IF_ICMPEQ L1 // desvia para L1 se i=3 8 ILOAD j // copia a variável j para o topo da pilha 9 BIPUSH 1 // coloca o valor 1 no topo da pilha 10 ISUB // coloca no topo da pilha a subtração j-1 11 ISTORE j // retira resultado do topo e coloca em j 12 GOTO L2 // desvio incondicional para L2 13 L1: BIPUSH 0 // coloca o valor 0 no topo da pilha 14 ISTORE k // retira o valor 0 do topo e coloca em k 15 L2: // não faz nada por um ciclo Estado da pilha de operandos: j + k Variáveis locais: 3 k j i 76

39 Execução do um fragmento de código IJVM 1 ILOAD j // copia a variável j para o topo da pilha 2 ILOAD k // copia a variável k para o topo da pilha 3 IADD // coloca no topo da pilha a soma j+k 4 ISTORE i // retira resultado do topo e coloca em i 5 ILOAD i // copia a variável i para o topo da pilha 6 BIPUSH 3 // coloca o valor 3 no topo da pilha 7 IF_ICMPEQ L1 // desvia para L1 se i=3 8 ILOAD j // copia a variável j para o topo da pilha 9 BIPUSH 1 // coloca o valor 1 no topo da pilha 10 ISUB // coloca no topo da pilha a subtração j-1 11 ISTORE j // retira resultado do topo e coloca em j 12 GOTO L2 // desvio incondicional para L2 13 L1: BIPUSH 0 // coloca o valor 0 no topo da pilha 14 ISTORE k // retira o valor 0 do topo e coloca em k 15 L2: // não faz nada por um ciclo Estado da pilha de operandos: Variáveis locais: 4 k j i 77 Execução do um fragmento de código IJVM 1 ILOAD j // copia a variável j para o topo da pilha 2 ILOAD k // copia a variável k para o topo da pilha 3 IADD // coloca no topo da pilha a soma j+k 4 ISTORE i // retira resultado do topo e coloca em i 5 ILOAD i // copia a variável i para o topo da pilha 6 BIPUSH 3 // coloca o valor 3 no topo da pilha 7 IF_ICMPEQ L1 // desvia para L1 se i=3 8 ILOAD j // copia a variável j para o topo da pilha 9 BIPUSH 1 // coloca o valor 1 no topo da pilha 10 ISUB // coloca no topo da pilha a subtração j-1 11 ISTORE j // retira resultado do topo e coloca em j 12 GOTO L2 // desvio incondicional para L2 13 L1: BIPUSH 0 // coloca o valor 0 no topo da pilha 14 ISTORE k // retira o valor 0 do topo e coloca em k 15 L2: // não faz nada por um ciclo Estado da pilha de operandos: i Variáveis locais: 5 k j i 78

40 Execução do um fragmento de código IJVM 1 ILOAD j // copia a variável j para o topo da pilha 2 ILOAD k // copia a variável k para o topo da pilha 3 IADD // coloca no topo da pilha a soma j+k 4 ISTORE i // retira resultado do topo e coloca em i 5 ILOAD i // copia a variável i para o topo da pilha 6 BIPUSH 3 // coloca o valor 3 no topo da pilha 7 IF_ICMPEQ L1 // desvia para L1 se i=3 8 ILOAD j // copia a variável j para o topo da pilha 9 BIPUSH 1 // coloca o valor 1 no topo da pilha 10 ISUB // coloca no topo da pilha a subtração j-1 11 ISTORE j // retira resultado do topo e coloca em j 12 GOTO L2 // desvio incondicional para L2 13 L1: BIPUSH 0 // coloca o valor 0 no topo da pilha 14 ISTORE k // retira o valor 0 do topo e coloca em k 15 L2: // não faz nada por um ciclo Estado da pilha de operandos: 3 i 6 Variáveis locais: k j i 79 Execução do um fragmento de código IJVM 1 ILOAD j // copia a variável j para o topo da pilha 2 ILOAD k // copia a variável k para o topo da pilha 3 IADD // coloca no topo da pilha a soma j+k 4 ISTORE i // retira resultado do topo e coloca em i 5 ILOAD i // copia a variável i para o topo da pilha 6 BIPUSH 3 // coloca o valor 3 no topo da pilha 7 IF_ICMPEQ L1 // desvia para L1 se i=3 8 ILOAD j // copia a variável j para o topo da pilha 9 BIPUSH 1 // coloca o valor 1 no topo da pilha 10 ISUB // coloca no topo da pilha a subtração j-1 11 ISTORE j // retira resultado do topo e coloca em j 12 GOTO L2 // desvio incondicional para L2 13 L1: BIPUSH 0 // coloca o valor 0 no topo da pilha 14 ISTORE k // retira o valor 0 do topo e coloca em k 15 L2: // não faz nada por um ciclo Estado da pilha de operandos: Variáveis locais: 7 k j i 80

41 Execução do um fragmento de código IJVM 1 ILOAD j // copia a variável j para o topo da pilha 2 ILOAD k // copia a variável k para o topo da pilha 3 IADD // coloca no topo da pilha a soma j+k 4 ISTORE i // retira resultado do topo e coloca em i 5 ILOAD i // copia a variável i para o topo da pilha 6 BIPUSH 3 // coloca o valor 3 no topo da pilha 7 IF_ICMPEQ L1 // desvia para L1 se i=3 8 ILOAD j // copia a variável j para o topo da pilha 9 BIPUSH 1 // coloca o valor 1 no topo da pilha 10 ISUB // coloca no topo da pilha a subtração j-1 11 ISTORE j // retira resultado do topo e coloca em j 12 GOTO L2 // desvio incondicional para L2 13 L1: BIPUSH 0 // coloca o valor 0 no topo da pilha 14 ISTORE k // retira o valor 0 do topo e coloca em k 15 L2: // não faz nada por um ciclo Estado da pilha de operandos: j Variáveis locais: 8 k j i 81 Execução do um fragmento de código IJVM 1 ILOAD j // copia a variável j para o topo da pilha 2 ILOAD k // copia a variável k para o topo da pilha 3 IADD // coloca no topo da pilha a soma j+k 4 ISTORE i // retira resultado do topo e coloca em i 5 ILOAD i // copia a variável i para o topo da pilha 6 BIPUSH 3 // coloca o valor 3 no topo da pilha 7 IF_ICMPEQ L1 // desvia para L1 se i=3 8 ILOAD j // copia a variável j para o topo da pilha 9 BIPUSH 1 // coloca o valor 1 no topo da pilha 10 ISUB // coloca no topo da pilha a subtração j-1 11 ISTORE j // retira resultado do topo e coloca em j 12 GOTO L2 // desvio incondicional para L2 13 L1: BIPUSH 0 // coloca o valor 0 no topo da pilha 14 ISTORE k // retira o valor 0 do topo e coloca em k 15 L2: // não faz nada por um ciclo Estado da pilha de operandos: 1 j 9 Variáveis locais: k j i 82

42 Execução do um fragmento de código IJVM 1 ILOAD j // copia a variável j para o topo da pilha 2 ILOAD k // copia a variável k para o topo da pilha 3 IADD // coloca no topo da pilha a soma j+k 4 ISTORE i // retira resultado do topo e coloca em i 5 ILOAD i // copia a variável i para o topo da pilha 6 BIPUSH 3 // coloca o valor 3 no topo da pilha 7 IF_ICMPEQ L1 // desvia para L1 se i=3 8 ILOAD j // copia a variável j para o topo da pilha 9 BIPUSH 1 // coloca o valor 1 no topo da pilha 10 ISUB // coloca no topo da pilha a subtração j-1 11 ISTORE j // retira resultado do topo e coloca em j 12 GOTO L2 // desvio incondicional para L2 13 L1: BIPUSH 0 // coloca o valor 0 no topo da pilha 14 ISTORE k // retira o valor 0 do topo e coloca em k 15 L2: // não faz nada por um ciclo Estado da pilha de operandos: j-1 Variáveis locais: 10 k j i 83 Execução do um fragmento de código IJVM 1 ILOAD j // copia a variável j para o topo da pilha 2 ILOAD k // copia a variável k para o topo da pilha 3 IADD // coloca no topo da pilha a soma j+k 4 ISTORE i // retira resultado do topo e coloca em i 5 ILOAD i // copia a variável i para o topo da pilha 6 BIPUSH 3 // coloca o valor 3 no topo da pilha 7 IF_ICMPEQ L1 // desvia para L1 se i=3 8 ILOAD j // copia a variável j para o topo da pilha 9 BIPUSH 1 // coloca o valor 1 no topo da pilha 10 ISUB // coloca no topo da pilha a subtração j-1 11 ISTORE j // retira resultado do topo e coloca em j 12 GOTO L2 // desvio incondicional para L2 13 L1: BIPUSH 0 // coloca o valor 0 no topo da pilha 14 ISTORE k // retira o valor 0 do topo e coloca em k 15 L2: // não faz nada por um ciclo Estado da pilha de operandos: Variáveis locais: 11 k j i 84

43 Execução do um fragmento de código IJVM 1 ILOAD j // copia a variável j para o topo da pilha 2 ILOAD k // copia a variável k para o topo da pilha 3 IADD // coloca no topo da pilha a soma j+k 4 ISTORE i // retira resultado do topo e coloca em i 5 ILOAD i // copia a variável i para o topo da pilha 6 BIPUSH 3 // coloca o valor 3 no topo da pilha 7 IF_ICMPEQ L1 // desvia para L1 se i=3 8 ILOAD j // copia a variável j para o topo da pilha 9 BIPUSH 1 // coloca o valor 1 no topo da pilha 10 ISUB // coloca no topo da pilha a subtração j-1 11 ISTORE j // retira resultado do topo e coloca em j 12 GOTO L2 // desvio incondicional para L2 13 L1: BIPUSH 0 // coloca o valor 0 no topo da pilha 14 ISTORE k // retira o valor 0 do topo e coloca em k 15 L2: // não faz nada por um ciclo Estado da pilha de operandos: Variáveis locais: 12 k j i 85 Execução do um fragmento de código IJVM 1 ILOAD j // copia a variável j para o topo da pilha 2 ILOAD k // copia a variável k para o topo da pilha 3 IADD // coloca no topo da pilha a soma j+k 4 ISTORE i // retira resultado do topo e coloca em i 5 ILOAD i // copia a variável i para o topo da pilha 6 BIPUSH 3 // coloca o valor 3 no topo da pilha 7 IF_ICMPEQ L1 // desvia para L1 se i=3 8 ILOAD j // copia a variável j para o topo da pilha 9 BIPUSH 1 // coloca o valor 1 no topo da pilha 10 ISUB // coloca no topo da pilha a subtração j-1 11 ISTORE j // retira resultado do topo e coloca em j 12 GOTO L2 // desvio incondicional para L2 13 L1: BIPUSH 0 // coloca o valor 0 no topo da pilha 14 ISTORE k // retira o valor 0 do topo e coloca em k 15 L2: // não faz nada por um ciclo Estado da pilha de operandos: 0 Variáveis locais: 13 k j i 86

44 Execução do um fragmento de código IJVM 1 ILOAD j // copia a variável j para o topo da pilha 2 ILOAD k // copia a variável k para o topo da pilha 3 IADD // coloca no topo da pilha a soma j+k 4 ISTORE i // retira resultado do topo e coloca em i 5 ILOAD i // copia a variável i para o topo da pilha 6 BIPUSH 3 // coloca o valor 3 no topo da pilha 7 IF_ICMPEQ L1 // desvia para L1 se i=3 8 ILOAD j // copia a variável j para o topo da pilha 9 BIPUSH 1 // coloca o valor 1 no topo da pilha 10 ISUB // coloca no topo da pilha a subtração j-1 11 ISTORE j // retira resultado do topo e coloca em j 12 GOTO L2 // desvio incondicional para L2 13 L1: BIPUSH 0 // coloca o valor 0 no topo da pilha 14 ISTORE k // retira o valor 0 do topo e coloca em k 15 L2: // não faz nada por um ciclo Estado da pilha de operandos: Variáveis locais: 14 k j i 87 Execução do um fragmento de código IJVM 1 ILOAD j // copia a variável j para o topo da pilha 2 ILOAD k // copia a variável k para o topo da pilha 3 IADD // coloca no topo da pilha a soma j+k 4 ISTORE i // retira resultado do topo e coloca em i 5 ILOAD i // copia a variável i para o topo da pilha 6 BIPUSH 3 // coloca o valor 3 no topo da pilha 7 IF_ICMPEQ L1 // desvia para L1 se i=3 8 ILOAD j // copia a variável j para o topo da pilha 9 BIPUSH 1 // coloca o valor 1 no topo da pilha 10 ISUB // coloca no topo da pilha a subtração j-1 11 ISTORE j // retira resultado do topo e coloca em j 12 GOTO L2 // desvio incondicional para L2 13 L1: BIPUSH 0 // coloca o valor 0 no topo da pilha 14 ISTORE k // retira o valor 0 do topo e coloca em k 15 L2: // não faz nada por um ciclo Estado da pilha de operandos: Variáveis locais: 15 k j i 88

45 Código hexadecimal gerado para cada instrução IJVM pelo programa montador Linha Instrução IJVM Código Hexa Gerado Opcode Arg Arg 1 ILOAD j 0x15 0x02 2 ILOAD k 0x15 0x03 3 IADD 0x60 4 ISTORE i 0x36 0x01 5 ILOAD i 0x15 0x01 6 BIPUSH 3 0x10 0x03 7 IF_ICMPEQ L1 0x9F 0x00 0x0D 8 ILOAD j 0x15 0x02 9 BIPUSH 1 0x10 0x01 10 ISUB 0x64 11 ISTORE j 0x36 0x02 12 GOTO L2 0xA7 0x00 0x07 13 L1: BIPUSH 0 0x10 0x00 14 ISTORE k 0x36 0x03 15 L2: 0x00 Variáveis locais: k j i 89 Andrew S. Tanenbaum, Organização Estruturada de Computadores, 5a Ed., Pearson, J. L. Hennessy & D. A. Patterson, Arquitetura de Computadores - Uma Abordagem Quantitativa, Editora Campus, Willians Stallings, Arquitetura e Organização de Computadores, 5ª Edição, Pearson, Albert Paul Malvino, Microcomputadores e Microprocessadores, McGraw-Hill, Herbert Taub, Circuitos Digitais e Microprocessadores, Mcgranw-Hill,

Arquitetura e Organização de Computadores

Arquitetura e Organização de Computadores Arquitetura e Organização de Computadores Fernando Fonseca Ramos Faculdade de Ciência e Tecnologia de Montes Claros Fundação Educacional Montes Claros 1 Índice 1- Introdução 2- Exemplo de Microarquitetura

Leia mais

Microarquitetura IJVM. Datapath mic-1. Função dos Registradores. mic-1

Microarquitetura IJVM. Datapath mic-1. Função dos Registradores. mic-1 Microarquitetura IJVM mic-1 Datapath mic-1 Este é mais um exemplo de datapath para microarquitetura IJVM desenvolvida por Andew Tanenbaum Parte da CPU que contém a ALU, suas entradas e saídas 2 Função

Leia mais

Um Exemplo de Nível ISA: o IJVM. Pilhas. Pilhas. O Modelo de Memória da IJVM. Pilhas de Operandos. Nível ISA

Um Exemplo de Nível ISA: o IJVM. Pilhas. Pilhas. O Modelo de Memória da IJVM. Pilhas de Operandos. Nível ISA Ciência da Computação Arq. e Org. de Computadores Nível ISA Prof. Sergio Ribeiro Um Exemplo de Nível ISA: o IJVM Objetivo: Introduzir um nível ISA (Instruction Set Architecture), a ser interpretado pelo

Leia mais

Capítulo 4 Nível da microarquitetura

Capítulo 4 Nível da microarquitetura Capítulo 4 Nível da microarquitetura Nível acima da lógica digital Função: Implementar a ISA (Instruction Set Architecture) O projeto da microarquitetura depende diretamente da ISA, além dos objetivos

Leia mais

Nível da Microarquitetura

Nível da Microarquitetura Nível da Microarquitetura (Aula 10) Roberta Lima Gomes - LPRM/DI/UFES Sistemas de Programação I Eng. Elétrica 2007/2 Agradecimentos: Camilo Calvi - LPRM/DI/UFES Máquina de Vários Níveis Modernas (ISA)

Leia mais

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br - Aula 2 - O NÍVEL DA MICROARQUITETURA 1. INTRODUÇÃO Este é o nível cuja função é implementar a camada ISA (Instruction Set Architeture). O seu projeto depende da arquitetura do conjunto das instruções

Leia mais

Arquitetura de Computadores. Tipos de Instruções

Arquitetura de Computadores. Tipos de Instruções Arquitetura de Computadores Tipos de Instruções Tipos de instruções Instruções de movimento de dados Operações diádicas Operações monádicas Instruções de comparação e desvio condicional Instruções de chamada

Leia mais

TE Arquitetura e Organização de Computadores

TE Arquitetura e Organização de Computadores TE 11008 Arquitetura e Organização de omputadores Nível da Microarquitetura Ronaldo de Freitas Zampolo LaPS/ENGOMP/ITE/UFPA TE 11008 Arquitetura e Organização de omputadores Microarquitetura p. 1 Tópicos

Leia mais

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM 71 Introdução Difere dos níveis inferiores por ser implementado por tradução A tradução é usada quando um processador está disponível para uma mensagem fonte mas

Leia mais

3. O NIVEL DA LINGUAGEM DE MONTAGEM

3. O NIVEL DA LINGUAGEM DE MONTAGEM 3. O NIVEL DA LINGUAGEM DE MONTAGEM Nas aulas anteriores tivemos a oportunidade de discutir dois diferentes níveis presentes na maioria dos computadores atuais. Nesta aula dedica-se a outro nível que também

Leia mais

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

Geração de código. Ivan Ricarte INTRODUÇÃO À COMPILAÇÃO Geração de código Ivan Ricarte 2008 Sumário Geração de código intermediário Código de três endereços Notação pós-fixa Otimização de código Heurísticas de otimização Geração de código em linguagem simbólica

Leia mais

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

Componentes do Computador e. aula 3. Profa. Débora Matos Componentes do Computador e modelo de Von Neumann aula 3 Profa. Débora Matos O que difere nos componentes que constituem um computador? Princípios básicos Cada computador tem um conjunto de operações e

Leia mais

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

Máquina Multinível. Um programa pode ser definido como uma seqüência de instruções que descrevem como executar uma determinada tarefa. Máquina Multinível Um programa pode ser definido como uma seqüência de instruções que descrevem como executar uma determinada tarefa. Uma instrução pode ser definida como um comando para o processador.

Leia mais

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br - Aula 5 - O NÍVEL DA LINGUAGEM DE MONTAGEM 1. INTRODUÇÃO É relativamente fácil compreender os fundamentos da programação de computadores, sob o ponto de vista da inteligibilidade dos comandos de alto

Leia mais

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

4-1. Parte2: A Arquitetura do Conjunto de Instruções 4-1 Parte2: A Arquitetura do Conjunto de Instruções 4-2 Bibliografia [1] Miles J. Murdocca e Vincent P. Heuring, Introdução à Arquitetura de Computadores [2] Marcelo Rubinstein Transparências do curso

Leia mais

ARQUITETURA DE COMPUTADORES - 1866

ARQUITETURA DE COMPUTADORES - 1866 7 Unidade Central de Processamento (UCP): O processador é o componente vital do sistema de computação, responsável pela realização das operações de processamento e de controle, durante a execução de um

Leia mais

ULA Sinais de Controle enviados pela UC

ULA Sinais de Controle enviados pela UC Solução - Exercícios Processadores 1- Qual as funções da Unidade Aritmética e Lógica (ULA)? A ULA é o dispositivo da CPU que executa operações tais como: Adição Subtração Multiplicação Divisão Incremento

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Caminho de Dados Slide 1 Sumário Introdução Convenções Lógicas de Projeto Construindo um Caminho de Dados O Controle da ULA Projeto da Unidade de Controle Principal

Leia mais

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

O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema. O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema. Unidade aritmética e lógica - Executa operações aritméticas (cálculos);

Leia mais

Nível da Arquitetura do Conjunto das Instruções

Nível da Arquitetura do Conjunto das Instruções Nível da Arquitetura do Conjunto das Instruções (Aula 13) Fluxo de Controle Fluxo Seqüencial de Controle e Desvios (1) Fluxo de Controle: É a seqüência na qual instruções são dinamicamente executadas Isto

Leia mais

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

Geração de código intermediário. Novembro 2006 Geração de código intermediário Novembro 2006 Introdução Vamos agora explorar as questões envolvidas na transformação do código fonte em uma possível representação intermediária Como vimos, nas ações semânticas

Leia mais

Capacidade = 512 x 300 x 20000 x 2 x 5 = 30.720.000.000 30,72 GB

Capacidade = 512 x 300 x 20000 x 2 x 5 = 30.720.000.000 30,72 GB Calculando a capacidade de disco: Capacidade = (# bytes/setor) x (méd. # setores/trilha) x (# trilhas/superfície) x (# superfícies/prato) x (# pratos/disco) Exemplo 01: 512 bytes/setor 300 setores/trilha

Leia mais

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

NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann Universidade Federal de Santa Maria NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann O modelo (ou arquitetura) de von

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Aritmética Computacional Slide 1 Sumário Unidade Lógica e Aritmética Representação de Números Inteiros Aritmética de Números Inteiros Representação de Números

Leia mais

3. Arquitetura Básica do Computador

3. Arquitetura Básica do Computador 3. Arquitetura Básica do Computador 3.1. Modelo de Von Neumann Dar-me-eis um grão de trigo pela primeira casa do tabuleiro; dois pela segunda, quatro pela terceira, oito pela quarta, e assim dobrando sucessivamente,

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Caminho de Dados Slide 1 Sumário Introdução Convenções Lógicas de Projeto Construindo um Caminho de Dados O Controle da ULA Projeto da Unidade de Controle Principal

Leia mais

A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande

A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande região de armazenamento formada por bytes ou palavras, cada

Leia mais

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

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis Ciência da Computação Arq. e Org. de Computadores Máquinas Multiníveis Prof. Sergio Ribeiro Computador digital máquina que resolve problemas executando uma série de instruções. Programa conjunto de instruções

Leia mais

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

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2) Arquitectura de um computador Caracterizada por: Conjunto de instruções do processador (ISA Estrutura interna do processador (que registadores existem, etc Modelo de memória (dimensão endereçável, alcance

Leia mais

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:

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: Arquitetura de Computadores Estrutura e Funcionamento da CPU Prof. Marcos Quinet Universidade Federal Fluminense P.U.R.O. Revisão dos conceitos básicos O processador é o componente vital do sistema de

Leia mais

Computadores de Programação (MAB353)

Computadores de Programação (MAB353) Computadores de Programação (MAB353) Aula 7: 29 de abril de 2010 1 2 Subrotinas Um procedimento ou função é uma subrotina armazenada que executa uma tarefa específica baseada nos parâmetros de entrada

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

1. NÍVEL CONVENCIONAL DE MÁQUINA (Cont.) 1.3. INSTRUÇÕES Conceitos Básicos

1. NÍVEL CONVENCIONAL DE MÁQUINA (Cont.) 1.3. INSTRUÇÕES Conceitos Básicos 1. NÍVEL CONVENCIONAL DE MÁQUINA (Cont.) 1.3. INSTRUÇÕES Conceitos Básicos Já estudamos anteriormente que os processadores funcionam (ou melhor, o seu hardware funciona) através de ordens simples e básicas,

Leia mais

Organização de Computadores 1

Organização de Computadores 1 Organização de Computadores 1 5 CONJUNTO DE INSTRUÇÕES Prof. Luiz Gustavo A. Martins Introdução O que é um conjunto de instruções? Coleção completa das instruções que a CPU é capaz de executar (entende).

Leia mais

1. SINTAXE DA LINGUAGEM ASSEMBLY

1. SINTAXE DA LINGUAGEM ASSEMBLY 1. SINTAXE DA LINGUAGEM ASSEMBLY Antes de se escrever em assembly, é conveniente construir um fluxograma do programa. Um fluxograma não faz referência à linguagem a utilizar, pelo que pode ser utilizado

Leia mais

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

ULA- Unidade Lógica Aritmética. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h ULA- Unidade Lógica Aritmética. Prof. Rômulo Calado Pantaleão Camara Carga Horária: 60h Sumário Unidade Lógica Aritmetrica Registradores Unidade Lógica Operações da ULA Unidade de Ponto Flutuante Representação

Leia mais

[RÓTULO:] MNEMÔNICO [OPERANDOS] [;COMENTÁRIO]

[RÓTULO:] MNEMÔNICO [OPERANDOS] [;COMENTÁRIO] Instruções de uso do montador DAEDALUS (baseadas em texto extraído da monografia apresentada como trabalho de diplomação no curso de Bacharelado em Ciência da Computação por Luís Ricardo Schwengber, sob

Leia mais

Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores.

Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores. Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores. 7.3.1.2 Registradores: São pequenas unidades de memória, implementadas na CPU, com as seguintes características:

Leia mais

Arquiteturas RISC. (Reduced Instructions Set Computers)

Arquiteturas RISC. (Reduced Instructions Set Computers) Arquiteturas RISC (Reduced Instructions Set Computers) 1 INOVAÇÕES DESDE O SURGIMENTO DO COMPU- TADOR DE PROGRAMA ARMAZENADO (1950)! O conceito de família: desacoplamento da arquitetura de uma máquina

Leia mais

Arquitetura de Computadores I

Arquitetura de Computadores I Arquitetura de Computadores I Pipeline -- Conflito de dados paradas e adiantamentos -- Conflito de controle detecção de desvios e descarte de instruções -- Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno

Leia mais

Organização de Computadores. Cálculos Binários e Conversão entre Bases Aritmética Binária

Organização de Computadores. Cálculos Binários e Conversão entre Bases Aritmética Binária Organização de Computadores Capítulo 4 Cálculos Binários e Conversão entre Bases Aritmética Binária Material de apoio 2 Esclarecimentos Esse material é de apoio para as aulas da disciplina e não substitui

Leia mais

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Estruturas de Sistemas de Computação O sistema operacional precisa garantir a operação correta do sistema de computação. Operação

Leia mais

Memória Cache. Prof. Leonardo Barreto Campos 1

Memória Cache. Prof. Leonardo Barreto Campos 1 Memória Cache Prof. Leonardo Barreto Campos 1 Sumário Introdução; Projeto de Memórias Cache; Tamanho; Função de Mapeamento; Política de Escrita; Tamanho da Linha; Número de Memórias Cache; Bibliografia.

Leia mais

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 06: Ponteiros Declarando e utilizando ponteiros Ponteiros e vetores Inicializando ponteiros Ponteiros para Ponteiros Cuidados a serem

Leia mais

CISC - Complex Instruction Set Computer

CISC - Complex Instruction Set Computer MAC 412- Organizãção de Computadores - Siang W. Song Baseado no livro de Tanenbaum - Structured Computer Organization Índice Conceito de microprogramação 1 Conceito de microprogramação Como surgiu Exemplos

Leia mais

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária 1- Apresentação Binária Os computadores funcionam e armazenam dados mediante a utilização de chaves eletrônicas que são LIGADAS ou DESLIGADAS. Os computadores só entendem e utilizam dados existentes neste

Leia mais

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

Introdução à Organização e Arquitetura de Computadores. Prof. Leonardo Barreto Campos 1 Introdução à Organização e Arquitetura de Computadores Prof. Leonardo Barreto Campos 1 Sumário Introdução; Evolução dos Computadores; Considerações da Arquitetura de von Neumann; Execução de uma instrução

Leia mais

Computadores de Programação (MAB353)

Computadores de Programação (MAB353) Computadores de Programação (MAB353) Aula 6: 27 de abril de 2010 1 Recaptulando operações já estudadas Operações lógicas 2 3 Exercícios Referências bibliográficas Recaptulando operações já estudadas Operações

Leia mais

Edeyson Andrade Gomes

Edeyson Andrade Gomes Sistemas Operacionais Conceitos de Arquitetura Edeyson Andrade Gomes www.edeyson.com.br Roteiro da Aula Máquinas de Níveis Revisão de Conceitos de Arquitetura 2 Máquina de Níveis Máquina de níveis Computador

Leia mais

Universidade Federal do Piauí Centro de Tecnologia Curso de Engenharia Elétrica. Prof. Marcos Zurita zurita@ufpi.edu.br www.ufpi.

Universidade Federal do Piauí Centro de Tecnologia Curso de Engenharia Elétrica. Prof. Marcos Zurita zurita@ufpi.edu.br www.ufpi. Universidade Federal do Piauí Centro de Tecnologia Curso de Engenharia Elétrica Arquiteturas de Computadores Prof. Marcos Zurita zurita@ufpi.edu.br www.ufpi.br/zurita Teresina - 2012 1. Arquiteturas de

Leia mais

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA Responda 1) Quem desenvolveu a linguagem C? Quando? 2) Existe alguma norma sobre a sintaxe da linguagem C? 3) Quais são os tipos básicos de dados disponíveis na linguagem C? 4) Quais são as principais

Leia mais

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis 1. TIPOS DE DADOS Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem ser classificadas em dois tipos: As instruções, que

Leia mais

BARRAMENTO DO SISTEMA

BARRAMENTO DO SISTEMA BARRAMENTO DO SISTEMA Memória Principal Processador Barramento local Memória cachê/ ponte Barramento de sistema SCSI FireWire Dispositivo gráfico Controlador de vídeo Rede Local Barramento de alta velocidade

Leia mais

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo. Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 8 ARRAYS Introdução Até agora, utilizamos variáveis individuais. Significa que uma variável objeto

Leia mais

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

Processadores BIP. Conforme Morandi et al (2006), durante o desenvolvimento do BIP, foram definidas três diretrizes de projeto: Processadores BIP A família de processadores BIP foi desenvolvida por pesquisadores do Laboratório de Sistemas Embarcados e Distribuídos (LSED) da Universidade do Vale do Itajaí UNIVALI com o objetivo

Leia mais

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br LP II Estrutura de Dados Introdução e Linguagem C Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br Resumo da aula Considerações Gerais Introdução a Linguagem C Variáveis e C Tipos de

Leia mais

Organização Básica do Computador

Organização Básica do Computador Organização Básica do Computador Modelo de Von Neumann MEMÓRIA ENTRADA ARITMÉTICA LÓGICA SAÍDA CONTROLE Modelo de Von Neumann Introduziu o conceito do computador controlado por programa armazenado. Todo

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Introdução a Linguagem C Construções Básicas Programa em C #include int main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius = 30; farenheit = 9.0/5

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Aula 13 Gerência de Memória Prof.: Edilberto M. Silva http://www.edilms.eti.br Baseado no material disponibilizado por: SO - Prof. Edilberto Silva Prof. José Juan Espantoso Sumário

Leia mais

2 Formalidades referentes ao trabalho

2 Formalidades referentes ao trabalho Bacharelado em Ciência da Computação DINF / UFPR Projetos Digitais e Microprocessadores 1 o Semestre de 2006 MICO-v12.r0 07/03/2006 Profs. Luis Allan Künzle e Armando Luiz Nicolini Delgado Atenção: Este

Leia mais

2. OPERADORES... 6 3. ALGORITMOS, FLUXOGRAMAS E PROGRAMAS... 8 4. FUNÇÕES... 10

2. OPERADORES... 6 3. ALGORITMOS, FLUXOGRAMAS E PROGRAMAS... 8 4. FUNÇÕES... 10 1. TIPOS DE DADOS... 3 1.1 DEFINIÇÃO DE DADOS... 3 1.2 - DEFINIÇÃO DE VARIÁVEIS... 3 1.3 - VARIÁVEIS EM C... 3 1.3.1. NOME DAS VARIÁVEIS... 3 1.3.2 - TIPOS BÁSICOS... 3 1.3.3 DECLARAÇÃO DE VARIÁVEIS...

Leia mais

Sistemas Computacionais II Professor Frederico Sauer

Sistemas Computacionais II Professor Frederico Sauer Sistemas Computacionais II Professor Frederico Sauer Livro-texto: Introdução à Organização de Computadores 4ª edição Mário A. Monteiro Livros Técnicos e Científicos Editora. Atenção: Este material não

Leia mais

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008 Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,

Leia mais

Introdução à Arquitetura de Computadores

Introdução à Arquitetura de Computadores 1 Introdução à Arquitetura de Computadores Hardware e software Organização de um computador: Processador: registradores, ALU, unidade de controle Memórias Dispositivos de E/S Barramentos Linguagens de

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Pipeline Slide 1 Pipeline Pipeline Hazards: Hazards Estruturais Hazards de Dados Hazards de Controle Organização e Arquitetura de Computadores I Caminho de Dados

Leia mais

Análises Geração RI (representação intermediária) Código Intermediário

Análises Geração RI (representação intermediária) Código Intermediário Front-end Análises Geração RI (representação intermediária) Código Intermediário Back-End Geração de código de máquina Sistema Operacional? Conjunto de Instruções do processador? Ambiente de Execução O

Leia mais

Arquitetura de Computadores. Ivan Saraiva Silva

Arquitetura de Computadores. Ivan Saraiva Silva Arquitetura de Computadores Introdução Ivan Saraiva Silva Sumário Introdução Bibliografia Recomendada O que é um computador Organização de um Computador Modelo de Von Neumann IAS Máquina de Von Neuman

Leia mais

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira IFPE Disciplina: Sistemas Operacionais Prof. Anderson Luiz Moreira SERVIÇOS OFERECIDOS PELOS SOS 1 Introdução O SO é formado por um conjunto de rotinas (procedimentos) que oferecem serviços aos usuários

Leia mais

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES Prof. Ms. Carlos José Giudice dos Santos cpgcarlos@yahoo.com.br www.oficinadapesquisa.com.br Conceito de Computador Um computador digital é

Leia mais

Conceitos Importantes:

Conceitos Importantes: Conceitos Importantes: Variáveis: Por Flávia Pereira de Carvalho, 2007 i O bom entendimento do conceito de variável é fundamental para elaboração de algoritmos, consequentemente de programas. Uma variável

Leia mais

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

28/9/2010. Unidade de Controle Funcionamento e Implementação Arquitetura de Computadores Unidade de Controle Funcionamento e Implementação Prof. Marcos Quinet Universidade Federal Fluminense P.U.R.O. Operação da Unidade de Controle Unidade de controle: parte do

Leia mais

MODOS DE ENDEREÇAMENTO

MODOS DE ENDEREÇAMENTO UNINGÁ UNIDADE DE ENSINO SUPERIOR INGÁ FACULDADE INGÁ DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO ERINALDO SANCHES NASCIMENTO MODOS DE ENDEREÇAMENTO MARINGÁ 2014 SUMÁRIO 6 MODOS DE ENDEREÇAMENTO...2 6.1 ENDEREÇAMENTO

Leia mais

Instituto Superior de Engenharia do Porto Departamento de Engenharia Informática

Instituto Superior de Engenharia do Porto Departamento de Engenharia Informática Instituto Superior de Engenharia do Porto Departamento de Engenharia Informática 5º Ano da Licenciatura em Engenharia Informática Ramo de Computadores e Sistemas Disciplina de Projecto 2003/2004 IJVM em

Leia mais

Computadores XXI: Busca e execução Final

Computadores XXI: Busca e execução Final Computadores XXI: Busca e execução Final A6 Texto 6 http://www.bpiropo.com.br/fpc20060123.htm Sítio Fórum PCs /Colunas Coluna: B. Piropo Publicada em 23/01/2006 Autor: B.Piropo Na coluna anterior, < http://www.forumpcs.com.br/viewtopic.php?t=146019

Leia mais

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

Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01 Unidade Central de Processamento (CPU) Processador Renan Manola Introdução ao Computador 2010/01 Componentes de um Computador (1) Computador Eletrônico Digital É um sistema composto por: Memória Principal

Leia mais

Pipeline. Todos os estágios devem estar prontos ao mesmo tempo para prosseguir.

Pipeline. Todos os estágios devem estar prontos ao mesmo tempo para prosseguir. O throughput de um pipeline é determinado pela freqüência com que uma instrução sai do pipeline Todos os estágios devem estar prontos ao mesmo tempo para prosseguir O tempo requerido para mover uma instrução

Leia mais

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada Programação Estruturada Programação Estruturada Paradigmas de Linguagens de Programação As linguagens desse paradigma são muitas vezes chamadas de linguagens convencionais, procedurais ou imperativas.

Leia mais

Organização de Computadores Hardware

Organização de Computadores Hardware Organização de Computadores Hardware Professor Marcus Vinícius Midena Ramos Colegiado de Engenharia de Computação (74)3614.1936 marcus.ramos@univasf.edu.br www.univasf.edu.br/~marcus.ramos Computador Ferramenta

Leia mais

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

Arquitetura de Computadores Paralelismo, CISC X RISC, Interpretação X Tradução, Caminho de dados Arquitetura de Computadores Paralelismo, CISC X RISC, Interpretação X Tradução, Caminho de dados Organização de um Computador Típico Memória: Armazena dados e programas. Processador (CPU - Central Processing

Leia mais

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

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 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

Leia mais

Aula 14: Instruções e Seus Tipos

Aula 14: Instruções e Seus Tipos Aula 14: Instruções e Seus Tipos Diego Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Diego Passos (UFF) Instruções e Seus Tipos FAC 1 / 35 Conceitos Básicos Diego Passos

Leia mais

Exemplo de Subtração Binária

Exemplo de Subtração Binária Exemplo de Subtração Binária Exercícios Converta para binário e efetue as seguintes operações: a) 37 10 30 10 b) 83 10 82 10 c) 63 8 34 8 d) 77 8 11 8 e) BB 16 AA 16 f) C43 16 195 16 3.5.3 Divisão binária:

Leia mais

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br Introdução O computador como ferramenta indispensável: Faz parte das nossas vidas; Por si só não faz nada de útil; Grande capacidade de resolução

Leia mais

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

Introdução. A Informação e sua Representação (Parte III) Universidade Federal de Campina Grande Departamento de Sistemas e Computação Universidade Federal de Campina Grande Departamento de Sistemas e Computação Introdução à Computação A Informação e sua Representação (Parte III) Prof.a Joseana Macêdo Fechine Régis de Araújo joseana@computacao.ufcg.edu.br

Leia mais

Árvores Binárias de Busca

Árvores Binárias de Busca Árvores Binárias de Busca Uma Árvore Binária de Busca T (ABB) ou Árvore Binária de Pesquisa é tal que ou T = 0 e a árvore é dita vazia ou seu nó contém uma chave e: 1. Todas as chaves da sub-árvore esquerda

Leia mais

Programando o computador IAS

Programando o computador IAS Programando o computador IAS Edson Borin e Rafael Auler 21 de março de 2012 1 Introdução O computador IAS foi um dos primeiros computadores a implementar o conceito do programa armazenado. Neste paradigma,

Leia mais

Princípios de funcionamento dos computadores

Princípios de funcionamento dos computadores Princípios de funcionamento dos computadores Objetivos da aula: - Entender o princípio de funcionamento dos computadores - Entender o conceito de programa e sua dinâmica de execução Tópicos da aula: -

Leia mais

Algoritmos e Programação

Algoritmos e Programação Universidade Federal do Vale do São Francisco Curso de Engenharia da Produção / Elétrica Algoritmos e Programação Parte 05 Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jorge.cavalcanti

Leia mais

Algoritmos e Estrutura de Dados III. Árvores

Algoritmos e Estrutura de Dados III. Árvores Algoritmos e Estrutura de Dados III Árvores Uma das mais importantes classes de estruturas de dados em computação são as árvores. Aproveitando-se de sua organização hierárquica, muitas aplicações são realizadas

Leia mais

Introdução à Engenharia de Computação

Introdução à Engenharia de Computação Introdução à Engenharia de Computação Tópico: O Computador como uma Máquina Multinível (cont.) José Gonçalves - LPRM/DI/UFES Introdução à Engenharia de Computação Máquina Multinível Moderna Figura 1 Máquina

Leia mais

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

ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM Linguagem de programação Linguagem de Alto Nível próximo ao ser humano, escrita de forma textual. Ex: if (a==b) a=b+c; Linguagem de Montagem (Assembly) próximo à linguagem de máquina, escrita em códigos

Leia mais

CAPÍTULO 6 ARITMÉTICA DIGITAL

CAPÍTULO 6 ARITMÉTICA DIGITAL CAPÍTULO 6 ARITMÉTICA DIGITAL Introdução Números decimais Números binários positivos Adição Binária Números negativos Extensão do bit de sinal Adição e Subtração Overflow Aritmético Circuitos Aritméticos

Leia mais

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

Conjunto de instruções e modos de. aula 4. Profa. Débora Matos Conjunto de instruções e modos de endereçamento aula 4 Profa. Débora Matos Conjunto de Instruções A = ((B + C) x D + E F)/(G x H) A H denotam posições da memória endereços As arquiteturas possuem as seguintes

Leia mais

3 Sistemas de Numeração:

3 Sistemas de Numeração: 3 Sistemas de Numeração: Os computadores eletrônicos têm como base para seu funcionamento a utilização de eletricidade. Diferente de outras máquinas que a presença ou ausência de eletricidade apenas significam

Leia mais

Programação Básica em Arduino Aula 2

Programação Básica em Arduino Aula 2 Programação Básica em Arduino Aula 2 Execução: Laboratório de Automação e Robótica Móvel Variáveis são lugares (posições) na memória principal que servem para armazenar dados. As variáveis são acessadas

Leia mais

Arquitetura de Computadores. Linguagem de Máquina

Arquitetura de Computadores. Linguagem de Máquina Arquitetura de Computadores Linguagem de Máquina Ivan Saraiva Silva Formato de Instrução MAC O MIC possui dois formatos de instrução: 4 bits 12 bits Formato 1 CODOP ENDEREÇO 8 bits 8 bits Formato 2 CODOP

Leia mais

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

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

Leia mais

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIAS DA COMPUTAÇÃO BACHARELADO AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS Orientando: Oliver Mário

Leia mais

FUNDAÇÃO EDUCACIONAL DE ITUIUTABA

FUNDAÇÃO EDUCACIONAL DE ITUIUTABA FUNDAÇÃO EDUCACIONAL DE ITUIUTABA ASSOCIADA À UNIVERSIDADE DO ESTADO DE MINAS GERAIS CURSO DE SISTEMA DE INFORMAÇÃO PILHA E FILA Prof. Walteno Martins Parreira Júnior www.waltenomartins.com.br waltenomartins@yahoo.com

Leia mais

MC102 Algoritmos e Programação de Computadores 2ª Aula Programa, entrada e saída de dados

MC102 Algoritmos e Programação de Computadores 2ª Aula Programa, entrada e saída de dados MC102 Algoritmos e Programação de Computadores 2ª Aula Programa, entrada e saída de dados 1. Objetivos Falar sobre programa de computador, diferenciando programa em linguagem de máquina, de programa em

Leia mais