// 直交形式 <dst> = <dreg> + <dreg>; <dst> = <dreg> + <dreg> + c; <dst> = <dreg> + c; // 基本形式 [ IF <cond> ] <dst> = <xop> + <yop>; [ IF <cond> ] <dst> = <xop> + <yop> + c; [ IF <cond> ] <dst> = <xop> + c; // 即値形式 [ IF <cond> ] <dst> = <xop> + <imm>; [ IF <cond> ] <dst> = <xop> + <imm> + c;
// 直交形式 AR = MX0 + MY0; AF = MX0 + SI + C; // キャリー補正 AR = MX0 + C; // キャリー補正のみ // 基本形式 AR = AX0 + AY0; AR = MR1 + AY1 + C; // キャリー補正 AR = AX1 + C; // キャリー補正のみ IF GE AR = AX0 + AY0; // 条件実行 // 即値形式 AR = AX0 + 128; AR = AX1 + 256 + C; // キャリー補正
2つのオペランドの16ビット加算結果をARまたはAFに格納します。 "+ C"を付け加えることで、下位からのキャリー(桁上げ)を受け取ることができます。
加減算の即値形式で使用できる値は、..., -5, -3, -2, -1, 1, 2, 4 , 8, ...となっており、少々変則的です。しかしながら、実際にはアセンブラが加算と減算をうまく使って対処してくれるために次のように -5から +5までの任意の値で加減算ができるようになっています。
AR = AX0 - 5; // + (-5) AR = AX0 - 4; // - 4 AR = AX0 - 3; // + (-3) AR = AX0 - 2; // - 2 AR = AX0 - 1; // - 1 AR = AX0 + 1; // + 1 AR = AX0 + 2; // + 2 AR = AX0 + 3; // - (-3) AR = AX0 + 4; // + 4 AR = AX0 + 5; // - (-5)
<dst> ::= AR, AF <dreg> ::= AX0, AX1, AY0, AY1, MX0, MX1, MY0, MY1, SI, AR, MR2, MR1, MR0, SR2, SR1, SR0 <xop> ::= AX0, AX1, AR, MR2, MR1, MR0, SR1, SR0 <yop> ::= AY0, AY1, AF, 0 <imm> ::= <即値> <cond> ::= EQ, NE, GT, LE, LT, GE, AV, NOT AV, AC, NOT AC, SWCOND, NOT SWCOND, MV, NOT MV, NOT CE, TRUE