8086 系アセンブラでは、ラベルやオペランドのタイプ(型)が重要な役割を持っており、タイプによって生成されるコードが変化します。
データ参照のタイプ
たとえば、メモリに直接数値を書き込む mov 命令には、1 バイト、2 バイト、および 4 バイト(386 以上)を書き込む命令があります。アセンブラでこれらを区別するには、タイプを使用します。
mov byte ptr [di], 10h ; 1 バイトを書き込む
mov word ptr [di], 10h ; 2 バイトを書き込む
mov dword ptr [di], 10h ; 4 バイトを書き込む
上の「byte」や「word」がタイプです。このように PTR 演算子を使ってオペランドに直接タイプを指定できますが、ラベル参照オペランドではタイプを省略できます。その場合は、ラベルのタイプが使用されます。
lb label byte
lw label word
dw ?
mov [lb], 10h ; 1 バイトを書き込む
mov [lw], 10h ; 2 バイトを書き込む
ラベルのタイプに従って、最初の mov 命令では 1 バイト、次の mov 命令では(同じアドレスに)2 バイトを代入するコードが生成されます。
オペランドに直接指定したタイプは、ラベルのタイプよりも優先されます。
mov word ptr [lb], 10h ; 2 バイトを書き込む
mov byte ptr [lw], 10h ; 1 バイトを書き込む
2 つのオペランドのタイプが一致しないと、警告が発生します。
mov ax, [lb] ; 警告発生
mov ax, word ptr [lb] ; 警告されない
なお、データ領域を定義するときは、データ定義文を使用するのが一般的です。データ定義文でもラベルが定義されます。
vb db 10 ; vb は BYTE 型 vb2 db 10,11 ; vb2 も BYTE 型 vw dw 10 ; vw は WORD 型
コード参照のタイプ
次はコードの例です。
ln label near
lf label far
jmp ln ; 自己相対ジャンプ
jmp lf ; 絶対ジャンプ
jmp far ptr ln ; 絶対ジャンプ
ln2: ; コロンは NEAR ラベルを定義する
タイプが NEAR ならば短い自己相対ジャンプ、FAR ならば長い絶対ジャンプが生成されます。
変数のタイプ
PROC 文の引数や PROC 内 LOCAL 変数を定義するときは、指定したタイプにより、確保されるデータ領域のサイズが決まります。
次が基本的なタイプです。
| タイプ | 意味 |
| BYTE | 1 バイトデータ |
| WORD | 2 バイトデータ |
| DWORD | 4 バイトデータ |
| FWORD | 6 バイトデータ |
| QWORD | 8 バイトデータ |
| TBYTE | 10 バイトデータ |
| NEAR | 相対オフセットで参照されるコード |
| FAR | セグメント+オフセットで参照されるコード |
符号付きの基本タイプ
符号付きタイプもありますが、通常、符号付きかどうかは意味を持ちません。たとえば、BYTE と SBYTE のどちらを使用しても、多くの場合は同じ結果になります。
ただし、.IF などの構造化ブロック記述文のパラメータについては、タイプの符号の有無によって異なるコードが生成されます。
| タイプ | 意味 |
| SBYTE | 1 バイト符号付きデータ |
| SWORD | 2 バイト符号付きデータ |
| SDWORD | 4 バイト符号付きデータ |
オフセットサイズを明示する基本タイプ
.386 以上を指定した場合は、次のタイプを使ってオフセットのサイズを明示できます。
| タイプ | 意味 |
| NEAR16 | 16 ビットの相対オフセット(.386 以上で) |
| NEAR32 | 32 ビットの相対オフセット(.386 以上で) |
| FAR16 | セグメント+16 ビットオフセット(.386 以上で) |
| FAR32 | セグメント+32 ビットオフセット(.386 以上で) |
このタイプは、メモリモデルに従って NEAR または FAR を表します。メモリモデルについては、.MODEL 文の説明を参照してください。
STRUC 文および RECORD 文で定義した構造体およびレコードの型名(タグ)も、基本タイプと同じように使用できます(PTR 演算子を除く)。
構造体型名とレコード型名をタイプとして使用した場合は、その構造体またはレコードのサイズが意味を持ちます。たとえば、全体で 2 バイトの構造体型は、WORD タイプと同じように扱われます。
例 stag struc ; サイズは 2 バイト
f1 db ?
f2 db ?
stag ends
rtag record rf1:2, rf2:6 ; サイズは 1 バイト
L1 label stag
L2 label rtag
mov [L1], 10 ; 2 バイト代入コードが生成される
mov [L2], 10 ; 1 バイト代入コードが生成される
TYPEDEF 文を使用して、独自のタイプを定義できます。