Conceitos

Podemos classificar as linguagens de programação em dois grupos: aquelas consideradas de baixo nível e aquelas consideradas de alto nível.

1º. Linguagens de baixo nível.


Quando nascemos, à medida que crescemos, nossa percepção e o contato com a realidade do mundo, nos anexa às coisas como elas já foram sedimentadas na cultura de um povo. Assim também ocorre com o idioma e, de um modo geral, com algumas ciências que assimilamos em sequer darmos conta disso.


Por exemplo, quando uma criança conta para outra que possui trinta ou quarenta figurinhas, não percebe, mas está fazendo uso do sistema numérico decimal (base 10). E o sistema numérico decimal está incrustado em nosso cotidiano. Via de regra, todos os valores que usamos e todas as contas que fazemos têm esse sistema numérico como base. Por exemplo, quando escrevo 543, você entende 543 e não tem dúvidas, pois sabe o que 543 significa. Raciocinando em sistema numérico decimal, também não é difícil compreender que:


543 = (5 x 10²) + (4 x 10¹) + (3 x 10º)

pois

543 = (5 x 100) + (4 x 10) + (3 x 1)

pois

543 = 500 + 40 + 3.


Infelizmente, os sistemas computacionais não representam valores usando o sistema numérico decimal. Internamente, os computadores representam valores usando dois níveis de voltagem (normalmente 0v e +5v). Com esses dois níveis de voltagem, nós podemos representar dois valores. Por convenção, adota-se o zero e o um. Então, para todos os efeitos, os computadores só conhecem uma linguagem que é constituída por zeros e uns, ou código de máquina, mais conhecida por linguagem binária. Nesse contexto, se quisermos representar o número 543, devemos escrever:


1000011111


Qualquer quantia de dígitos binários com valor igual a zero pode anteceder um número binário sem alterar-lhe o valor. Por exemplo, podíamos representar o número 543 assim:


00000000000000000000000000000000001000011111.


Ante o exposto, não fica difícil compreender que a menor unidade de dados num computador é um dígito binário. Um dígito binário é o mesmo que um bit, abreviatura de binary digits.


Complicado? No início da era dos computadores (aqueles gigantes à válvula), os programas eram escritos basicamente em binário, mas, felizmente, longe se vão os dias em que se precisava programar diretamente em binário, embora ainda exista quem trabalhe nesta base.


O sistema numérico binário tem um modo de funcionamento semelhante ao sistema numérico decimal, porém com duas diferenças básicas:


1ª. o sistema numérico binário contém apenas os dois valores 0 e 1, em vez de 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9; e


2ª. o sistema numérico binário usa potências de 2, em vez de potências de 10.


Embora um bit seja capaz de assumir apenas dois valores (zero e um), o número de elementos que se pode representar com um único bit é infinitamente grande. Por exemplo, pode-se representar quaisquer dois valores diferentes com um único bit: falso ou verdadeiro, maior ou menor, redondo ou quadrado e assim por diante, numa lista incomensurável. Todavia, esse tipo de construção não é usual.


Um sério problema com o sistema binário é o tamanho de suas representações. Veja bem, enquanto a versão decimal de 543 contém apenas três dígitos: 5, 4 e 3, a representação binária do mesmo valor contém dez dígitos: 1000011111. Disso decorre que, ao se trabalhar com valores grandes, os números binários rapidamente se tornam difíceis de ser controlados. Embora seja possível converter binários em decimal e vice-versa, tal tarefa não é simples nem trivial. Mas é essa a linguagem que a máquina entende.


Alternativamente, tentou-se programar em hexadecimal, que pode representar dezesseis valores entre 0 e 15 decimais. Os números hexadecimais possuem duas características positivas:


1ª. sua conversão para binário é relativamente simples; e


2ª. são razoavelmente compactos.


O sistema hexadecimal é uma base de numeração que começa a ser contado no "0" e termina em "F":


0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.


O sistema hexadecimal possui uma relação simples com o sistema binário, uma vez que para cada grupo de quatro dígitos binários temos um em hexadecimal.



