WIMP ヘルプ トップ > WIMP アセンブリ言語API

WIMP アセンブリ言語API
コンテンツ:
オペレーションコード
レジスター
直値オペランド
アドレッシングモード
コンディションコード
例文
オペレーションコード
以下がWIMPアセンブリ言語のオペレーションコードリストです。
「コンディションコード」はこのオペレーションのコンディションコードへの影響です。
(「依る」というのはオペレーションの結果に依ってフラッグの状態が変わるということです)
[Register]:レジスタを指定する
[Data]:直値アドレスのオペランドを指定する
[Address]:アドレスを指定する
オペ説明構文コンディションコード
LOAデータをレジスタに読み込むLOA [Register] [Data]Z,N: 依る
STOレジスタのデータをメモリに書くSTO [Register] [Address]Z,N: 依る
ADDデータをレジスタの値に足すADD [Register] [Data]All: 依る
ADCデータ+Cをレジスタの値に足すADC [Register] [Data]All: 依る
SUBデータをレジスタの値から引くSUB [Register] [Data]All: 依る
SBCデータ+Cをレジスタの値から引くSBC [Register] [Data]All: 依る
ANDデータとレジスタの値をANDするAND [Register] [Data]Z,N: 依る C,V:0
ORRデータとレジスタの値をORするORR [Register] [Data]Z,N: 依る C,V:0
NEQデータとレジスタの値をXORするXOR [Register] [Data]Z,N: 依る C,V:0
CMPデータとレジスタの値を比較するCMP [Register] [Data]All: 依る
MOVレジスタ1の値をレジスタ2にコピーMOV [Register1] [Register2]Z,N: 依る
CLRレジスタの値をクリアCLR [Register]Z:1 N,C,V:0
INCレジスタの値に+1するINC [Register]All: 依る
DECレジスタの値に-1するDEC [Register]All: 依る
RORレジスタの値を右に循環シフトROR [Register]All: 依る
ROLレジスタの値を左に循環シフトROL [Register]All: 依る
ASRレジスタの値を右に算術シフトASR [Register]All: 依る
ASLレジスタの値を左に算術シフトASL [Register]All: 依る
COMレジスタの値を補数にするCOM [Register]All: 依る
NEGレジスタの値をNOTするNEG [Register]Z,N: 依る C,V:0
PSHレジスタをスタックするPSH [Register]Z,N,C: 依る
POPレジスタをアンスタックするPOP [Register]Z,N: 依る
JSRサブプログラムにジャンプ(PCの値をスタック)
*これをやるとAccumulatorの値は失われます
JSR [Address]-
RTSサブプログラムから戻る(PCの値をアンスタック)td>RTS-
BRNアドレスに無条件ジャンプBRN [Address]-
BZE0じゃなかったら(Z=0)アドレスにジャンプBZE [Address]-
BNE0だったら(Z=1)アドレスにジャンプBNE [Address]-
BGE0以上だったら(Z=1 or N=0)アドレスにジャンプBGE [Address]-
BGT>0だったら(Z=0 and N=0)アドレスにジャンプBGT [Address]-
BLE0以下だったら(Z=1 or N=1)アドレスにジャンプBLE [Address]-
BLT0未満だったら(N=1 and Z=0)アドレスにジャンプBLT [Address]-
BCC桁上げフラッグが立ってなかったら(C=0)アドレスにジャンプBCC [Address]-
BCS桁上げフラッグが立ってたら(C=1)アドレスにジャンプBCS [Address]-
BVCオーバーフロウしてなかったら(V=0)アドレスにジャンプBVC [Address]-
BVSオーバーフロウしてたら(V=1)アドレスにジャンプBVS [Address]-
OUTレジスタの値を出力OUT [Register]-
STC桁上げフラッグ(C)を立てるSTCC:1
CLC桁上げフラッグ(C)を降ろすCLCC:0
EXT実行終了EXT-
レジスタ
コード内でレジスタは以下のように指定できます:
A Accumulator
X Index Register
S Stack Pointer
R1~R4 General Purpose Registers (1~4)
直値オペランド
整数や文字などの直値オペランドは以下のように表記します:
整数:サイン付き整数として書く(例:+32、-10等々)
文字:「//」内に書く(例:/a/)
アドレッシングモード
3種類のアドレッシングモードがあります。
アドレスは全部「[Mode Specifier] [アドレス]」の形を取ります。(例:「I 100」「N 120」etc」
N: 絶対アドレスー [アドレス]の場所に欲しいデータがある
I: 二次的アドレスー [アドレス]の場所にアドレスが入っていて、そのアドレスが指す場所に欲しいデータがある
D: 指標アドレスー [アドレス]+[Index Register]の場所に欲しいデータがある
コンディションコード
4種類のコンディションフラッグがあります:
V: 計算がオーバーフローすると1になる
Z: 計算が0を返すと1になる
C: 計算の最後に桁上げがあると1になる
N: 計算が0未満の値を返すと1になる
例文
LOA A N 150
150行目にあるデータをAccumulatorに読み込む。

ADD A I 160
160行目にあるアドレスが指し示すデータをAccumulatorに足す。

INC X
Index Registerの値に+1する。
MOV R1 A
R1レジスタからAにデータをコピーする。

BRN N 160
160行目にジャンプする。
WIMP ヘルプ トップ > WIMP アセンブリ言語API