ToySys
候補:第1引数を指す。引数がないときは、親の領域の最後。 候補:ローカル領域の最初を指す。ローカル領域がないときは、未使用領域の最初。 候補:戻り番地の格納場所を指す。 候補:旧FPの待避場所を指す。 どれでも大差ないけど。
レジスタ 命令 F ADD, SH*, EQ, GT, GE SP POP, PUSH, CALL, RET, OSP (Offset SP) FP CALL, RET IP J*, CALL, RET
定数生成 メモリからのロード、メモリへのストア レジスタ間転送 算術論理演算 比較演算(条件(condition)の生成) 無条件ジャンプ、条件ジャンプ Jamp and Link(呼び出し用) レジスタやスタックトップをターゲットとしたジャンプ(戻り用) 入出力 定数…
現状では: IP(命令ポインタ)、SP(スタックポインタ)、FP(フレームポインタ)、F(フラグ)を直接見ることもさわることはできない。 関数のプロローグコード、エピローグコードはほとんど不要。FPの保存、スタックのアンワインド(後かたづけ、たたむこ…
単に箇条書きで羅列。 昔はスタックがない機械もあったらしい。まー、自前でも作れるが、メンドーだからスタックはあったほうがいい。 明確なコール/リターン命令がない機械もある。が、メンドーだからあったほうがいい。 コールで、戻り番地(当該命令の次…
numeric character boolean
バイナリモドキに、ロケーション指定を入れる。 Addr ::= Hex Hex Hex Hex Location ::= '@' Addr PseudoBin ::= (Delm | Byte | Repeat | FillUntil | Location)*
バイナリモドキを少し修正。 2進数はなくてもいいや。 ニブル単位ではなくて、常にバイト単位で扱う。 Hex ::= [1-9A-Za-z] S ::= LF | CR | TAB | SPACE D ::= S | ',' Hex2 ::= Hex Hex Char ::= "'" [^\] EscapedChar ::= "'" '\'' [stnr'] Byte ::= Hex2…
テキストエディタで書けるバイナリ 空白類(間隔、タブ、改行、復帰)、カンマは無視される。 #から次の改行まではコメント、無視される。 データ表現 16進ニブル : [0-9a-fA-F] アスキー文字 : 'に続けて文字 エスケープ表現 : \[\stnr'] sは間隔文字 2進ニ…