Projeto de Instruções <ul><li>Com o que vimos até aqui, não foi possível ter uma noção do quanto o formato das instruções ...
<ul><li>Imagine que um novo  </li></ul><ul><li>processador para PCs </li></ul><ul><li>( personal computers )  </li></ul><u...
<ul><li>O resultado é que este processador será basicamente inútil, mesmo com tantas vantagens </li></ul><ul><li>É claro q...
<ul><li>O tipo de aplicação é determinante na escolha de cada detalhe da máquina que será desenvolvida para aquela aplicaç...
<ul><li>Vamos entender agora que critérios o projetista deveria levar em conta, na questão das instruções e seus formatos,...
<ul><li>Além disso, cada memória </li></ul><ul><li>possui uma taxa de transfe- </li></ul><ul><li>rência de bits por segund...
<ul><li>Para uma máquina capaz de realizar 2ⁿ operações, é impossível que as instruções tenham menos de n bits de largura,...
<ul><li>Para uma máquina capaz de realizar 2ⁿ operações, é impossível que as instruções tenham menos de n bits de largura,...
<ul><li>Para uma máquina capaz de realizar 2ⁿ operações, é impossível que as instruções tenham menos de n bits de largura,...
<ul><li>Para uma máquina capaz de realizar 2ⁿ operações, é impossível que as instruções tenham menos de n bits de largura,...
<ul><li>Para uma máquina capaz de realizar 2ⁿ operações, é impossível que as instruções tenham menos de n bits de largura,...
<ul><li>Para uma máquina capaz de realizar 2ⁿ operações, é impossível que as instruções tenham menos de n bits de largura,...
<ul><li>Instruções fazem parte de  palavras  na memória </li></ul><ul><li>Ao falar de blocos e cache, falamos de palavras ...
<ul><li>Dito isso, podemos falar sobre outro aspecto importante a ser notado: é bastante conveniente associar o tamanho de...
<ul><li>Imagine uma máquina em que cada caracter seja representado por 6 bits e a cada palavra tenha um comprimento de 28 ...
<ul><li>Se fizermos o tamanho de cada palavra ser igual a 24 (múltiplo de 6), os caracteres se encaixariam perfeitamente e...
<ul><li>Supondo uma máquina cujo código do caracter seja composto por 8 bits, e uma memória que precise armazenar 2¹⁶ cara...
<ul><li>Com isso, nossa instrução ficaria assim: </li></ul><ul><li>Apenas essa instrução ocuparia 50 bits, isto é, 5 palav...
<ul><li>Então, outra opção é organizar a memória em palavras mais longas. Se utilizássemos, por exemplo, palavras de 32 bi...
<ul><li>Vamos considerar agora apenas máquinas nas quais o tamanho das instruções não varia </li></ul><ul><li>Uma instruçã...
<ul><li>E se uma máquina tivesse 65 (2⁶ + 1) operações diferentes e uma memória com 512 (2⁹) células? </li></ul><ul><li>A ...
<ul><li>Através da técnica conhecida como  expansão de código de operação , é possível representar as 65 operações em 15 b...
<ul><li>Dessa forma, instruções começadas em 11110000 e 11110001 por exemplo, passam a representar 2 operações </li></ul><...
<ul><li>Repare que as instruções que não começam por 1111 possuem 4 bits de opcode. Já as demais possuem 8, e nenhuma dela...
<ul><li>A classificação é bastante simples e é feita de acordo com a forma como cada instrução se refere ao(s) seu(s) oper...
<ul><li>Um método de endereçamento bem parecido com o anterior é o  endereçamento de registrador , no qual a instrução for...
<ul><li>O método de  indexação  auxilia em operações sobre estruturas de dados armazenados sequencialmente na memória </li...
<ul><ul><li>Generalizando, pode-se dizer que o valor na posição X + n é copiado para o valor Y + n, onde n é o valor do re...
<ul><ul><li>Generalizando, pode-se dizer que o valor na posição X + n é copiado para o valor Y + n, onde n é o valor do re...
<ul><ul><li>Generalizando, pode-se dizer que o valor na posição X + n é copiado para o valor Y + n, onde n é o valor do re...
<ul><ul><li>Generalizando, pode-se dizer que o valor na posição X + n é copiado para o valor Y + n, onde n é o valor do re...
<ul><li>Finalmente, no  endereçamento de pilha , a instrução fornece apenas a operação a ser feita. Seu opcode já irá espe...
<ul><li>Finalmente, no  endereçamento de pilha , a instrução fornece apenas a operação a ser feita. Seu opcode já irá espe...
<ul><li>Finalmente, no  endereçamento de pilha , a instrução fornece apenas a operação a ser feita. Seu opcode já irá espe...
<ul><li>Finalmente, no  endereçamento de pilha , a instrução fornece apenas a operação a ser feita. Seu opcode já irá espe...
<ul><li>Outra classificação possível para instruções é quanto ao seu  tipo , o qual indica superficialmente sobre o que a ...
<ul><li>Já as instruções com  operações monádicas  utilizam apenas um operando para produzir um resultado. É o caso da ope...
<ul><li>Instruções de  controle de loop  não haviam sido vistas até agora, até por serem bem particulares, mas servem basi...
<ul><li>Instruções de  Entrada/Saída  determinam as operações de leitura e escrita </li></ul><ul><ul><li>Tais instruções c...
<ul><ul><li>O DMA frequentemente precisa interromper as atividades do processador para controlar operações de leitura e es...
<ul><ul><li>O canal passa então a interagir com a memória para buscar tudo o que é necessário para executar instruções vin...
Upcoming SlideShare
Loading in...5
×

