久々の NCTMG
もうお忘れの方も多いと思いますけど。
なんとか最低限の命令が動く奴ができたっぽいです。まだテストが不十分なので公開はしませんが。
とりあえず、命令セットだけでものっけておきます。興味のある方は「続き」をどうぞ。
以下、マニュアルより抜粋。
<表記について> iNN 整数レジスタ。 NN の部分は 00〜31。 fNN 浮動少数レジスタ。 NN の部分は 00〜31。 imm 整数直値。 32 ビット固定。 fimm 浮動少数直値。 float 固定。 adr 整数用アドレス値。 32 ビット固定。 fadr 浮動少数用アドレス値。 32 ビット固定。 lbl ラベル。ジャンプやコールに使われる。 <命令セット> サンプルについては、解りやすくするためのもので、実際にこの表記は使われません。 命令 サンプル バイト数 説明 00h NOP 4 何もしない。 01h END 4 プログラムを終了する。 02h lbl JMP,lbl 8 指定ラベルにジャンプする。 03h lbl CALL,lbl 8 指定ラベルにコールする。 04h RET 4 CALL で呼ばれたところに戻る。 05h PUSH 4 全レジスタをプッシュする。 06h POP 4 全レジスタをポップする。 07h PRN_S 8 指定アドレスの文字列をコンソールに出力。 08h PRN_I 8 整数直値をコンソールに出力。 09h PRN_F 8 浮動少数直値をコンソールに出力。 0ah PRN_IR 8 指定整数レジスタの値をコンソールに出力。 0bh PRN_FR 8 指定浮動少数レジスタの値をコンソールに出力。 10h iNN imm MOV iNN,imm 12 指定整数レジスタに直値を代入。 11h iNN iNN MOV iNN,iNN 12 指定整数レジスタに指定整数レジスタ値を代入。 12h iNN adr MOV iNN,adr 12 指定整数レジスタに指定アドレスの中の値を代入。 13h adr imm MOV adr,imm 12 指定アドレスに直値を代入。 14h adr iNN MOV adr,iNN 12 指定アドレスに指定整数レジスタ値を代入。 15h adr adr MOV adr,adr 12 指定アドレスに指定アドレスの中の値を代入。 18h fNN fimm MOV fNN,fimm 12 指定浮動少数レジスタに直値を代入。 19h fNN fNN MOV fNN,fNN 12 指定浮動少数レジスタに指定浮動少数レジスタ値を代入。 1ah fNN fadr MOV fNN,fadr 12 指定浮動少数レジスタに指定アドレスの中の値を代入。 1bh fadr fimm MOV fadr,fimm 12 指定アドレスに直値を代入。 1ch fadr fNN MOV fadr,fNN 12 指定アドレスに指定浮動少数レジスタ値を代入。 1dh fadr fadr MOV fadr,fadr 12 指定アドレスに指定アドレスの中の値を代入。 20h iNN imm ADD iNN,imm 12 指定整数レジスタに直値を加算。 21h iNN iNN ADD iNN,iNN 12 指定整数レジスタに指定整数レジスタを加算。 22h iNN imm SUB iNN,imm 12 指定整数レジスタに直値を減算。 23h iNN iNN SUB iNN,iNN 12 指定整数レジスタに指定整数レジスタを減算。 24h iNN imm MUL iNN,imm 12 指定整数レジスタに直値を乗算。 25h iNN iNN MUL iNN,iNN 12 指定整数レジスタに指定整数レジスタを乗算。 26h iNN imm DIV iNN,imm 12 指定整数レジスタに直値を除算。 27h iNN iNN DIV iNN,iNN 12 指定整数レジスタに指定整数レジスタを除算。 28h iNN imm MOD iNN,imm 12 指定整数レジスタに直値を余算。 29h iNN iNN MOD iNN,iNN 12 指定整数レジスタに指定整数レジスタを余算。 30h fNN fimm ADD fNN,fimm 12 指定浮動少数レジスタに直値を加算。 31h fNN fNN ADD fNN,fNN 12 指定浮動少数レジスタに指定浮動少数レジスタを加算。 32h fNN fimm SUB fNN,fimm 12 指定浮動少数レジスタに直値を減算。 33h fNN fNN SUB fNN,fNN 12 指定浮動少数レジスタに指定浮動少数レジスタを減算。 34h fNN fimm MUL fNN,fimm 12 指定浮動少数レジスタに直値を乗算。 35h fNN fNN MUL fNN,fNN 12 指定浮動少数レジスタに指定浮動少数レジスタを乗算。 36h fNN fimm DIV fNN,fimm 12 指定浮動少数レジスタに直値を除算。 37h fNN fNN DIV fNN,fNN 12 指定浮動少数レジスタに指定浮動少数レジスタを除算。 38h fNN fimm MOD fNN,fimm 12 指定浮動少数レジスタに直値を余算。 39h fNN fNN MOD fNN,fNN 12 指定浮動少数レジスタに指定浮動少数レジスタを余算。 40h iNN imm CMP iNN,imm 12 指定整数レジスタと直値を比較 41h iNN iNN CMP iNN,iNN 12 指定整数レジスタと指定整数レジスタを比較 42h fNN fimm CMP fNN,fimm 12 指定浮動少数レジスタと直値を比較 43h fNN fNN CMP fNN,fNN 12 指定浮動少数レジスタと指定浮動少数レジスタを比較 50h lbl JEQ,lbl 8 ステータスレジスタに「EQU」が立っていれば指定ラベルにジャンプする。 51h lbl JGR,lbl 8 ステータスレジスタに「GRE」が立っていれば指定ラベルにジャンプする。 52h lbl JGE,lbl 8 ステータスレジスタに「GRE|EQU」が立っていれば指定ラベルにジャンプする。 53h lbl JLS,lbl 8 ステータスレジスタに「LES」が立っていれば指定ラベルにジャンプする。 54h lbl JLE,lbl 8 ステータスレジスタに「LES|EQU」が立っていれば指定ラベルにジャンプする。