1 BIT: 0
Um bit é a mais simples porção de dados que existe. Pode valer um ou zero.
1 NIBBLE: 0000
4 BITS
O NIBBLE possui 4 bits, ou meio byte. Observe que ele pode atingir o valor máximo de 15 (1111 = 15). Esta é a base do sistema de numeração hexadecimal (base 16) o qual é utilizado pela facilidade de seu entendimento. Os números hexadecimais se utilizam dos algarismos 0 (zero) ao F e são terminados por um h para se indicar que se tratam de números de base 16. Portanto Fh = 15 decimal. Números hexadecimais que começam com uma letra recebem um 0 (zero) como prefixo.
1 BYTE 00000000
2 NIBBLES
8 BITS
Um BYTE possui 8 bits ou 2 nibbles. Um BYTE possui um valor máximo de 0FFh (255 decimal). Uma vez que um BYTE equivale a 2 nibbles a sua representação hexadecimal é feita com dois dígitos hexadecimais em seqüência, por exemplo 3Dh. O byte possui o mesmo tamanho dos registradores de 8 bits sobre os quais discutiremos mais tarde.
1 WORD 0000000000000000
2 BYTES
4 NIBBLES
16 BITS
Uma WORD (ou palavra) constitui-se de dois bytes reunidos. Uma WORD possui
o valor máximo de 0FFFFh (65.535). Uma vez que uma WORD é
igual a quatro nibbles ela é representada por quatro dígitos
hexadecimais. Ela tem o mesmo tamanho dos registradores de 16 bits.
Registradores
Registradores são o local da CPU onde um número pode ser armazenado e manipulado. Existem três tamanhos de registradores: 8 bits, 16 bits e no 386 em diante 32 bits. Há quatro tipos diferentes de registradores; registradores de uso geral, registradores de segmento, registradores de índice e registradores de pilha. Aqui estão, primeiramente, as descrições dos registradores principais. Os Registradores de pilha e de segmento serão abordados mais tarde.
Se AX contiver o número 24689 decimal:
AH | AL |
01100000 | 01110001 |
AH terá o valor 96 e AL o valor 113. Se você somar um a AL ele terá o valor 114 e AH não será modificado. SI, DI, SP e BP também podem ser utilizados como registradores de uso geral mas possuem usos mais específicos. Eles não se dividem em duas metades.
IP é um registrador de índice mas não pode ser manipulado diretamente já que ele armazena o endereço da próxima instrução a ser executada.
OFFSET = SEGMENTO * 16
SEGMENTO = OFFSET / 16 (os 4 bits inferiores são perdidos)
Um registrador contém o segmento e outro registrador contém o offset. Se você colocar os dois registradores juntos você obtém um endereço de 20 bits.
SEGMENTO | 0010010000010000---- |
OFFSET | ----0100100000100010 |
endereço de 20 bits | 00101000100100100010 |
DS armazena o Segmento e SI armazena o offset. Como ambos possuem 16 bits os endereços se sobrepõem. Desta forma o par DS:SI é usado para formar um endereço de 20 bits. O segmento está em DS e o offset está em SI. A notação padrão para um par Segmento/Offset é: SEGMENTO:OFFSET
Os registradores de segmentos são: CS, DS, ES, SS. No 386 e demais CPUs também existem o FS e o GS.
Os registradores de offset são: BX, DI, SI, BP, SP, IP. No 386 e demais CPUs, no modo protegido, QUALQUER registrador de uso geral (mas não registradores de segmento) pode ser usado como um registrador de Offset. (Exceto o IP, o qual você não pode manipular diretamente).
Se você está pensando agora que assembly deve ser realmente
difícil e que você não entendeu nada de segmentos e
offsets então não se preocupe. Eu não os entendi no
começo mas insisti e acabei descobrindo que eles não são
tão difíceis de usar na prática.
A Pilha
Como só existem seis registradores para uso com a maioria das
operações você está provavelmente
imaginando como se virar com isto. É fácil. Existe
uma coisa chamada de Pilha que é uma área de memória
na qual você pode salvar e recuperar valores.
Esta é uma área de memória parecida com uma pilha de pratos. O último que você colocar é o primeiro que pode ser retirado. Isto é chamado, as vezes, de Last On First Off (LOFO) ou Last In First Out (LIFO).
Se outra porção de dados for colocada na pilha ela cresce para baixo. Como você pode ver a pilha começa em um endereço alto e cresce em direção a endereços menores. Você precisa ter certeza de que não colocará dados em excesso na pilha ou ela transbordará.