ロード |
LDSRZR | LDSRZR SReg | 指定したスタックレジスタをゼロクリアする。 |
LDSRBT | LDSRBT SReg | 指定したスタックレジスタにtrueを代入する。 |
LDSRC1 | LDSRC4 SReg ConstantTableIndex(u16) | ConstantTableの値を指定したスタックレジスタにロード |
LDSRC2 |
LDSRC4 |
LDSRC8 |
LDSRSR | LDSRSR SReg1 SReg2 | SReg2の値をSReg1にロード |
LDSRSP | LDSRSP SReg1 StackPointerOffset(u16) | StackPointerから相対アドレス分移動したアドレスをReg1にロード |
LDSRP1 | LDSRP1 SReg1 SReg2 | SReg2の値をアドレスとみなし,SReg2が指す値を取得する |
LDSRP2 |
LDSRP4 |
LDSRP8 |
LDSROJ | LDSROJ SReg1 SReg2 | SReg2の値をobject型とみなし,SReg2が指すobjectの実体のアドレスのアドレスを取得する |
LDFRSR | LDFRSR FReg SReg | SRegの値をFRegにロード |
算術演算 |
ADDI32 | ADDI32 SReg1 SReg2 SReg3 | SReg1 = SReg2 + SReg3 |
SUBI32 | SUBI32 SReg1 SReg2 SReg3 | SReg1 = SReg2 - SReg3 |
MULS32 | MULS32 SReg1 SReg2 SReg3 | SReg1 = SReg2 * SReg3 |
DIVS32 | MULS32 SReg1 SReg2 SReg3 | SReg1 = SReg2 / SReg3 |
MODS32 | MODS32 SReg1 SReg2 SReg3 | SReg1 = SReg2 % SReg3 |
INCI32 | INCI32 SReg1 | SReg1++ |
DECI32 | DECI32 SReg1 | SReg1-- |
NEGS32 | NEGS32 SReg1 SReg2 | SReg1 = -SReg2 |
比較演算 |
LTS32 | LTS32 SReg1 SReg2 SReg3 | SReg1 = SReg2 < SReg3 |
LES32 | LES32 SReg1 SReg2 SReg3 | SReg1 = SReg2 <= SReg3 |
EQI32 | EQI32 SReg1 SReg2 SReg3 | SReg1 = SReg2 == SReg3 |
EQBOOL | EQBOOL SReg1 SReg2 SReg3 |
NEI32 | NEI32 SReg1 SReg2 SReg3 | SReg1 = SReg2 != SReg3 |
NEBOOL | NEBOOL SReg1 SReg2 SReg |
ビット演算 |
ANDI32 | ANDI32 SReg1 SReg2 SReg3 | SReg1 = SReg2 & SReg3 |
ORI32 | ORI32 SReg1 SReg2 SReg3 | SReg1 = SReg2 | SReg3 |
XORI32 | XORI32 SReg1 SReg2 SReg3 | SReg1 = SReg2 ^ SReg3 |
NTI32 | NOTI32 SReg1 SReg2 | SReg1 = ~SReg2 |
NTBOOL | NTBOOL SReg1 SReg2 | SReg1 = !SReg2 |
シフト演算 |
SLLI32 | SLLI32 SReg1 SReg2 SReg3 | SReg1 = SReg2 << SReg3 |
SLRI32 | SLRI32 SReg1 SReg2 SReg3 | SReg1 = SReg2 >> SReg3 |
分岐命令 |
JMP | JMP RelativePCPos(s16) | RelativePCPosの値をpcに足す。 1ならpcを1つ進める。(1バイト進める,ではない) |
JMPPOS | JMPPOS SReg1 RelativePCPos(s16) | SReg1がtrueならJMPする。 |
JMPNEG | JMPNEG SReg1 RelativePCPos(s16) | SReg1がfalseならJMPする。 |
関数あれこれ |
FENTER | FENTER AllocSRegNum CopyFRegNum | Function Enter. まずスタックに現在のSPR,LR,PL,PFをつみ,SPを変更する。 AllocSRegNumで指定された数,スタックレジスタを確保し,SPRに設定する。SPを変更する。 CopyFRegNumで指定された数,スタックレジスタにFRに内容をコピーする。 |
FLEAVE | FLEAVE FreeSRegNum | Function Leave. FreeSRegNumで指定された数,スタックレジスタを解放しSPを変更する。 PF,PL,LR,SPR,をスタックから取り出し設定する。SPも変更する。 PCにLRを代入する。 |
CALL | CALL SymbolTableIndex(u16) | LRにPCを代入する。 SymbolTableIndexが示す関数の先頭バイトコードをPCに設定する。 |
CALLVF | CALLVF SReg1 ConstantTableIndex(u16) | Call Virtual Function. SReg1が指すオブジェクトの仮想関数の先頭バイトコードを求め,PCに代入する。 ConstantTableIndexが示す先にはSymbolTableIndex(u16)が2つ連続して存在する。 1つめは仮想関数の親となるSSObjectTypeが格納されているSymbolTableのIndex。 2つめは仮想関数自体のSSFunctionが格納されているSymbolTableのIndex。 |
スタック |
PUSH | PUSH SReg ConstantTableIndex(u16) | ConstantTableIndexが指す定数サイズ(u32)減算し,指定のSRegに演算後のSPを設定する。 |
POP | POP ConstantTableIndex(u16) | ConstantTableIndexが指す定数サイズ(u32)分,SPを加算する。 |
オブジェクト |
OBJNEW | OBJNEW SReg SymbolIndex | Object New. 指定のSymbolIndexが指すObjectTypeのインスタンスを作成し,ハンドルをSReg1に代入する。 |
OBJDEL | OBJDEL SReg | Object Delete. 指定のSRegが指すオブジェクトに対してdeleteする。 |
OBJRFI | OBJRFI SReg | Object Reference Increment. 指定のSRegが指すオブジェクトのリファレンスカウンタをインクリメントする。 |
OBJRFD | OBJRFD SReg | Object Reference Decrement. 指定のSRegが指すオブジェクトのリファレンスカウンタをデクリメントし,SRegに0を代入する。 |
デバッグ |
DLINE | DLINE ConstantValue(u24) | Debug Line. デバッグ情報のプログラム行数を代入するための命令。 PLにConstantValueを代入する。 |
DFUNC | DFUNC SymbolTableIndex(u16) | Debug Function. デバッグ情報の関数オブジェクトを代入するための命令。 PFにSymbolTableIndexが示すアドレスを代入する。 |