MikeAssembler リファレンス

対応アーキテクチャ

アーキテクチャは、疑似命令 target <アーキテクチャ名> で設定できる。

アーキテクチャ名アーキテクチャ
gmc4GMC-4
orange4ORANGE-4
mieruMIPS
td4TD4
calicoCalicoCPU
nlp16NLP-16
8080Intel 8080
z80Z80

疑似命令

疑似命令の大文字・小文字は区別しない。

疑似命令説明
org <ラベル位置> [, <配置位置>] 次に配置するデータの位置(アドレス)を設定する。
「ラベル位置」は、ラベルやアライメントに用いられる位置である。
「配置位置」は、出力データに記録する位置である。
defaultplace <ラベル位置変数>, <配置位置> org疑似命令で配置位置を省略した時の配置位置を設定する。
配置位置は、org疑似命令で設定したラベル位置を「ラベル位置変数」に代入し、式を評価した結果となる。
この疑似命令を使用していない場合、省略時の配置位置はラベル位置と同じになる。
passlimit <最大アセンブル回数> アセンブルを繰り返す最大の回数を設定する。
最初の繰り返しで設定された値のみが採用される。
ソースコード中に複数回現れてはいけない。
アセンブルを複数回繰り返すことで、使われる位置より後に定義されるラベルを反映させる。
アセンブルの繰り返しは、以下の条件のいずれかを満たすと終了する。
  • 全ラベルに対応する位置が変化しなくなる
  • 繰り返した回数がここで指定した回数に達する
  • エラーを検出する
outoption [<式> [, <式> [, ...]]] 出力形式固有のオプションを設定する。
「式」には文字列も指定できる。
align <割る数> [, <余り>] データの出力位置を0バイト以上進め、出力位置(ラベル位置)を「割る数」で割った余りが「余り」になるようにする。
「余り」を省略した場合は、0とする。
alignfill <割る数>, <埋める値> [, <余り>] 「埋める値」のバイトを0個以上出力し、出力位置(ラベル位置)を「割る数」で割った余りが「余り」になるようにする。
「余り」を省略した場合は、0とする。
space <サイズ> データの出力位置を「サイズ」バイト進める。(0バイト以上)
例えば、データを出力せずに変数の領域を確保できる。
fill <サイズ>, <埋める値> 「埋める値」のバイトを「サイズ」個出力する。
fillto <位置>, <埋める値> データの出力位置(ラベル位置)が「位置」になるまで、「埋める値」のバイトを出力する。
「位置」は現在のデータの出力位置以上でなければならない。
target <アーキテクチャ名> 使用するアーキテクチャを設定する。
アーキテクチャ名の大文字・小文字は区別しない。
endianness <エンディアン名> データ(命令を含む)を出力する際のエンディアンを指定する。
出力形式におけるエンディアン(表示上のエンディアン)には反映されない。
エンディアン名は以下のいずれかである。(大文字・小文字は区別しない)
  • little : リトルエンディアン
  • big : ビッグエンディアン
define <識別子>, <式> 「識別子」の値を「式」の計算結果とする。
「識別子」はこれまでに定義されていないものでなければならない。
(ラベルとして定義されていてもいけない)
redefine <識別子>, <式> 「識別子」の値を「式」の計算結果とする。
「識別子」はこれまでに定義されているものでなければならない。
(ラベルとしての定義は含まない)
data <式> [, <式> [, ...]]
datan <式> [, <式> [, ...]]
datab <式> [, <式> [, ...]]
dataw <式> [, <式> [, ...]]
datal <式> [, <式> [, ...]]
dataq <式> [, <式> [, ...]]
「式」の値をそれぞれのサイズの生のデータとして出力する。
「式」を複数指定した場合、左から順に出力する。
「式」の値がそれぞれのサイズで表現できる範囲を超えた場合、エラーとなる。
文字列の出力も可能である。出力サイズはそれぞれのサイズに切り上げられ、足りない部分は0で埋められる。
出力するサイズは以下の通りである。
  • datan : ニブル(4ビット) (ただしバイト単位で出力され、一部の出力形式の表示に反映される)
  • data / datab : 1バイト
  • dataw : 2バイト
  • datal : 4バイト
  • dataq : 8バイト

ここでは標準の解釈を述べる。アーキテクチャによっては特殊な解釈をする場合がある。

整数リテラル

以下の形式の整数リテラルが使用可能である。大文字・小文字は区別しない。

文字列

文字列は "" で囲んで表現する。
UTF-8でエンコードされる。
文字列に対する演算は未定義のため、エラーとなる。
以下のエスケープシーケンスが使用可能である。

文字

文字(対応する文字コードの整数)は '' で囲んで表現する。
文字列と同様のエスケープシーケンスが使用可能である。
複数文字や0文字の場合、エラーとなる。

識別子

整数リテラル・文字列・文字・演算子・空白以外のものは、識別子とみなす。
識別子の大文字・小文字は区別する。
識別子がラベルとして定義されている場合、対応する位置(ラベル位置)を表す整数となる。
識別子がdefineredefineで定義されている場合、定義された値となる。

演算子

以下の演算子が使用可能である。
優先順位は、以下の表で上のものほど高い。
同じ優先順位の二項演算子は、左から右に評価する。

項数演算子説明
単項()[]{} () は、優先度の低い演算子を先に計算するために用いる。
[] および {} の計算は未定義であり、使用するとエラーになる。
二項 ()[]{} A[B] のような形で用いる。
計算は未定義であり、使用するとエラーになる。
単項 !~+-
  • ! : オペランドが0以外なら0、0なら1とする。 (論理NOT)
  • ~ : ビットNOTを行う。
  • + : オペランドの値をそのまま返す。
  • - : 符号反転を行う。
二項 */%
  • * : 積を計算する。
  • / : 商(整数)を計算する。
  • % : 剰余を計算する。
二項 +-
  • + : 和を計算する。
  • - : 差を計算する。
二項 <<>>
  • << : 左ビットシフトを行う。
  • >> : 算術右ビットシフトを行う。
二項 & ビットANDを行う。
二項 |^
  • | : ビットORを行う。
  • ^ : ビットXORを行う。
二項 <><=>= オペランドの大小関係が以下の条件を満たせば1、満たさなければ0とする。
  • < : 左のオペランドが右のオペランド未満
  • > : 左のオペランドが右のオペランド超
  • <= : 左のオペランドが右のオペランド以下
  • >= : 左のオペランドが右のオペランド以上
二項 ==!= オペランドの関係が以下の条件を満たせば1、満たさなければ0とする。
  • == : 左のオペランドと右のオペランドが等しい
  • != : 左のオペランドと右のオペランドが等しくない
二項 && まず左のオペランドを評価する。
左のオペランドが0ならば、右のオペランドは評価せずに0とする。
左のオペランドが0以外ならば、右のオペランドを評価し、0以外なら1、0なら0とする。
二項 || まず左のオペランドを評価する。
左のオペランドが0以外ならば、右のオペランドは評価せずに1とする。
左のオペランドが0ならば、右のオペランドを評価し、0以外なら1、0なら0とする。
三項 ?: A ? B : C の形で用いる。
まずAを評価する。
0以外ならBを、0ならCを評価し、その値とする。
Aの評価結果が0以外の時Cは評価せず、0の時Bは評価しない。
A ? B : C ? D : EA ? B : (C ? D : E) と解釈する。
二項 , 計算は未定義であり、使用するとエラーになる。

戻る