5.1.1 記述方法

アセンブリ言語文は,“シンボル”,“ニモニック”,“オペランド”,および“コメント”から構成されます。

[シンボル][:]       [ニモニック]     [オペランド], [オペランド]    ;[コメント]

 

ラベルを記述する場合は,コロン,または1つ以上の空白で区切ります。ただし,コロンか空白かはニモニックで記述する命令によります。

 

以下の箇所には,1つ以上の空白があってもなくても問題ありません。

-

シンボルとコロンの間

-

コロンとニモニックの間

-

2つ目以降のオペランドの前

-

コメントの始まりのセミコロンの前

 

以下の箇所には,1つ以上の空白が必要です。

-

ニモニックとオペランドの間

図 5.1

アセンブリ言語文の構成

 

アセンブリ言語文は,1行に1文を記述します。文の最後は改行(リターン)します。

(1)

文字セット

アセンブラがサポートするソース・プログラムで,使用できる文字は次の3つから構成されます。

(a)

言語文字

ソース上で命令を記述するために使用する文字です。

表 5.1

言語文字とその用途

文字

用途

数字

識別子,および定数の構成

英小文字(a〜z)

ニモニック,識別子,および定数の構成

英大文字(A〜Z)

ニモニック,識別子,および定数の構成

@

識別子の構成

_(アンダースコア)

識別子の構成

.(ピリオド)

識別子,および定数の構成

,(カンマ)

オペランドの区切り

:(コロン)

ラベルの区切り

;(セミコロン)

コメントの開始

*

乗算演算子

/

除算演算子

+

正符号,および加算演算子

-(ハイフン)

負符号,および減算演算子

'(シングルクォーテーション)

文字定数

<

比較演算子

>

比較演算子

( )

演算順序の指定

$

ソース・プログラム中の制御命令の前に付ける記号

相対アドレッシング開始記号

ラベルのgpオフセット参照

=

比較演算子

!

絶対アドレッシングの開始,および否定演算子

△(空白)

各欄の区切り記号

~

コンカティネート記号(マクロボディ内で使用)

&

論理積演算子

#

ラベルの絶対アドレス参照,およびコメントの開始(行頭の場合)

[ ]

インダイレクト表示記号

"(ダブルクォーテーション)

文字列定数の開始と終了

%

ラベルのepオフセット参照,および剰余演算子

<<

左論理シフト演算子

>>

右算術シフト演算子

|

論理和演算子

^

排他的論理和演算子

(b)

文字データ

文字データは,文字列定数,文字定数,および制御命令部を記述するために使用する文字です。

注意

すべての文字(漢字かなを含みます。ただし,OSによってコードは異なります)が記述可能です。

(c)

注釈(コメント)用文字

コメントを記述するために使用する文字です。

注意

文字データの文字セットと同一です。

(2)

シンボル

シンボル欄には,シンボルを記述します。シンボルとは,数値データやアドレスなどに付けた名前のことです。

シンボルを使用することにより,ソースの内容がわかりやすくなります。

(a)

シンボルの種類

シンボルは,その使用目的,定義方法によって,次に示す種類に分けられます。

シンボルの種類

使用目的

定義方法

ネーム

ソース中で,数値データやアドレスとして使用

シンボル定義疑似命令のシンボル欄に記述します。

ラベル

ソース中で,アドレス・データとして使用

シンボルのあとにコロン( : )を付けることにより定義します。

外部参照名

あるモジュールで定義されたシンボルをほかのモジュールで参照するときに使用

外部参照疑似命令のオペランド欄に記述します。

セクション名

リンク時に使用

セクション定義疑似命令のシンボル欄に定義します。

マクロ名

ソース中で,マクロ参照時に使用

マクロ疑似命令のシンボル欄に記述します。

(b)

シンボル記述上の規則

シンボルは,次の規則に基づいて記述します。

-

シンボルは,英数字,および英字相当文字(@,_,.)で構成します。
ただし,先頭文字に数字(0〜9)は使用できません。

-

シンボルの最大文字数は4,294,967,294(=0xFFFFFFFE)(理論値)です。ただし,実際には利用可能なメモリ量に依存します。

-

シンボルとして,予約語は使用できません。
予約語については,「5.5 予 約 語」を参照してください。

-

同一シンボルを二度以上定義することはできません。
ただし,.set疑似命令で定義したシンボルは,.set疑似命令で再定義することができます。

-

アセンブラは,シンボルの大文字/小文字を区別します。

-

シンボル欄にラベルを記述する場合は,ラベルの直後にコロン( : )を記述します。

 

正しいシンボルの例を以下に示します。

CODE01  .cseg               ; “CODE01”はセクション名
VAR01   .set    0x10        ; “VAR01”はネーム
LAB01:  .dw     0           ; “LAB01”はラベル

誤ったシンボルの例を以下に示します。

1ABC    .set    0x3         ; 先頭文字に数字は使用できません。
LAB     mov     1, r10      ; “LAB”ラベルです。ニモニック欄とコロン( : )で区切ります。
FLAG:   .set    0x10        ; シンボルにはコロン( : )が必要ありません。

シンボルのみからなる文の例を以下に示します。

ABCD:                       ; ABCDがラベルとして定義されます。

(3)

ニモニック

ニモニック欄には,インストラクションのニモニック,疑似命令,およびマクロ参照を記述します。

オペランドの必要なインストラクションや疑似命令,マクロ参照の場合,ニモニック欄とオペランド欄を1つ以上の空白,またはTABで区切ります。

正しい例を以下に示します。

mov     1, r10

誤った例を以下に示します。

