- 追加された行はこの色です。
- 削除された行はこの色です。
* スクリプト [#a5edfb45]
#contents
いつものように妄想という名の遊び。
* バイトコード [#k6da8bb7]
スクリプトを解析後,変換されるバイトコード。
命令長が多少長くなっても,1命令で処理される内容が多い方がよいだろう。
[[./言語仕様]]
[[./バイトコード]]
[[./オレ言語を作ってみたい人へ]]
** アセンブラ言語 [#fba2a405]
*** オペランド [#t4cad9d2]
:num - 値|
頭に何も付けず数値,この場合は10進数表記。
もしくは頭に''b'',''d'',''h'',''x''を付ける。
#code(){{
// 10進数表記
copy bp[-4] 12345
copy bp[-4] d12345
// 2進数表記
copy bp[-4] b0001
// 8進数表記
copy bp[-4] h7543
// 16進数表記
copy bp[-4] x0123ABCD
}}
[[./メモ]]
:@ - シンボル|
シンボル名に使っていい文字列は[a-zA-Z0-9_]。ただし1文字目に数値は使えない。
宣言するときはシンボル名の後に'':''。
参照するときは頭に@を付け,その後シンボル名。
#code(){{
VALUE_ONE:
s32 1
#code(D,){{
//-----------------------------------------------------------
module Project.Util.Vector3;
func:
copy bp[-4] @VALUE_ONE[0]
}}
//-----------------------------------------------------------
using Std.Math;
:bp - ベースポインタレジスタ|
スタック上のベースとなる位置。
#code(){{
func:
copy bp[-4] 1
}}
:* - アドレス先の値を受け取る|
bp,もしくは@の前に*。
#code(){{
func:
copy bp[-4] *bp[-8]
}}
:& - アドレス値を受け取る|
bp,もしくは@の前に&。
#code(){{
func:
copy bp[-4] &bp
}}
:相対アドレスの指定|
bp,もしくは@の後ろに[数値]で指定。
省略したら[0]と等価。
** 命令 [#uc3b37a5]
*** copy - 代入 [#e24d1a69]
C言語で書くとdest = src。
copy1 dest src
copy2 dest src
copy4 dest src
copy8 dest src
** メモ [#n35db29d]
** データの指定。 [#y48b504b]
#code(c,){{
const int CONST_VALUE = 1;
const int* CONST_VALUE_ADDR = &CONST_VALUE;
struct Pos
//-----------------------------------------------------------
pod Vector3
{
int x;
int y;
public:
float length()const
{
return Math.Sqrt( x*x + y*y + z*z );
}
float x;
float y;
float z;
};
const Pos CONST_OBJ_VALUE = {0,0};
const Pos* CONST_OBJ_VALUE_ADDR = &CONST_OBJ_VALUE;
void func()
{
int stack_value; // -4(bp)
int* stack_value_ptr: // -8(bp)
int i; // -12(bp)
i = 1; // 値 load i 1
// シンボルを参照
// load bp[-12] @CONST_VALUE_ADDR[0]
i = *CONST_VALUE_ADDR;
// シンボルを参照
// load bp[-12] @CONST_OBJ_VALUE_ADDR[4]
i = CONST_OBJ_VALUE.y;
// ベースポインタの相対指定
// load bp[-12] bp[-4]
i = stack_value;
// ベースポインタの相対アドレス
// load bp[-8] &bp[-4]
stack_value_addr = &stack_value;
// ベースポインタの相対指定をアドレスとみなし参照
// load bp[-12] *bp[-8]
i = *stack_value_ptr;
}
//-----------------------------------------------------------
// EOF
}}