veja a tabela abaixo:


decimal

binário

hexadecimal

1

0001

1

2

0010

2

3

0011

3

4

0100

4

5

0101

5

6

0110

6

7

0111

7

8

1000

8

9

1001

9

10

1010

A

11

1011

B

12

1100

C

13

1101

D

14

1110

E

15

1111

F

16

0001 0000

10

17

0001 0001

11

18

0001 0010

12

19

0001 0011

13

20

0001 0100

14

21

0001 0101

15

22

0001 0110

16

23

0001 0111

17

24

0001 1000

18

25

0001 1001

19

26

0001 1010

1A

27

0001 1011

1B

28

0001 1100

1C

29

0001 1101

1D

30

0001 1110

1E

31

0001 1111

1F

32

0010 0000

20


Existem algumas convenções que devem ser adotadas para se diferenciar os sistemas numéricos:


1ª. pode-se colocar um sufixo "d" num valor decimal;


2ª. a letra "b" deve ser colocada no final de todo e qualquer valor binário. Exemplo: 1011 0001b


3ª. a letra "h" deve ser colocada ao final de todo e qualquer valor hexadecimal. Exemplo 4D5Fh;


Não há necessidade de enfatizar que a programação em hexadecimal, embora menos complexa que a binária, continuava sendo demasiadamente complicada e demorada.


Nesse contexto, surge uma nova linguagem de programação: o Assembly, uma linguagem de símbolos designados mnemónicas, que são instruções Assembly. Cada mnemónica tem a sua correspondência em um comando elementar inteligível pelo computador. Nesse tipo de programação, o programador trabalha diretamente com registradores da CPU e com a memória, entre outras coisas.


Programar em Assembly significa conversar quase que diretamente com a CPU, tal qual os sistemas binário e hexadecimal. Ou seja, nesses tipos de programação, o programa é escrito em uma linguagem muito próxima àquela que a máquina entende, e por isso são as linguagens ditas de baixo nível.


Abaixo, exemplo de instrução em Assembly:


a 100

MOV AX, 20

MOV BX, 30

ADD AX, BX

NOP


Do exemplo, AX e BX são registradores internos da CPU. O comando “a 100” determina o endereço inicial para o programa em 0100h; o programa executa o seguinte: move para o registrador AX o valor 20; move para o registrador BX o valor 30; soma o conteúdo do registrador AX com o conteúdo do registrador BX e deixa o resultado em AX; e a instrução NOP finaliza o programa.




2º. Linguagens de alto nível


Quando nos referimos às linguagens de alto nível, estamos falando daquelas que são escritas em um distanciamento relativo da linguagem máquina. Ou seja, as linguagens de alto nível são aquelas que se aproximam da linguagem humana, como a Linguagem Basic, C++, Pascal, Java etc.


Por exemplo, Para fazer uma frase aparecer na tela no DarkBASIC, basta digitar:




PRINT " Esta frase que está entre aspas será exibida na tela! "



Veja agora, a mesma frase em linguagem C:



main()

{

printf (" Esta frase que está entre aspas será exibida na tela! ");

exit (0);

}


Em Pascal:



program

begin

write (" Esta frase que está entre aspas será exibida na tela! ");

end





Visualmente, o que diferencia estas linguagens de programação daquelas ditas de baixo nível é justamente o fato de nestas linguagens podermos encontrar algum sentido naquilo que estamos lendo ou escrevendo. Um simples programa como este que foi apresentado nessas linguagens de alto nível, seria praticamente ininteligível para nós, se fosse escrito em binário.


De uma forma simplista, podemos dizer que nas linguagens de alto nível, o próprio programa tradutor (compilador ou interpretador) que usamos se encarrega de conversar com a máquina, transformando todos os comandos que inserimos no programa para uma linguagem que a máquina compreenda qual a resposta a ser dada. Ou seja, o tradutor converte o código-fonte em um código executável pela máquina.




anterior

índice

próxima


HOME || MAPA DO SITE || CURSOS || TUTORIAIS || LINKS || FORUM || CONTATO