mov1, r10       ; ニモニック欄とオペランド欄の間に,空白がありません。
mo v    1, r10  ; ニモニック中に空白があります。
MOVE            ; ニモニック欄に記述できない命令です。

(4)

オペランド

オペランド欄には,インストラクションや疑似命令,およびマクロ参照の実行に必要なデータ(オペランド)を記述します。

各インストラクションや疑似命令により,オペランドを必要としないものや,複数のオペランドを必要とするものがあります。

2個以上のオペランドを記述する場合には,各オペランドをコンマ( , )で区切ります。

オペランド欄に記述できるものは,次のものです。

-

定数(数値定数,文字定数,文字列定数)

-

 

なお,インストラクション・セットにおけるオペランドの表現形式と記述方法については,開発対象となる各デバイスのユーザーズ・マニュアルを参照してください。

以降に,オペランド欄に記述可能な各項目について説明します。

(a)

定数

定数は,それ自身で定まる値を持つもので,イミーディエト・データとも呼びます。

定数には,数値定数と文字定数,文字列定数があります。

<1>

数値定数

整定数として,2進数,8進数,10進数,16進数が記述可能です。
整定数,つまり,整数の定数は,32ビット幅をもつ定数です。負の数は2の補数で表現されます。32ビットで表現することのできる値を越える整数値が指定された場合,アセンブラはその整数値の下位32ビットの値を用いて処理を続行します(メッセージ等は出力しません)。

整定数の種類

表記方法

表記例

2進数

数値の前に“0b”または“0B”を記述

0b1101

8進数

数値の前に“0”を記述

074

10進数

数値をそのまま記述

128

16進数

数値の前に“0x”または“0X”を記述

0xA6

浮動小数点定数は次に示す要素で構成されます。指数値,および仮数値は10進定数で指定します。ただし,指数表現を用いない場合(3),(4),(5)は使用しません。

(1)仮数部の符号(+は省略可)

(2)仮数部

(3)指数部を示す’e’,または’E’

(4)指数部の符号(+は省略可)

(5)指数部

123.4
-100.
10e-2
-100.2E+5

仮数値の頭に”0f”,または”0F”を置くことにより浮動小数点定数であることを示すこともできます。

0f10

<2>

文字定数

文字定数は,1つの文字をシングル・クォート“’”で囲むことにより構成され,囲まれた文字の値を示します。

以下に示したエスケープ・シーケンスを“’”と“’”の間に指定した場合,1つの文字を表すものとして扱われます。

'A'             ; 0x00000041
' '             ; 0x00000020(空白1個)

文字定数を指定した場合,その文字定数の値を持つ整定数を指定したものとみなして扱われます。

表 5.2

エスケープ・シーケンスの値と意味

エスケープ・シーケンス

意味

\0

0x00

null文字

\a

0x07

アラート

\b

0x08

バックスペース

\f

0x0C

フォーム・フィード

\n

0x0A

改行

\r

0x0D

キャリッジ・リターン

\t

0x09

水平タブ

\v

0x0B

垂直タブ

\\

0x5C

バックスラッシュ

\'

0x27

シングル・クォート

\"

0x22

ダブル・クォート

\?

0x3F

疑問符

\ddd

0〜0377

3桁までの8進数(0 ≦ d ≦ 7)

\xhh

0〜0xFF

2桁までの16進数

(0 ≦ h ≦ 9,a ≦h ≦ f,またはA ≦h ≦ F)

“\377”を越える指定の場合,そのエスケープ・シーケンスの値は,下位1バイト分のみの値となります。0377より大きい値にはなりません。たとえば,“\777”の値は0377です。

<3>

文字列定数

文字列定数は,「(1) 文字セット」で示した文字を引用符( " )で囲んだものです。
例を以下に示します。

"ab"            ; 0x6162
"A"             ; 0x41
" "             ; 0x20(空白1個)

(b)

レジスタ名

オペランド欄に記述可能なレジスタとして,次のものがあります。

-

r0,zero,r1,r2,hp,r3,sp,r4,gp,r5,tp,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23,r24,r25,r26,r27,r28,r29,r30,ep,r31,lp

 

r0とzero(ゼロ・レジスタ),r2とhp(ハンドラ・スタック・ポインタ),r3とsp(スタック・ポインタ),r4とgp(グローバル・ポインタ),r5とtp(テキスト・ポインタ),r30とep(エレメント・ポインタ),r31とlp(リンク・ポインタ) は同じレジスタを示します。

備考

PSW, およびシステム・レジスタは,ldsr/stsr命令において,番号で指定します。なお,本アセンブラでは,PCをオペランドに指定する方法はありません。

(c)

シンボル

アセンブラでは,命令,および疑似命令のオペランド指定で使用可能な絶対値式,または相対値式の構成要素として,シンボルを用いることができます。

(d)

式は,定数,またはシンボルを演算子で結合したものです。

インストラクションのオペランドとして数値表現可能なところに記述することができます。

式と演算子については,「5.1.2 式と演算子」を参照してください。

例を以下に示します。

TEN     .set    0x10
        mov     TEN - 0x05, r10

この記述例では,“TEN - 0x05”が式です。

この式は,シンボルと数値定数が-(マイナス)演算子で結合されています。式の値は“0x0B”です。

したがって,この記述は“mov 0x0B, r10”と書き換えることが可能です。

(5)

コメント

コメント欄には,セミコロン( ; )のあとにコメント(注釈)を記述します。

コメント欄は,セミコロンからその行の改行コード,またはEOFまでです。

コメントを記述することにより,理解しやすいソースを作成できます。

コメント欄の記述は,機械語変換というアセンブル処理の対象とはならず,そのままアセンブル・リストに出力されます。

記述可能な文字は,「(1) 文字セット」に示すものです。