次の定数を使用できます。
整数には、2 進数、8 進数、10 進数、16 進数の 4 種類があります。それぞれを区別するために、整数の末尾に次の基数指定子を付加できます。
基数 | 基数指定子 | 使用する文字 |
2 | B または Y | 0,1 |
8 | O または Q | 0,1,2,3,4,5,6,7 |
10 | D | 0,1,2,3,4,5,6,7,8,9 |
16 | H または R | 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F |
基数指定子は大文字でも小文字でもかまいません。基数指定子を省略すると、デフォルトの基数が使用されます。通常のデフォルトの基数は 10 ですが、.RADIX 文で変更できます。
2 整数は 0 と 1、8 進数は 0 から 7 を使って表現します。16 進数の場合は、数値の 0 から 9 に加えて、アルファベットの A から F を使用します。a から f の小文字も使用できます。ただし、数値をアルファベットで始めることはできません。アルファベットで始まる 16 進数は、「0F2h」のように先頭に 0 を付けて表記します。また、LASM では、C 言語形式で先頭に 0x または 0X を付けて 16 進数を表すこともできます(たとえば「0xF52A」)。
このほか、2 バイト以下の文字列も整数として扱うことができます。その値は、1 バイト文字列ならその文字のキャラクタコード、2 バイト文字列なら「第 1 バイトのキャラクタコード×16+第 2 バイトのキャラクタコード」となります。
桁数が大きい場合は、見やすさのために途中に「_」を挿入できます。
例2020 を表す(デフォルトの基数が 10 のとき)
20d20 を表す
10100b20 を表す
10100y20 を表す
24o20 を表す
24q20 を表す
14h20 を表す
0A0h160 を表す(「A0h」は不可)
0xA0160 を表す(C 言語と同じ形式)〔LASM〕
'A'41h を表す
'AB'4142h を表す
1_234_5671,234,567 を表す〔LASM〕
メモ 8086 系や Z80 系のプロセッサの場合、2 バイト以上に渡る数値は、下位の桁ほど前(低位)のアドレスに格納されます。この方式はリトルエンディアンと呼ばれています。
実数は、DD、DQ、DT の各ディレクテイブのオペランドでのみ使用できます。これらのディレクテイブに指定された実数は、IEEE 形式に変換されて、オブジェクトファイルに書き込まれます。
多くのシステムでは、実数を IEEE(Institute of Electrical and Electronic Engineers)形式で格納します。高級言語で作成したプログラムのほとんどもこの形式を使用します。8087 系数値演算コプロセッサの浮動小数点数命令は、この IEEE 形式の実数を直接処理できます。
実数の構文
実数は、次のように一般的な構文で記述します。
[+|-] <整数部> . <小数部> [E [+|-] <指数部>]
整数部以降に空白やタブを挿入することはできません。「E」は小文字でもかまいません。次の表記は、いずれも実数 3.14 を表します。
3.14 0.314E1 0.314E+1 314E-2
実数の内部形式
IEEE 形式実数の仕様を説明します。IEEE 形式実数は、符号部、指数部、仮数部の 3 つの部分から構成されます。符号部は実数の正負を表し、指数部と仮数部は指数と仮数を保持しており、「2 の [指数] 乗×[仮数]」で実数の絶対値を表します。
符号
最上位の 1 ビット(最高位バイトの最上位ビット)は符号ビットです。符号ビットは、0 ならば正、1 ならば負を表します。
指数部
指数部は、「[指数の値]+[バイアス]」の値を持っています。バイアスは IEEE 形式の仕様として決まっている定数であり、指数部の最大値の約半分の値です。バイアスを使用することで、負数値の指数も表すことが可能になっています。
仮数部
仮数部は、0 以外の通常の実数においては、最上位ビットが 1 になっています。そうなるように指数値が決められるからです(正規化)。実際には、4 バイト実数と 8 バイト実数ではこの最上位ビットは省略されています。
4 バイト実数 | 8 バイト実数 | 10 バイト実数 | |
総計ビット数 | 32 | 64 | 80 |
符号ビット数 | 1 (31) | 1 (63) | 1 (79) |
指数ビット数 | 8 (30...23) | 11 (62...52) | 15 (78...64) |
仮数ビット数 | 23 (22... 0) | 52 (51... 0) | 64 (63... 0) |
バイアス値 | 7Fh | 3FFh | 3FFFh |
4 バイト実数の絶対値 =
2 ^([指数部]-7Fh)ラ(1+ [仮数部]/80,0000h)
8 バイト実数の絶対値 =
2 ^([指数部]-3FFh)ラ(1+ [仮数部]/10,0000,0000,0000h)
10 バイト実数の絶対値 =
2 ^([指数部]-3FFFh)ラ([仮数部]/8000,0000,0000,0000h)
文字列は、複数の文字を一重引用符 (') またはニ重引用符 (") で囲んで表記します。文字列を囲む文字と同じ文字を文字列中に含めるには、次の例のようにその文字を 2 つ重ねます。
"He said ""Thanks""."
文字列はおもに 2 つの場合に使用されきます。
1.DB 文のオペランドで
文字列中の各文字のキャラクタコードが、そのまま機械語コードになります。
2.整数として
上の「整数」のセクションで説明したように、2 バイト以下の文字列は、整数として使用できます。
例 'ABC' 文字列「ABC」を表します。 "ABC" 文字列「ABC」を表します。 'ABC"DEF' 文字列「ABC"DEF」を表します。 "ABC""DEF" 文字列「ABC"DEF」を表します。 'A' 文字列「A」を表します。整数 41h としても使用できます。 'AB' 文字列「AB」を表します。整数 4142h としても使用できます。
パック BCD 数というのは整数の表現形式の一種で、COBOL 言語などでよく使用されます。8086 系および Z80 系プロセッサは、このパック BCD 数を直接演算する命令を備えています。
パック BCD 数は、1 バイトを 4 ビットずつに分け、それぞれに 10 進数の 1 桁を格納します。最上位バイトの最上位ビットは符号を表します。これに対して、1 バイトに 10 進数の 1 桁を格納する形式を「アンパック BCD 数」と呼びます。
パック BCD 数は DT 文のオペランドでのみ使用できます。DT 文のオペランドで基数指定子を持たない整定数を指定すると、その数値は自動的にパック BCD 数としてコード化されます。
16 進数を使用して、実数を直接 IEEE 形式で表現できます。使用する 16 進数は整定数と同じですが、慣例として、「H」の代わりに「R」を基数指定子として使用します。
定数の種類 |
定数値 |
生成コード(左が低位アドレス) |
|
2 バイト整数 |
0 |
00 00 |
|
(DW/WORD) |
10 |
0A 00 |
|
-1 |
FF FF |
||
65535 |
FF FF |
||
'A' |
41 00 |
||
'AB' |
42 41 |
||
4 バイト整数 |
0 |
00 00 00 00 |
|
(DD/DWORD) |
10 |
0A 00 00 00 |
|
-1 |
FF FF FF FF |
||
65535 |
FF FF 00 00 |
||
4 バイト実数 |
0.0 |
00 00 00 00 |
|
(DD/DWORD) |
1.0 |
00 00 80 3F |
|
-1.0 |
00 00 80 BF |
||
2.0 |
00 00 00 40 |
||
8 バイト実数 |
0.0 |
00 00 00 00 00 00 00 00 |
|
(DQ/QWORD) |
1.0 |
00 00 00 00 00 00 F0 3F |
|
-1.0 |
00 00 00 00 00 00 F0 BF |
||
2.0 |
00 00 00 00 00 00 00 40 |
||
10 バイト |
0 |
00 00 00 00 00 00 00 00 00 00 |
|
パック BCD 数 |
1 |
01 00 00 00 00 00 00 00 00 00 |
|
(DT/TBYTE) |
-1 |
01 00 00 00 00 00 00 00 00 80 |
|
12345 |
45 23 01 00 00 00 00 00 00 00 |
||
文字列 |
'AB' |
41 42 |
|
'12345' |
31 32 33 34 35 |