page0032
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* OSECPUの仮想CPUの命令セット
-(by [[K]], 2013.05.07)
* リビジョン 0008
-基本的にはリビジョン0005や0006と同じです。
--レジスタの使い方が変更になっています。
-アセンブラ表記を追加しました。
//-定数レジスタの概念がとりあえずなくなりました。今後復活...
** ver.0.36
NOP(); ...
LB(im8, im32); ...
LIMM(Rxx, im32); %(Rxx = im32); ...
PLIMM(Pxx, im32); %(Pxx = im32); ...
CND(Rxx); ...
LMEM(Rxx, ty32, Pxx); mc ...
SMEM(Rxx, ty32, Pxx); mc ...
PADD(Pxx, ty32, Pxx, Rxx); ...
PDIF(Rxx, ty32, Pxx, Pxx); ...
CP(Rxx, Rxx); %(Rxx = Rxx); ...
OR(Rxx, Rxx, Rxx); %(Rxx = Rxx | Rxx); ...
XOR(Rxx, Rxx, Rxx); %(Rxx = Rxx ^ Rxx); ...
AND(Rxx, Rxx, Rxx); %(Rxx = Rxx & Rxx); ...
ADD(Rxx, Rxx, Rxx); %(Rxx = Rxx + Rxx); ...
SUB(Rxx, Rxx, Rxx); %(Rxx = Rxx - Rxx); ...
MUL(Rxx, Rxx, Rxx); %(Rxx = Rxx * Rxx); ...
SHL(Rxx, Rxx, Rxx); %(Rxx = Rxx << Rxx); ...
SAR(Rxx, Rxx, Rxx); %(Rxx = Rxx >> Rxx); ...
...
...
...
...
PCP(Pxx, Pxx); %(Pxx = Pxx); ...
...
CMPE(Rxx, Rxx, Rxx); %(Rxx = Rxx == Rxx); ...
CMPNE(Rxx, Rxx, Rxx); %(Rxx = Rxx != Rxx); ...
CMPL(Rxx, Rxx, Rxx); %(Rxx = Rxx < Rxx); ...
CMPGE(Rxx, Rxx, Rxx); %(Rxx = Rxx >= Rxx); ...
CMPLE(Rxx, Rxx, Rxx); %(Rxx = Rxx <= Rxx); ...
CMPG(Rxx, Rxx, Rxx); %(Rxx = Rxx > Rxx); ...
TSTZ(Rxx, Rxx, Rxx); ...
TSTNZ(Rxx, Rxx, Rxx); ...
PCMPE(Rxx, Pxx, Pxx); %(Rxx = Pxx == Pxx); ...
PCMPEN(Rxx, Pxx); ...
PCMPNE(Rxx, Pxx, Pxx); %(Rxx = Pxx != Pxx); ...
PCMPNEN(Rxx, Pxx); ...
PCMPL(Rxx, Pxx, Pxx); %(Rxx = Pxx < Pxx); ...
PCMPGE(Rxx, Pxx, Pxx); %(Rxx = Pxx >= Pxx); ...
PCMPLE(Rxx, Pxx, Pxx); %(Rxx = Pxx <= Pxx); ...
PCMPG(Rxx, Pxx, Pxx); %(Rxx = Pxx > Pxx); ...
REM(im8,...); ...
-整数レジスタ番号Rxxはすべて1バイトで記述(ただし0~63ま...
-im32はビッグエンディアンで書きます(x86とは逆になって、...
-リマーク命令は主にコンパイラがデバッグ情報を付与するため...
--エラー時のデバッグ情報が必要なければ、osecpu.exeはこれ...
--実行結果には影響しない。
FE 01 00 : DBGINFO1
FE 01 01 : for命令の開始マーク(実行には関係ないので無視...
FE 01 02 : for命令の終了マーク(実行には関係ないので無視...
FE 01 03 : CALL/CALLR切り替え用プリフィクス
FE 01 FC : ALIGNPREFIX0
FE 01 FD : ALIGNPREFIX1
FE 01 FF : appackに対して、パディングFの出力を指示
FE 05 00 line-num. : DBGINFO0
FE 05 01 func-num. : 関数呼び出し構文開始マーク(実行に...
FE 12 00 flags func-num. P3F param-list R30 : プロトタイ...
** ver.0.37以降
-05: ?
-06: ?
-07: ?
-0A: PLMEM Pxx, typ32, Pxx, membchain
-0B: PSMEM Pxx, typ32, Pxx, membchain
-0C: LEA Pxx, typ32, Pxx, membchain
-0D: 0D [imm8] アサートレベル指定
-1A: DIV, MOD
-1C: PLMT0 Pxx, Pxx (pointer-limit-lower)
-1D: PLMT1 Pxx, Pxx (pointer-limit-upper)
-1F: PCST Pxx, Pxx, typ32, typ32 (pointer-cast)
** 即値指定のやり方
-PADD, OR~MOD, CMPccの命令では、2項目、3項目のRxxで、定...
-やりかたは、LIMM(R3F, imm);をその命令の直前につけて、命...
--よくわからなかったら、osecpu_asm.hのADDI()の定義を見て...
-ADDやANDのように2項目でも3項目でも結果に違いがないときは...
-結果的に、CMPcc(R3F, Rxx, R3F);みたいに、R3Fが二度出てし...
** レジスタの典型的な用法
-R00-R2F : 普通の整数レジスタ
-R30-R3B : テンポラリレジスタ
-R3C-R3E : リザーブ
-R3F : 条件比較慣用句指定用&演算命令即値慣用句指定用
-P00 : ベースポインタ
-P01-P27 : 普通のポインタレジスタ
-P28-P2F : リザーブ
-P30 : リターンアドレス
-P31-P3B : テンポラリレジスタ
-P3C-P3E : リザーブ
-P3F : プログラムカウンタ
** 内部で非公式に使っているコード
3C : 多数のレジスタをスタックに退避
3D : 多数のレジスタをスタックから復元
ED : ASKAがテンポラリレジスタ不足で式の展開をgive-up
EE : ASKAによる定数によるゼロ割検出
EF : ASKAのそのほかのエラー
F0 : データ配置 (→34化を検討中)
F4 : スタックのアロケート(→30化を検討中)
F5 : スタックの開放(→31化を検討中)
F6 : malloc (ver.0.49以降)(→32化を検討中)
F7 : free (ver.0.49以降)(→33化を検討中)
FE : 各種リマーク
FF 00 mm : 即値文字列(8bit単位)(これは内部中間コード...
FF 01 mm : 即値文字列(32bit単位)(これは内部中間コード...
** こめんと欄
-このページにこめんと欄はありません。このページの内容にコ...
終了行:
* OSECPUの仮想CPUの命令セット
-(by [[K]], 2013.05.07)
* リビジョン 0008
-基本的にはリビジョン0005や0006と同じです。
--レジスタの使い方が変更になっています。
-アセンブラ表記を追加しました。
//-定数レジスタの概念がとりあえずなくなりました。今後復活...
** ver.0.36
NOP(); ...
LB(im8, im32); ...
LIMM(Rxx, im32); %(Rxx = im32); ...
PLIMM(Pxx, im32); %(Pxx = im32); ...
CND(Rxx); ...
LMEM(Rxx, ty32, Pxx); mc ...
SMEM(Rxx, ty32, Pxx); mc ...
PADD(Pxx, ty32, Pxx, Rxx); ...
PDIF(Rxx, ty32, Pxx, Pxx); ...
CP(Rxx, Rxx); %(Rxx = Rxx); ...
OR(Rxx, Rxx, Rxx); %(Rxx = Rxx | Rxx); ...
XOR(Rxx, Rxx, Rxx); %(Rxx = Rxx ^ Rxx); ...
AND(Rxx, Rxx, Rxx); %(Rxx = Rxx & Rxx); ...
ADD(Rxx, Rxx, Rxx); %(Rxx = Rxx + Rxx); ...
SUB(Rxx, Rxx, Rxx); %(Rxx = Rxx - Rxx); ...
MUL(Rxx, Rxx, Rxx); %(Rxx = Rxx * Rxx); ...
SHL(Rxx, Rxx, Rxx); %(Rxx = Rxx << Rxx); ...
SAR(Rxx, Rxx, Rxx); %(Rxx = Rxx >> Rxx); ...
...
...
...
...
PCP(Pxx, Pxx); %(Pxx = Pxx); ...
...
CMPE(Rxx, Rxx, Rxx); %(Rxx = Rxx == Rxx); ...
CMPNE(Rxx, Rxx, Rxx); %(Rxx = Rxx != Rxx); ...
CMPL(Rxx, Rxx, Rxx); %(Rxx = Rxx < Rxx); ...
CMPGE(Rxx, Rxx, Rxx); %(Rxx = Rxx >= Rxx); ...
CMPLE(Rxx, Rxx, Rxx); %(Rxx = Rxx <= Rxx); ...
CMPG(Rxx, Rxx, Rxx); %(Rxx = Rxx > Rxx); ...
TSTZ(Rxx, Rxx, Rxx); ...
TSTNZ(Rxx, Rxx, Rxx); ...
PCMPE(Rxx, Pxx, Pxx); %(Rxx = Pxx == Pxx); ...
PCMPEN(Rxx, Pxx); ...
PCMPNE(Rxx, Pxx, Pxx); %(Rxx = Pxx != Pxx); ...
PCMPNEN(Rxx, Pxx); ...
PCMPL(Rxx, Pxx, Pxx); %(Rxx = Pxx < Pxx); ...
PCMPGE(Rxx, Pxx, Pxx); %(Rxx = Pxx >= Pxx); ...
PCMPLE(Rxx, Pxx, Pxx); %(Rxx = Pxx <= Pxx); ...
PCMPG(Rxx, Pxx, Pxx); %(Rxx = Pxx > Pxx); ...
REM(im8,...); ...
-整数レジスタ番号Rxxはすべて1バイトで記述(ただし0~63ま...
-im32はビッグエンディアンで書きます(x86とは逆になって、...
-リマーク命令は主にコンパイラがデバッグ情報を付与するため...
--エラー時のデバッグ情報が必要なければ、osecpu.exeはこれ...
--実行結果には影響しない。
FE 01 00 : DBGINFO1
FE 01 01 : for命令の開始マーク(実行には関係ないので無視...
FE 01 02 : for命令の終了マーク(実行には関係ないので無視...
FE 01 03 : CALL/CALLR切り替え用プリフィクス
FE 01 FC : ALIGNPREFIX0
FE 01 FD : ALIGNPREFIX1
FE 01 FF : appackに対して、パディングFの出力を指示
FE 05 00 line-num. : DBGINFO0
FE 05 01 func-num. : 関数呼び出し構文開始マーク(実行に...
FE 12 00 flags func-num. P3F param-list R30 : プロトタイ...
** ver.0.37以降
-05: ?
-06: ?
-07: ?
-0A: PLMEM Pxx, typ32, Pxx, membchain
-0B: PSMEM Pxx, typ32, Pxx, membchain
-0C: LEA Pxx, typ32, Pxx, membchain
-0D: 0D [imm8] アサートレベル指定
-1A: DIV, MOD
-1C: PLMT0 Pxx, Pxx (pointer-limit-lower)
-1D: PLMT1 Pxx, Pxx (pointer-limit-upper)
-1F: PCST Pxx, Pxx, typ32, typ32 (pointer-cast)
** 即値指定のやり方
-PADD, OR~MOD, CMPccの命令では、2項目、3項目のRxxで、定...
-やりかたは、LIMM(R3F, imm);をその命令の直前につけて、命...
--よくわからなかったら、osecpu_asm.hのADDI()の定義を見て...
-ADDやANDのように2項目でも3項目でも結果に違いがないときは...
-結果的に、CMPcc(R3F, Rxx, R3F);みたいに、R3Fが二度出てし...
** レジスタの典型的な用法
-R00-R2F : 普通の整数レジスタ
-R30-R3B : テンポラリレジスタ
-R3C-R3E : リザーブ
-R3F : 条件比較慣用句指定用&演算命令即値慣用句指定用
-P00 : ベースポインタ
-P01-P27 : 普通のポインタレジスタ
-P28-P2F : リザーブ
-P30 : リターンアドレス
-P31-P3B : テンポラリレジスタ
-P3C-P3E : リザーブ
-P3F : プログラムカウンタ
** 内部で非公式に使っているコード
3C : 多数のレジスタをスタックに退避
3D : 多数のレジスタをスタックから復元
ED : ASKAがテンポラリレジスタ不足で式の展開をgive-up
EE : ASKAによる定数によるゼロ割検出
EF : ASKAのそのほかのエラー
F0 : データ配置 (→34化を検討中)
F4 : スタックのアロケート(→30化を検討中)
F5 : スタックの開放(→31化を検討中)
F6 : malloc (ver.0.49以降)(→32化を検討中)
F7 : free (ver.0.49以降)(→33化を検討中)
FE : 各種リマーク
FF 00 mm : 即値文字列(8bit単位)(これは内部中間コード...
FF 01 mm : 即値文字列(32bit単位)(これは内部中間コード...
** こめんと欄
-このページにこめんと欄はありません。このページの内容にコ...
ページ名: