Cadastre seu e-mail para receber as novidades desse blog. Você pode cancelar a qualquer momento.

Delivered by FeedBurner

Assista ao vídeo descritivo acima; depois clique na imagem abaixo para adquirir o seu GUIA PRÁTICO PARA PASSAR EM CONCURSO PÚBLICO EM UM ANO.

Google Website Translator

Postagem em destaque

Automação Residencial com arduíno

Já pensou em criar sua própria casa inteligente, com automações em todos os cômodos? Sem gastar muito? Sem ser um engenheiro ou algo parecid...

Pesquise nesse Blog e na WEB com o Google

sexta-feira, 18 de fevereiro de 2011

Linguagem de Máquina

Todos nós precisamos conhecer e dominar uma linguagem para que possamos nos comunicar com as outras pessoas. Essas outras pessoas também têm que conhecer e dominar a mesma linguagem que nós, no nosso caso, o Português.
Os computadores também têm a sua linguagem. Essa linguagem é universal, qualquer computador em qualquer parte do mundo só entende essa linguagem, que é a linguagem de máquina. A linguagem de máquina é constituída de códigos em base binária.
O sistema numérico binário é bastante diferente do sistema decimal que utilizamos e estamos acostumados. Ele é constituído de apenas dois dígitos, que são o 0 (zero) e o 1 (um). A linguagem que os computadores entendem é formada por códigos numéricos que utilizam esse sistema.
Nos chips de memória RAM do computador, por exemplo, existem milhões de “células” capacitivas (capacitivas significa que elas armazenam energia). Quando essas “células” estão carregadas, elas valem 1, quando não estão carregadas, elas valem 0.
Um dígito binário, 0 ou 1, é a menor unidade de informação entendida pelos computadores (na verdade é tudo que eles entendem). Esses dígitos são chamados de Bit (Binary Digit). Um conjunto de 4 bits forma um código chamado Nibble. As 16 variações de Nibbles possíveis, correspondem respectivamente aos 16 dígitos hexadecimais (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F). Por exemplo: 5 em hexadecimal corresponde a 0101 em binário.
Um conjunto de 8 bits forma um código chamado Byte. Nós sabemos que um Byte é a quantidade de memória necessária para armazenar um símbolo ou letra. Isso significa dizer que  cada letra ou símbolo é armazenado na forma de um código binário correspondente de 8 bits. São utilizados os 8 bits para codificar cada símbolo ou letra porque um código de 8 bits tem 255 variações, a quantidade de letras, símbolos e instruções da tabela ASCII atualmente utilizada pelos computadores.





Cada letra ou símbolo tem seu respectivo código ASCII, por exemplo, o código da letra E (maiúscula) é 69. Quando nós convertemos um número binário de 8 dígitos (bits) para um número do sistema decimal, percebemos que o resultado é sempre igual ou menor que 255. Esse resultado que obtemos em decimal é o código ASCII de alguma letra ou símbolo. Por exemplo: 01101010 convertido para o sistema decimal resulta em  107, 107 é o código ASCII da letra k (minúscula). Isso significa que o código binário acima é o código correspondente à letra k, ou seja, é este código que o computador armazena como a letra k, e é este código que o computador entende como a letra k. Cada letra e cada símbolo têm um código binário de 8 bits (dígitos) como o do exemplo. O que trafega pelos barramentos do computador, pela memória, pelo processador etc são sinais digitais que correspondem a zeros e uns, os dígitos do sistema binário.
Existem alguns códigos ASCII que não representam letras nem símbolos. Então o que eles representam? Esses códigos ASCII especiais convertidos em códigos binários e chegando até o processador em forma de sinais elétricos, são entendidos pelo mesmo como determinadas instruções.
Um processador consegue interpretar certas instruções e devolver resultados perfeitos, sem erros. O conjunto das principais instruções que um processador reconhece é chamado de x86. Apesar desse conjunto de instruções ter sido desenvolvido em 1978 pela Intel, é utilizado até hoje em processadores modernos como os Athlon e Pentium. O x86 também é chamado de  assembler x86, que é uma linguagem de baixo nível.
As linguagens de baixo nível são o que mais se parece com o que corre nos barramentos do computador. Os processadores possuem registradores, que são pequenas regiões de memória dentro do Die, juntas com as unidades de execução. Esses registradores possuem nomes, são como se fossem variáveis predeterminadas dentro do processador. A maioria das instruções x86 meche com esses registradores, atribuindo valores, movendo valores etc. As linguagens de baixo nível trabalham diretamente com esse conjunto de instruções x86, por exemplo: mov ax, FA85. Isso instrui o processador a carregar o registrador ax com o valor FA85. O código B8 85 FA equivale à instrução acima, isso quer dizer que o código da instrução mov ax é B8; não B8 propriamente dito, mas o código binário desses dois caracteres, ou seja, o processador entende os sinais elétricos gerados pelos códigos binários desses dois caracteres como a instrução mov ax.
Quando as instruções chegam ao processador elas vão para os decodificadores de instrução. Os decodificadores convertem as instruções x86 em outras menores e mais eficientes. O principal motivo dessa conversão é o paralelismo (execução simultânea) do processamento para ganhar velocidade. Quando as instruções menores (uops) são geradas a partir das instruções x86, elas seguem para as unidades de execução. As principais unidades de execução são: ALU e FPU.
A ALU (Unidade Lógica e Aritmética) é responsável por processar dados do tipo inteiro e operações lógicas. A FPU (Unidade de Ponto Flutuante) é responsável por executar instruções que envolvam números com ponto flutuante.. Exemplo: 1.2327 x 0.0058.
A ALU é a unidade básica e está presente desde os primeiros processadores.
Antigamente havia a possibilidade de encaixar nas placas-mãe o que é chamado de coprocessador matemático. Esse coprocessador era uma FPU externa ao processador principal. Os primeiros processadores a incorporar uma FPU foram os 386 DX (1985) e os 486 DX (1989). Foi uma verdadeira revolução, os processadores ficaram muito mais velozes do que antes, sem a FPU incorporada. Daí pra frente, a FPU tornou-se uma unidade de execução obrigatória nos processadores. Não há instruções x86 que utilizem dados com ponto flutuante, para isso foram criadas as instruções x87.
Por muitas gerações os processadores possuíram apenas ALU e FPU, mas com o tempo começaram a surgir unidades de execução especializadas. A primeira foi a MMX (MultiMedia eXtensions). As unidades MMX nada mais são do que uma ALU (sem a parte lógica) anabolizada, que consegue processar vários dados de uma só vez. Uma instrução MMX pode oferecer até quatro resultados num único ciclo de clock, quatro vezes mais volume do que uma instrução x86 equivalente.
Depois da MMX veio a 3dNow!, que permite o processamento de dados tipo ponto flutuante com precisão simples. Em seguida veio a SSE, para ajudar a MMX que não opera com ponto flutuante. A seguir veio a Enhanced 3dNow! com 45 instruções, 21 herdadas da primeira versão e 24 novas, dessas, 19 são as mesmas que constituem as MMX+ presentes nas SSE. As 5 restantes são funções especiais para DSP (Digital Signal Processing) e úteis para soft-modems, codificação de MP3 e áudio em geral.
A última unidade lançada foi a SSE2. Com 144 novas instruções que se somam as 70 originais, o Pentium 4 foi a primeira CPU a reconhecê-las.
Existem outras unidades nos processadores, porém as mais importantes foram citadas acima.

Nenhum comentário:

Postar um comentário