Instrucoes

450

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
450
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Instrucoes

  1. 1. Projeto de Instruções <ul><li>Com o que vimos até aqui, não foi possível ter uma noção do quanto o formato das instruções pode variar de máquina para máquina </li></ul><ul><li>Por exemplo, o formato das instruções lidas por um processador de celular é, em geral, totalmente diferente do formato das instruções entendidas por um processador de um PC </li></ul>
  2. 2. <ul><li>Imagine que um novo </li></ul><ul><li>processador para PCs </li></ul><ul><li>( personal computers ) </li></ul><ul><li>seja lançado, e é muito </li></ul><ul><li>mais rápido e muito mais </li></ul><ul><li>barato que todos os </li></ul><ul><li>outros. Tentador, é claro </li></ul><ul><li>Porém, o novo processador possui uma linguagem diferente, isto é, entende instruções diferentes dos outros processadores </li></ul>
  3. 3. <ul><li>O resultado é que este processador será basicamente inútil, mesmo com tantas vantagens </li></ul><ul><li>É claro que é possível desenvolver um compilador que traduza programas os programas de níveis superiores para a linguagem deste novo processador, mas isto não é suficiente </li></ul><ul><li>Quando instalamos softwares em nosso computador, estamos lidando apenas com o executável gerado por algum programa </li></ul><ul><li>Isto quer dizer que esses softwares já foram compilados anteriormente, de acordo com a linguagem dos processadores antigos. Logo, nada rodará no PC que utilizar o novo processador </li></ul>
  4. 4. <ul><li>O tipo de aplicação é determinante na escolha de cada detalhe da máquina que será desenvolvida para aquela aplicação </li></ul><ul><li>Em aplicações onde o desempenho é fundamental, o projetista escolherá as opções que tornam o processamento mais ágil, sem se importar muito com o custo (ex.: sistemas da NASA, supercomputadores) </li></ul><ul><li>Já em outras, a prioridade é minimizar o custo. Para essas, o projetista escolherá as opções que barateiam a máquina (ex.: celulares) </li></ul>
  5. 5. <ul><li>Vamos entender agora que critérios o projetista deveria levar em conta, na questão das instruções e seus formatos, caso fosse desenvolver uma nova máquina </li></ul><ul><li>Primeiramente, instruções curtas são mais vantajosas que as longas, por ocuparem menos espaço na memória </li></ul>h w h w/2 h.w bits h.w/2 bits
  6. 6. <ul><li>Além disso, cada memória </li></ul><ul><li>possui uma taxa de transfe- </li></ul><ul><li>rência de bits por segundo </li></ul><ul><li>Sendo assim, quanto menos </li></ul><ul><li>bits uma instrução tiver, mais instruções poderão ser executadas a cada segundo </li></ul><ul><li>Isto dá ainda mais importância à atenção que se deve ter com a largura das instruções </li></ul><ul><li>Deve-se ter, porém, a mesma atenção para não diminuir demais a largura da instrução a ponto de não ser mais possível representar todas as operações que a máquina pode realizar </li></ul>
  7. 7. <ul><li>Para uma máquina capaz de realizar 2ⁿ operações, é impossível que as instruções tenham menos de n bits de largura, já que dessa forma não seria possível ter um opcode diferente para cada operação </li></ul><ul><li>Mesmo que as instruções não tenham operandos, como representar 8 operações com instruções de 2 bits de largura? </li></ul>
  8. 8. <ul><li>Para uma máquina capaz de realizar 2ⁿ operações, é impossível que as instruções tenham menos de n bits de largura, já que dessa forma não seria possível ter um opcode diferente para cada operação </li></ul><ul><li>Mesmo que as instruções não tenham operandos, como representar 8 operações com instruções de 2 bits de largura? </li></ul>operação 1 00
  9. 9. <ul><li>Para uma máquina capaz de realizar 2ⁿ operações, é impossível que as instruções tenham menos de n bits de largura, já que dessa forma não seria possível ter um opcode diferente para cada operação </li></ul><ul><li>Mesmo que as instruções não tenham operandos, como representar 8 operações com instruções de 2 bits de largura? </li></ul>operação 1 operação 2 00 01
  10. 10. <ul><li>Para uma máquina capaz de realizar 2ⁿ operações, é impossível que as instruções tenham menos de n bits de largura, já que dessa forma não seria possível ter um opcode diferente para cada operação </li></ul><ul><li>Mesmo que as instruções não tenham operandos, como representar 8 operações com instruções de 2 bits de largura? </li></ul>operação 1 operação 2 operação 3 00 01 10
  11. 11. <ul><li>Para uma máquina capaz de realizar 2ⁿ operações, é impossível que as instruções tenham menos de n bits de largura, já que dessa forma não seria possível ter um opcode diferente para cada operação </li></ul><ul><li>Mesmo que as instruções não tenham operandos, como representar 8 operações com instruções de 2 bits de largura? </li></ul>operação 1 operação 2 operação 3 operação 4 00 01 10 11
  12. 12. <ul><li>Para uma máquina capaz de realizar 2ⁿ operações, é impossível que as instruções tenham menos de n bits de largura, já que dessa forma não seria possível ter um opcode diferente para cada operação </li></ul><ul><li>Mesmo que as instruções não tenham operandos, como representar 8 operações com instruções de 2 bits de largura? </li></ul>operação 1 operação 2 operação 3 operação 4 operações 5 em diante 00 01 10 11
  13. 13. <ul><li>Instruções fazem parte de palavras na memória </li></ul><ul><li>Ao falar de blocos e cache, falamos de palavras de forma superficial, como se fossem o mesmo que instruções. Mas na verdade, uma palavra é formada por uma ou mais instruções na memória </li></ul><ul><li>Palavras possuem tamanho fixo, pois ficam armazenadas em células da memória e estas possuem tamanho único </li></ul><ul><li>Entretanto, é possível que o tamanho das instruções varie. Dessa forma, cada palavra pode armazenar um número diferente de instruções </li></ul>
  14. 14. <ul><li>Dito isso, podemos falar sobre outro aspecto importante a ser notado: é bastante conveniente associar o tamanho de uma palavra da máquina ao código do caracter </li></ul><ul><li>Um caracter é definido por uma sequência de bits, que constituem esse código </li></ul><ul><li>Na computação em geral, é frequente a necessidade de manipular sequências de caracteres </li></ul><ul><li>Se o tamanho de cada palavra for múltiplo do tamanho do código do caracter, asseguramos que não haverá desperdício de bits quando se tratar de uma sequência de caracteres </li></ul>
  15. 15. <ul><li>Imagine uma máquina em que cada caracter seja representado por 6 bits e a cada palavra tenha um comprimento de 28 bits </li></ul><ul><li>A palavra “inconstitucional” ficaria armazenada na memória da seguinte forma (simplificada): </li></ul><ul><li>Repare que foram desperdiçados 4 bits de cada célula de memória, totalizando 16 bits perdidos </li></ul>6 12 18 24 28 i n c o n s t i t u c i o n a l bits inúteis bits inúteis bits inúteis bits inúteis
  16. 16. <ul><li>Se fizermos o tamanho de cada palavra ser igual a 24 (múltiplo de 6), os caracteres se encaixariam perfeitamente e não haveria mais bits inúteis </li></ul><ul><li>Poderíamos também guardar partes do código de um caracter em palavras diferentes, mas isso aumentaria desnecessariamente o número de acessos </li></ul><ul><li>Por último, o tamanho de cada instrução depende também da forma como a memória é endereçada. Este aspecto está diretamente relacionado ao comprimento de cada palavra </li></ul>
  17. 17. <ul><li>Supondo uma máquina cujo código do caracter seja composto por 8 bits, e uma memória que precise armazenar 2¹⁶ caracteres </li></ul><ul><li>É possível fazer com que cada palavra tenha 8 bits, e desta forma cada célula de memória armazenaria 1 caracter. Nesse caso, seriam necessários 16 bits para indicar um endereço dessa memória </li></ul><ul><li>Agora suponha que uma instrução dessa máquina possui 8 bits reservados para opcode </li></ul><ul><li>Queremos comparar os caracteres que estão nos endereços 0 e 1 da memória, e o opcode da operação de comparação é 11111111 </li></ul>
  18. 18. <ul><li>Com isso, nossa instrução ficaria assim: </li></ul><ul><li>Apenas essa instrução ocuparia 50 bits, isto é, 5 palavras! </li></ul><ul><li>Em algumas máquinas, o tamanho das instruções é variável ao longo da memória </li></ul><ul><li>É importante ressaltar que, da mesma forma que uma palavra pode conter várias instruções, uma instrução pode ocupar várias palavras caso o tamanho das instruções varie na memória </li></ul>1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 opcode (8 bits) endereço do 1º caracter (16 bits) endereço do 2º caracter (16 bits)
  19. 19. <ul><li>Então, outra opção é organizar a memória em palavras mais longas. Se utilizássemos, por exemplo, palavras de 32 bits ao invés de 8, reduziríamos os bits de endereço de 2¹⁶ para 2¹⁴ (igual a (2¹⁶)/4, já que 32 = 8 x 4) </li></ul><ul><li>O revés disso seria a necessidade de instruções adicionais para extrair o caracter desejado de uma palavra, que agora não contém aquele caracter apenas </li></ul>char char char char char char char char char char char char char char char 0 1 2 0 1 2 caracter é localizável apenas pelo endereço necessárias mais instruções para localizar um caracter entre os 4 armazenados por uma palavra
  20. 20. <ul><li>Vamos considerar agora apenas máquinas nas quais o tamanho das instruções não varia </li></ul><ul><li>Uma instrução com n bits de opcode permite à máquina 2ⁿ operações diferentes, enquanto k bits de endereço permitem endereçar 2 k células de memória </li></ul><ul><li>Caso queiramos aumentar o número de células da memória, somos obrigados a reduzir o número de operações da máquina </li></ul><ul><li>A menor mudança que podemos fazer é acrescentar um bit de endereço, retirando um de opcode. Porém, só isso já acrescenta o dobro de endereços possíveis de serem indicados, em troca da perda de metade das possíveis operações </li></ul>
  21. 21. <ul><li>E se uma máquina tivesse 65 (2⁶ + 1) operações diferentes e uma memória com 512 (2⁹) células? </li></ul><ul><li>A máquina teria que ter no mínimo 7 bits de opcode e 9 bits de endereço, totalizando 16 bits; caso contrário, não seria possível representar todas as operações ou todos os endereços </li></ul><ul><li>Perceba que, por causa de somente uma operação, a princípio não é possível projetar a máquina com instruções de tamanho 15 </li></ul><ul><li>Memórias armazenam milhares, milhões ou até bilhões de instruções. Logo, um bit a mais ou a menos por instrução faz grande diferença </li></ul>
  22. 22. <ul><li>Através da técnica conhecida como expansão de código de operação , é possível representar as 65 operações em 15 bits, sem sacrificar os 9 bits reservados ao endereçamento </li></ul><ul><li>A técnica consiste em fazer com que “um opcode represente várias operações em vez de uma”. A definição aparece entre aspas porque, na verdade, não se trata mais de um opcode, e sim de vários, originados pela expansão de um </li></ul><ul><li>Em outras palavras, reserva-se um opcode específico (por exemplo, 1111). A instrução que tiver esses 4 bits iniciais terá então, 8 bits de opcode e não mais 4 </li></ul>
  23. 23. <ul><li>Dessa forma, instruções começadas em 11110000 e 11110001 por exemplo, passam a representar 2 operações </li></ul><ul><li>Naturalmente, esses 2 “novos” opcodes não podem representar operações que envolvem endereços da memória, já que não há mais espaço para indicá-los (restaram apenas 7 bits) </li></ul><ul><li>Um exemplo prático e simples pode ser visto na primeira máquina que estudamos, na tabela de macroinstruções retirada do livro Organização Estruturada de Computadores : </li></ul>
  24. 24.
  25. 25. <ul><li>Repare que as instruções que não começam por 1111 possuem 4 bits de opcode. Já as demais possuem 8, e nenhuma delas tem endereços da memória como operando </li></ul><ul><li>Existem diversas classificações que podemos fazer com as instruções, e uma delas é relativa ao modo de endereçamento </li></ul><ul><li>Mas precisamos passar para um conceito mais geral de “endereço”. Não mais se tratará da memória principal apenas, mas de qualquer local onde instruções e/ou dados podem ser armazenados. Nesta definição, incluem-se os registradores da CPU </li></ul>
  26. 26. <ul><li>A classificação é bastante simples e é feita de acordo com a forma como cada instrução se refere ao(s) seu(s) operando(s) </li></ul><ul><li>Suponhamos uma instrução que faz o acumulador (registrador especial da CPU, já visto anteriormente) receber o seu próprio valor somado a 5, isto é, ac ← ac + 5 </li></ul><ul><li>No endereçamento imediato , a instrução explicita claramente que é o valor 5 a ser somado com o valor do acumulador </li></ul><ul><li>No endereçamento direto , não é 5 o valor fornecido na instrução, mas sim o endereço da memória onde aquele valor está </li></ul>
  27. 27. <ul><li>Um método de endereçamento bem parecido com o anterior é o endereçamento de registrador , no qual a instrução fornece o endereço do registrador (e não da memória) onde está o valor a ser somado </li></ul><ul><li>No endereçamento indireto , a instrução fornece um endereço da memória onde se encontra um apontador , isto é, um número que representa o endereço onde de fato está o valor a ser somado. No nosso exemplo, se o valor 5 está no endereço 10 da memória, e o número 10 está no endereço 1, o acumulador será carregado com o valor 1. Então o apontador 10 presente no endereço 1 indicará a célula onde está o valor 5, que será somado como manda a instrução </li></ul>
  28. 28. <ul><li>O método de indexação auxilia em operações sobre estruturas de dados armazenados sequencialmente na memória </li></ul><ul><ul><li>Utiliza-se um ou mais registradores, os registradores de índice , os quais possuem endereços de memória a serem acessados </li></ul></ul><ul><ul><li>Se queremos por exemplo, copiar o conteúdo de um vetor que começa na posição X para outro na posição Y, uma instrução pode indicar os endereços X e Y da memória e inicializar o registrador de índice com o valor 0. Desta forma, o valor contido em X + 0 será copiado para Y + 0 </li></ul></ul><ul><ul><li>Depois, incrementa-se o registrador de índice até a última posição dos vetores. Assim, o valor em X + 1 será copiado para Y + 1, o valor em X + 2 será copiado para Y + 2, e assim por diante </li></ul></ul>
  29. 29. <ul><ul><li>Generalizando, pode-se dizer que o valor na posição X + n é copiado para o valor Y + n, onde n é o valor do registrador de índice e vai de 0 a k-1, sendo k o tamanho dos vetores </li></ul></ul><ul><ul><li>Esquematizando: </li></ul></ul>. . . . . . início do vetor 1 (endereço X) fim do vetor 1 (endereço X + k - 1) . . . registrador de índice vetor 1 vetor 2 v1 v2 vk início do vetor 2 (endereço Y) fim do vetor 2 (endereço Y + k - 1) . . . . . .
  30. 30. <ul><ul><li>Generalizando, pode-se dizer que o valor na posição X + n é copiado para o valor Y + n, onde n é o valor do registrador de índice e vai de 0 a k-1, sendo k o tamanho dos vetores </li></ul></ul><ul><ul><li>Esquematizando: </li></ul></ul>. . . . . . início do vetor 1 (endereço X) fim do vetor 1 (endereço X + k - 1) . . . registrador de índice vetor 1 vetor 2 v1 v2 vk 0 RI é inicializado com 0 início do vetor 2 (endereço Y) fim do vetor 2 (endereço Y + k - 1) o valor v1, que está em X + 0, é copiado para Y + 0 v1 . . . . . .
  31. 31. <ul><ul><li>Generalizando, pode-se dizer que o valor na posição X + n é copiado para o valor Y + n, onde n é o valor do registrador de índice e vai de 0 a k-1, sendo k o tamanho dos vetores </li></ul></ul><ul><ul><li>Esquematizando: </li></ul></ul>. . . . . . início do vetor 1 (endereço X) fim do vetor 1 (endereço X + k - 1) . . . registrador de índice vetor 1 vetor 2 v1 v2 vk 1 RI é incrementado e passa a ter o valor 1 início do vetor 2 (endereço Y) fim do vetor 2 (endereço Y + k - 1) o valor v2, que está em X + 1, é copiado para Y + 1 v1 v2 . . . . . .
  32. 32. <ul><ul><li>Generalizando, pode-se dizer que o valor na posição X + n é copiado para o valor Y + n, onde n é o valor do registrador de índice e vai de 0 a k-1, sendo k o tamanho dos vetores </li></ul></ul><ul><ul><li>Esquematizando: </li></ul></ul>. . . . . . início do vetor 1 (endereço X) fim do vetor 1 (endereço X + k - 1) . . . registrador de índice (RI) vetor 1 vetor 2 v1 v2 vk k - 1 RI é incrementado pela última vez e passa a ter o valor k - 1 início do vetor 2 (endereço Y) fim do vetor 2 (endereço Y + k - 1) o processo se repete até que vk, que está em X + k - 1, é copiado para Y + k - 1 v1 v2 vk . . . . . .
  33. 33. <ul><li>Finalmente, no endereçamento de pilha , a instrução fornece apenas a operação a ser feita. Seu opcode já irá especificar que os operandos são os dois presentes no topo de uma pilha. Estes são retirados e a operação fornecida é executada sobre eles, e o resutado é colocado de volta na pilha </li></ul>
  34. 34. <ul><li>Finalmente, no endereçamento de pilha , a instrução fornece apenas a operação a ser feita. Seu opcode já irá especificar que os operandos são os dois presentes no topo de uma pilha. Estes são retirados e a operação fornecida é executada sobre eles, e o resutado é colocado de volta na pilha </li></ul>3 5 . . . . . stack pointer
  35. 35. <ul><li>Finalmente, no endereçamento de pilha , a instrução fornece apenas a operação a ser feita. Seu opcode já irá especificar que os operandos são os dois presentes no topo de uma pilha. Estes são retirados e a operação fornecida é executada sobre eles, e o resutado é colocado de volta na pilha </li></ul>3 5 . . . . . stack pointer . . . . . stack pointer 3 + 5 = 8
  36. 36. <ul><li>Finalmente, no endereçamento de pilha , a instrução fornece apenas a operação a ser feita. Seu opcode já irá especificar que os operandos são os dois presentes no topo de uma pilha. Estes são retirados e a operação fornecida é executada sobre eles, e o resutado é colocado de volta na pilha </li></ul>3 5 . . . . . stack pointer . . . . . stack pointer 3 + 5 = 8 8 . . . . . stack pointer
  37. 37. <ul><li>Outra classificação possível para instruções é quanto ao seu tipo , o qual indica superficialmente sobre o que a instrução é responsável em termos de execução </li></ul><ul><li>Instruções de transferência de dados servem para copiar dados não só de um endereço para o outro na memória, mas também para registradores e pilhas, por exemplo </li></ul><ul><li>Instruções que utilizam operações diáticas são aquelas que combinam dois operandos com a finalidade de produzir um resultado. Exemplos comuns são instruções de soma, subtração, multiplicação, divisão e operações booleanas </li></ul>
  38. 38. <ul><li>Já as instruções com operações monádicas utilizam apenas um operando para produzir um resultado. É o caso da operação booleana de negação e do deslocamento de bits, entre outros </li></ul><ul><li>Instruções de comparação e desvios condicionais também são frequentemente utilizadas e sua classificação é auto explicativa: testam valores e operam desvios caso os valores atendam uma determinada condição </li></ul><ul><li>Chamadas de procedimentos são instruções que iniciam a execução de um grupo de instruções (por exemplo, funções) dentro de um programa. Como vimos há alguns (muitos) slides atrás, a chamada de uma função geralmente invoca a criação de uma pilha, tarefa que cabe às chamadas de procedimentos </li></ul>
  39. 39. <ul><li>Instruções de controle de loop não haviam sido vistas até agora, até por serem bem particulares, mas servem basicamente para controlar iterações de uma forma menos “manual” </li></ul><ul><ul><li>Tínhamos uma instrução para incrementar uma variável que controlava o loop, e depois outra para testar esta variável e executar um desvio se preciso, sendo que ambas eram processada a cada iteração </li></ul></ul><ul><ul><li>Uma instrução de controle de loop, na única vez em que é processada, inicia um contador e especifica uma condição. O contador é testado a partir desta condição, e quando a condição é satisfeita, o loop é encerrado. Seja x o número de iterações, deixamos de processar 2x instruções para processar apenas uma </li></ul></ul>
  40. 40. <ul><li>Instruções de Entrada/Saída determinam as operações de leitura e escrita </li></ul><ul><ul><li>Tais instruções contam com um DMA ( Direct Access Memory ou Acesso Direto à Memória), que controla o fluxo de dados entre a memória principal e softwares que estão sendo executados </li></ul></ul><ul><ul><li>O DMA possui 4 registradores especiais, detalhados no seguinte esquema: </li></ul></ul>Endereço Contador Dispositivo Direção armazena o endereço da memória a ser lido/escrito indica quantas palavras devem ser transferidas indica o número do dispositivo de E/S a ser usado armazena 0 ou 1, para informar se a operação será de leitura ou escrita
  41. 41. <ul><ul><li>O DMA frequentemente precisa interromper as atividades do processador para controlar operações de leitura e escrita, já que dispostivos de E/S geralmente não toleram atrasos. Seria bem desagradável se, por exemplo, para todas as letras que digitássemos do teclado, houvesse um pequeno atraso em sua exibição na tela </li></ul></ul><ul><ul><li>Para máquinas que fazem muitas operações de E/S, é necessária uma espécie de miniprocessador adicional. São os canais de dados , que podem até receber e executar programas sem nenhuma ajuda da CPU </li></ul></ul><ul><ul><li>No momento em que a CPU ordena o início de uma operação de E/S, o canal de dados entra em ação </li></ul></ul>
  42. 42. <ul><ul><li>O canal passa então a interagir com a memória para buscar tudo o que é necessário para executar instruções vindas de algum dispositivo de E/S sem que a CPU precise “se preocupar” com isso </li></ul></ul><ul><ul><li>Ficam armazenados na memória: um endereço de buffer , que informa onde dados devem ser lidos ou escritos pelo canal; o endereço do programa de canal, onde começa o programa que contém as instruções a serem executadas pelo canal; um contador, responsável por indicar quantas palavras possui o programa de canal; e alguns bits de flag, que informam atividades como interrupção do canal após o processamento de uma determinada instrução </li></ul></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×