# Programar em Assembly com GAS/Sistemas numéricos
## Sistema decimal

Vamos falar um pouco sobre o sistema decimal porque normalmente todos o conhecemos. Por ser o primeiro sistema de numeração que aprendemos na infância é mais fácil deixar claro com um ou dois exemplos. Então vamos lá, no sistema decimal usamos números de 0 a 9 e um sistema de base 10 por ser constituído de dez dígitos.
No sistema decimal os dígitos menos significativos são posicionados do lado direito e os de maior importância do lado esquerdo. Veja o numero 501 o dígito 5 que está do lado esquerdo é mais importante do que o dígito 1. Mas se o número do lado esquerdo for 0 o valor não muda.
Vamos examinar um exemplo:
Vamos decompor 501 multiplicando cada dígito por 10 como são números de base 10. Também vamos ordenar esse número partindo da direita para esquerda. Exemplo: 5=2, 0=1 , 1=0. E vamos colocar esses números de posições como expoentes dos nossos multiplicadores.

## Sistema binário

Agora que vimos o sistema decimal vamos complicar um pouco. De um lado uma máquina super complexa mais muito lenta para calcular "seres humanos". De um outro uma máquina capaz de executar milhões de instruções por segundo. Mais só entende duas coisas.
* Presença de energia ou 1
* Ausência de energia ou 0
Como só precisamos trabalhar com 2 dígitos, 1 e 0, usamos o sistema binário ou de base 2. Em informática 0 ou 1 são chamados de bit (binary unit) ou unidade binária.

### Binário a decimal

Vamos analisar então um byte que é igual a 8 bits.
* Byte 10010011
Para passar este valor a decimais vamos usar o mesmo algoritmo que usamos com os decimais mais agora em base 2.
Ajuda memória:

### Decimal a binário

Este método é relativamente fácil. Consiste em dividir sucessivamente o número decimal em 2. E dependendo do resultado colocar o valor par ou ímpar colocamos "1" ou "0" na coluna de binários.
Aqui tudo o que nos interessa é o resultado.
* Cada vez que o decimal for ímpar colocamos 1 do lado binário.
* Cada vez for par colocamos 0.
* Cada vez que o numero for ímpar restamos 1 para facilitar a divisão.
Passar o numero 147 decimal em binários.
Formamos o numero binário usando os dígitos da coluna "Binário" na ordem de baixo para cima.
Então um byte vai de 0 a 255 decimal .
Se você ainda não entendeu vou mostrar a divisão com um exemplo desorganizado. O número decimal é dividido em 2 e o resultado será divido novamente. O número 147 dividido 2 o resultado 73 e sobra 1. E o resultado será dividido novamente. E o resultado é constituído da mesma maneira que nos exemplos anteriores.

## Sistema hexadecimal

O sistema hexadecimal é um sistema de numeração em base 16, este sistema de numeração usa os dez algarismos indo-arábicos para os seus dez primeiros dígitos e letras de "A" a "F" para os seis outros. Um número que começa com "0x" em assembly trata-se de um número hexadecimal.

### Demostração

    0 1 2 3 7 5 6 7 8 9 A B C D E F
Cada um dos dígitos deste sistema corresponde exatamente a quatro bits F = 1111. Utilizado por primeira vez em 1956 com a máquina Bendix G-15.
O sistema hexadecimal foi comercializado por primeira vez no ano 1963 pela empresa IBM. A notação hexadecimal é mais compacta do que a notação binária, por utilizar quatro vezes menos de dígitos. Tabela de conversões:
| Binario | Hexadecimal | Decimal |
| 0000 | 0 | 0 |
| 0001 | 1 | 1 |
| 0010 | 2 | 2 |
| 0011 | 3 | 3 |
| 0100 | 4 | 4 |
| 0101 | 5 | 5 |
| 0110 | 6 | 6 |
| 0111 | 7 | 7 |
| 1000 | 8 | 8 |
| 1001 | 9 | 9 |
| 1010 | A | 10 |
| 1011 | B | 11 |
| 1100 | C | 12 |
| 1101 | D | 13 |
| 1110 | E | 14 |
| 1111 | F | 15 |

### Hexadecimal a decimal

No sistema hexadecimal em base 16 para passar a decimal usamos o mesmo princípio que vimos no primeiro exemplo com decimais. Ou seja, dando uma ordem para os números hexadecimais partindo da direita para a esquerda. E vamos colocar esses números de posições como expoentes dos nossos multiplicadores.
Vamos ver um exemplo com o numero 95 hexadecimal :

### Binário a hexadecimal

Para passar de binários a hexadecimal vamos fazer o seguinte:
* Dividir o binário em grupos de 4 bits partindo do primeiro bit do lado direito.
* E se o grupo não contem 4 dígitos completamos com zeros.
* Para formar o valor hexadecimal comparamos os grupos com a tabela.
Exemplo com o numero binário 1111011001.
1111011001=0x3D9

### Hexadecimal a binário

Para passar de hexadecimal a binário usamos o mesmo exemplo acima. Mais agora separamos o número hexadecimal e comparamos com a tabela.
Exemplo numero 9D3 Hexadecimal
Para formar o resultado alinhamos os números partindo de baixo para cima.