OSECPUの仮想CPUの命令セット

リビジョン 0008

ver.0.36

NOP();                                                  00                           1バイト命令 (no-operation)
LB(im8, im32);                                          01 [im8] [im32]              6バイト命令 (label)
LIMM(Rxx, im32);            %(Rxx = im32);              02 [Rxx] [im32]              6バイト命令 (load-immediate)
PLIMM(Pxx, im32);           %(Pxx = im32);              03 [Pxx] [im32]              6バイト命令 (pointer-load-immediate)
CND(Rxx);                                               04 [Rxx]                     2バイトプリフィクス (condition)

LMEM(Rxx, ty32, Pxx); mc                                08 [Rxx] [ty32] [Pxx] mc     (8+4n)バイト命令 (load-memory, load-member)
SMEM(Rxx, ty32, Pxx); mc                                09 [Rxx] [ty32] [Pxx] mc     (8+4n)バイト命令 (store-memory, store-member)

PADD(Pxx, ty32, Pxx, Rxx);                              0E [Pxx] [ty32] [Pxx] [Rxx]  8バイト命令 (pointer-add)
PDIF(Rxx, ty32, Pxx, Pxx);                              0F [Rxx] [ty32] [Pxx] [Pxx]  8バイト命令 (pointer-diff)
CP(Rxx, Rxx);               %(Rxx = Rxx);               10 [Rxx] [Rxx] FF            4バイト命令 (copy)
OR(Rxx, Rxx, Rxx);          %(Rxx = Rxx |  Rxx);        10 [Rxx] [Rxx] [Rxx]         4バイト命令 (or)
XOR(Rxx, Rxx, Rxx);         %(Rxx = Rxx ^  Rxx);        11 [Rxx] [Rxx] [Rxx]         4バイト命令 (xor)
AND(Rxx, Rxx, Rxx);         %(Rxx = Rxx &  Rxx);        12 [Rxx] [Rxx] [Rxx]         4バイト命令 (and)

ADD(Rxx, Rxx, Rxx);         %(Rxx = Rxx +  Rxx);        14 [Rxx] [Rxx] [Rxx]         4バイト命令 (add)
SUB(Rxx, Rxx, Rxx);         %(Rxx = Rxx -  Rxx);        15 [Rxx] [Rxx] [Rxx]         4バイト命令 (subtract)
MUL(Rxx, Rxx, Rxx);         %(Rxx = Rxx *  Rxx);        16 [Rxx] [Rxx] [Rxx]         4バイト命令 (multiply)

SHL(Rxx, Rxx, Rxx);         %(Rxx = Rxx << Rxx);        18 [Rxx] [Rxx] [Rxx]         4バイト命令 (shift-left)
SAR(Rxx, Rxx, Rxx);         %(Rxx = Rxx >> Rxx);        19 [Rxx] [Rxx] [Rxx]         4バイト命令 (shift-arithmetic-right)
                                                        1A [Rxx] [Rxx] [Rxx]         4バイト命令
                                                        1B [Rxx] [Rxx] [Rxx]         4バイト命令
                                                        1C [Pxx] [Pxx]               3バイト命令
                                                        1D [Pxx] [Pxx]               3バイト命令
PCP(Pxx, Pxx);              %(Pxx = Pxx);               1E [Pxx] [Pxx]               3バイト命令 (pointer-copy)
                                                        1F [Pxx] [Pxx] [ty32] [ty32] 11バイト命令
CMPE(Rxx, Rxx, Rxx);        %(Rxx = Rxx == Rxx);        20 [Rxx] [Rxx] [Rxx]         4バイト命令 (compare-equal) (2項目と3項目を比較)
CMPNE(Rxx, Rxx, Rxx);       %(Rxx = Rxx != Rxx);        21 [Rxx] [Rxx] [Rxx]         4バイト命令 (compare-not-equal)
CMPL(Rxx, Rxx, Rxx);        %(Rxx = Rxx <  Rxx);        22 [Rxx] [Rxx] [Rxx]         4バイト命令 (compare-less-than)
CMPGE(Rxx, Rxx, Rxx);       %(Rxx = Rxx >= Rxx);        23 [Rxx] [Rxx] [Rxx]         4バイト命令 (compare-greater-or-equal)
CMPLE(Rxx, Rxx, Rxx);       %(Rxx = Rxx <= Rxx);        24 [Rxx] [Rxx] [Rxx]         4バイト命令 (compare-less-or-equal)
CMPG(Rxx, Rxx, Rxx);        %(Rxx = Rxx >  Rxx);        25 [Rxx] [Rxx] [Rxx]         4バイト命令
TSTZ(Rxx, Rxx, Rxx);                                    26 [Rxx] [Rxx] [Rxx]         4バイト命令
TSTNZ(Rxx, Rxx, Rxx);                                   27 [Rxx] [Rxx] [Rxx]         4バイト命令
PCMPE(Rxx, Pxx, Pxx);       %(Rxx = Pxx == Pxx);        28 [Rxx] [Pxx] [Pxx]         4バイト命令
PCMPEN(Rxx, Pxx);                                       28 [Rxx] [Pxx] FF            4バイト命令
PCMPNE(Rxx, Pxx, Pxx);      %(Rxx = Pxx != Pxx);        29 [Rxx] [Pxx] [Pxx]         4バイト命令
PCMPNEN(Rxx, Pxx);                                      29 [Rxx] [Pxx] FF            4バイト命令
PCMPL(Rxx, Pxx, Pxx);       %(Rxx = Pxx <  Pxx);        2A [Rxx] [Pxx] [Pxx]         4バイト命令
PCMPGE(Rxx, Pxx, Pxx);      %(Rxx = Pxx >= Pxx);        2B [Rxx] [Pxx] [Pxx]         4バイト命令
PCMPLE(Rxx, Pxx, Pxx);      %(Rxx = Pxx <= Pxx);        2C [Rxx] [Pxx] [Pxx]         4バイト命令
PCMPG(Rxx, Pxx, Pxx);       %(Rxx = Pxx >  Pxx);        2D [Rxx] [Pxx] [Pxx]         4バイト命令
REM(im8,...);                                           FE [im8] ...                 2+nバイト命令 (remark)

ver.0.37以降

即値指定のやり方

レジスタの典型的な用法

こめんと欄


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS