メモ
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Full Name | Short Name | Comment |
| Stack Register Pointer | SRP | スタックレジスタポインタ。 スタックレジスタの先頭アドレス。 言い換えるとSR00の場所。 |
| Stack Pointer | SP | スタックポインタ。現在のスタック位置。 |
| Program Counter | PC | プログラムカウンタ。現在実行しているバイトコードのポインタ。 |
| Program Function | PF | プログラムの関数オブジェクトのポインタ。デバッグ用。 |
| Program Line | PL | プログラムのソースコードの行数。デバッグ用。 |
| Link Register | LR | リンクレジスタ。戻り先のバイトコードのポインタ。 |
| Function Register | FR | 関数レジスタ。全部で16個。FR00 - FR16。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | - | ! - | | ! | |
| 命令 | 書式 | コメント |
| ロード | ||
| LDSRC1 | LDSRC4 SReg ConstantTableIndex(u16) | ConstantTableの値を指定したスタックレジスタにロード |
| LDSRC2 | ||
| LDSRC4 | ||
| LDSRC8 | ||
| LDSRSR | LDSR SReg1 SReg2 | SReg2の値をSReg1にロード |
| LDSRSP | LDSRSP SReg1 StackPointerOffset(u16) | StackPointerから相対アドレス分移動したアドレスをReg1にロード |
| LDSRPT | LDSRPT SReg1 SReg2 | SReg2の値をアドレスとみなし,SReg2が指す値を取得する |
| LDSROJ | LDSROJ SReg1 SReg2 | SReg2の値をobject型とみなし,SReg2が指すobjectの実体のアドレスのアドレスを取得する |
| LDFRSR | LDFRSR FReg SReg | SRegの値をFRegにロード |
| 演算 | ||
| ADDxxx | ADDI32 SReg1 SReg2 SReg3 | SReg1 = SReg2 + SReg3 |
| SUBxxx | SUBI32 SReg1 SReg2 SReg3 | SReg1 = SReg2 - SReg3 |
| MULxxx | MULS32 SReg1 SReg2 SReg3 | SReg1 = SReg2 * SReg3 |
| DIVxxx | MULS32 SReg1 SReg2 SReg3 | SReg1 = SReg2 / SReg3 |
| MODxxx | MODS32 SReg1 SReg2 SReg3 | SReg1 = SReg2 % SReg3 |
| 関数あれこれ | ||
| FUNCET | FUNCIN AllocSRegNum CopyFRegNum | Function Enter. まずスタックに現在のSPR,LR,PL,PFをつみ,SPを変更する。 AllocSRegNumで指定された数,スタックレジスタを確保し,SPRに設定する。SPを変更する。 CopyFRegNumで指定された数,スタックレジスタにFRに内容をコピーする。 |
| FUNCLV | FUNCRT FreeSRegNum | Function Leave. FreeSRegNumで指定された数,スタックレジスタを解放しSPを変更する。 PF,PL,LR,SPR,をスタックから取り出し設定する。SPも変更する。 PCにLRを代入する。 |
| PUSH | PUSH PushStackSize(u16) | PushStackSize分,SPを移動する。SP -= PushStackSize。 |
| POP | POP PopStackSize(u16) | PopStackSize分,SPを移動する。SP += PopStackSize。 |
| CALL | CALL SymbolTableIndex(u16) | LRにPCを代入する。 SymbolTableIndexが示す関数の先頭バイトコードをPCに設定する。 |
| デバッグ | ||
| DLINE | DLINE ConstantValue(u24) | デバッグ情報のプログラム行数を代入するための命令。 PLにConstantValueを代入する。 |
| DFUNC | DFUNC SymbolTableIndex(u16) | デバッグ情報の関数オブジェクトを代入するための命令。 PFにSymbolTableIndexが示すアドレスを代入する。 |
含まれるもの
| 項目 | 内容 | 例 |
| シンボルのパス | 文字列 | BaseLib.Math.Vector3 |
| 継承しているクラスのパス | 文字列 | Foo |
| 実装しているインターフェースのリスト | 別項:インターフェースのリストを参照 | |
| 変数リスト | 別項:変数リストを参照 | |
| 関数リスト | 別項:関数リストを参照 |
| 項目 | 内容 | 例 |
| シンボルのパス | 文字列 | BaseLib.IDrawable |
| 項目 | 内容 | 例 |
| 型を示すシンボルのパス | 文字列 | float |
| シンボル名 | 文字列 | x |
| staticフラグ | bool(staticか否か) | |
| readonlyフラグ | bool(readonlyか否か) | |
| constフラグ | bool(constか否か) |
| 項目 | 内容 | 例 |
| シンボル名 | 文字列 | add |
| 戻り値の型を示すシンボルのパス | 文字列 | BaseLib.Math.Vector3 |
| 戻り値のconstフラグ | bool(constか否か) | |
| 引数リスト | 別項:引数リストを参照 | |
| staticフラグ | bool(staticか否か) | |
| constフラグ | bool(constか否か) | |
| 命令コード | バイトコード |
| 項目 | 内容 | 例 |
| 型を示すシンボルのパス | 文字列 | float |
| constフラグ | bool(constか否か) | |
| refフラグ | bool(refか否か) |
| 項目 | 内容 | 例 |
| 代入先 | 定数テーブル or シンボルテーブル | - |
| シンボルパス | 解決するシンボルのパス | BaseLib.Math.Vector3.x |
| シンボルの何を取得するのか。 | ・変数オブジェクト(SSVariableのポインタ) ・サイズ ・先頭からのオフセット距離 | - |
| 項目 | 内容 | 例 |
| 代入先 | シンボルテーブル | - |
| シンボルパス | 解決するシンボルのパス | BaseLib.Math.Vector3.add |
| 引数リスト | 引数の型のリスト | |
| 属性 | const,staticなどの属性 | |
| シンボルの何を取得するのか。 | ・関数オブジェクト(SSFunctionのポインタ) | - |
| 項目 | 内容 | 例 |
| 代入先 | 定数テーブル | - |
| シンボルパス | 解決するシンボルのパス | BaseLib.Math.Vector3 |
| シンボルの何を取得するのか。 | ・サイズ | - |
構文解析が終わった後,コード生成より前にやること。