・オペレーションコード
・レジスター
・直値オペランド
・アドレッシングモード
・コンディションコード
・例文
オペレーションコード
以下がWIMPアセンブリ言語のオペレーションコードリストです。「コンディションコード」はこのオペレーションのコンディションコードへの影響です。
(「依る」というのはオペレーションの結果に依ってフラッグの状態が変わるということです)
オペ | 説明 | 構文 | コンディションコード |
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] | - |
BZE | 0じゃなかったら(Z=0)アドレスにジャンプ | BZE [Address] | - |
BNE | 0だったら(Z=1)アドレスにジャンプ | BNE [Address] | - |
BGE | 0以上だったら(Z=1 or N=0)アドレスにジャンプ | BGE [Address] | - |
BGT | >0だったら(Z=0 and N=0)アドレスにジャンプ | BGT [Address] | - |
BLE | 0以下だったら(Z=1 or N=1)アドレスにジャンプ | BLE [Address] | - |
BLT | 0未満だったら(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)を立てる | STC | C:1 |
CLC | 桁上げフラッグ(C)を降ろす | CLC | C:0 |
EXT | 実行終了 | EXT | - |
レジスタ
コード内でレジスタは以下のように指定できます:
A Accumulator
X Index Register
S Stack Pointer
R1~R4 General Purpose Registers (1~4)
X Index Register
S Stack Pointer
R1~R4 General Purpose Registers (1~4)
直値オペランド
整数や文字などの直値オペランドは以下のように表記します:
整数:サイン付き整数として書く(例:+32、-10等々)
文字:「//」内に書く(例:/a/)
文字:「//」内に書く(例:/a/)
アドレッシングモード
3種類のアドレッシングモードがあります。アドレスは全部「[Mode Specifier] [アドレス]」の形を取ります。(例:「I 100」「N 120」etc」
N: 絶対アドレスー [アドレス]の場所に欲しいデータがある
I: 二次的アドレスー [アドレス]の場所にアドレスが入っていて、そのアドレスが指す場所に欲しいデータがある
D: 指標アドレスー [アドレス]+[Index Register]の場所に欲しいデータがある
I: 二次的アドレスー [アドレス]の場所にアドレスが入っていて、そのアドレスが指す場所に欲しいデータがある
D: 指標アドレスー [アドレス]+[Index Register]の場所に欲しいデータがある
コンディションコード
4種類のコンディションフラッグがあります:
V: 計算がオーバーフローすると1になる
Z: 計算が0を返すと1になる
C: 計算の最後に桁上げがあると1になる
N: 計算が0未満の値を返すと1になる
Z: 計算が0を返すと1になる
C: 計算の最後に桁上げがあると1になる
N: 計算が0未満の値を返すと1になる
例文
LOA A N 150150行目にあるデータをAccumulatorに読み込む。
ADD A I 160
160行目にあるアドレスが指し示すデータをAccumulatorに足す。
INC X
Index Registerの値に+1する。
MOV R1 A
R1レジスタからAにデータをコピーする。
BRN N 160
160行目にジャンプする。