Clique sobre os objetivos listados abaixo para navegar até o conteúdo desejado.

  1. Tipos de dados
  2. Tipos derivados
  3. Sinalização

Por ser um processador de 16-bits, o tamanho máximo de dados processados, em registrador ou memória, possui a mesmo quantidade em bits, exceto pelas instruções de divisão e multiplicação que utilizam dois registradores de 16-bits como resultado.

O tamanho dos registradores e seus respectivos tamanho em bits podem ser revistos na tabela abaixo:

Tab. 1: Registradores de uso geral
8-bits 8-bits 16-Bits
AH AL AX
BH BL BX
CH CL CX
DH DL DX

Para o 8086, e outros processadores, um valor 16-bits é chamado de word. Um valor de 32-bits é chamado de doubleword.

Para trabalhar com nibbles, valores de 4-bits, é necessário utilizar instrução de deslocamento, rotação e outras instruções do mesmo grupo.

Abaixo uma representação simples dos tamanhos de dados mencionados acima para valores em memória. Os valores separados por (...), representam as suas respectivas posições de bits.

Byte
Byte 0
7...0
Word
Byte 1 Byte 0
7...0 15...8
Doubleword
Word 1 Word 0
15...0 31...25

Como o barramento de endereços para acessar dados na memória do 8086 é de 20-bits, os endereços de memória formados com os registradores de segmento, indexadores e ponteiros são armazenados como doublewords.

Tab.2: Endereço
SEGMENTO : OFFSET
Word 0 Word 1

O 8086 possui algumas instruções que trabalham com valores 32-Bits, porém, essas apenas armazenam dados. Operações aritméticas em 32-bits, por exemplo, devem ser realizadas por meio de o tipo de dado word.

Quando operações 8-bits são realizadas, o byte mais significativo de um dos registradores AX~DX não são afetados, exceto quando instruções aritméticas são utilizadas.

Os valores 16-bits ou words, em memória, são armazenados utilizando o forma de armazenamento Little Endian. Esse forma será visto mais adiante.

O tipo de dado BCD(Binary Coded Decimal) é suportado pelo 8086 em instruções de ajustes do acumulador após operações aritméticas.

As operações em 32-Bits estão disponíveis apenas nos processadores 80386, 80486 ou superiores.

A partir do dados de tamanho 8, 16-bits e 32-bits, os seguintes tipos de dados derivados podem ser declarados e utilizados de acordo com a necessidade do software:

Tipo 3: array de bytes
RAM 0100 0101 0102 (...)
Valor 00h 01h 10h aah
Tipo 4: string ascii
0 1 2 (...)
'o' 'l' 'a' (...)
Tipo 5: array de words
RAM 0100 0102 (...)
Valor 3412h 7856h (...)
Tipo 6: Array de ponteiro
RAM 0100 0104 (...)
Valor FFFF0000h FFFF1234h (...)

Os dados mostrados acima são declarados no código utilizando diretivas específicas fornecidas pelo assembler em que informamos na linha de código qual o tamanho do dado que deve ser usado.

Tipos de dados mais complexos como structs e strings multibytes são declarados utilizando como base os tipos de dados vistos fundamentais byte e word.

Tipo 7: Struct
RAM 0000 0001-2 0003-5 (...)
Valor FFh 1234Fh 'olá' (...)

Assim como em vários processadores, em alguns momentos precisamos manipular dados sinalizados nos registradores AX~DX ou memória. O bit 7 para o tipo 8-bits, ou bit 15 para o tipo 16-bits, são os locais onde o bit que indica a sinalização é armazenado.

Tab. 3: Byte
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
1 - - - - - - -
Tab. 4: Word
Bit 15 Bit 14 Bit 13 ... Bit 3 Bit 2 Bit 1 Bit 0
1 - - ... - - - -
Ex:
$80 / -128 / 10000000b
$7F / 127 / 01111111b
Onde:
b: binário
$: hexadecimal
-: operador unário

Um valor armazenado no registrador AL que possui o bit 7 com valor 1, será visto como um valor negativo. Quando o bit 7 possuir o valor 0, será visto como um valor positivo. Essa situação pode ser checada pela flag Sign.

Os valores sinalizados são utilizados para recuperar valores de memória ou desvio de fluxo de execução por intermédio dos modos de endereçamento.

As instruções de rotação e deslocamento ou semelhantes, manipulam o bit mais significativo de bytes e words contidos em registradores e memória.

Os registradores de segmentos não utilizam o conceito de sinalização. Como são endereços de memória, são sempre vistos como positivos. Os offsets são sinalizados.

  1. 17/04/2026 - revisão 3 - Ajustes: pontuais em sinalização; Adição: tipos derivados
  2. 21/01/2026 - revisão 2 - Adição: info. sobre outros tipos de dados array, string e struct
  3. 18/02/2025 - revisão 1 - ajustes pontuais
  4. 29/10/2024 - versão inicial