// 直交形式
<dst> = pass <dreg>;
          // 基本形式
[ IF <cond> ] pass <dst> = 0;
[ IF <cond> ] pass <dst> = 1;
[ IF <cond> ] pass <dst> = -1;
[ IF <cond> ] pass <dst> = <xop>;
[ IF <cond> ] pass <dst> = <yop>;
          // 即値形式
[ IF <cond> ] pass <dst> = <imm>;
                // 直交形式
AR = pass MX0;
          // 基本形式
AR = pass 0;
AR = pass AX0;
AR = pass AY0;
          // 即値形式
AR = pass 1024;
      パス命令はオペランドの値をARあるいはAFに代入します。この命令はレジスタ間移動命令や即値ロード命令とよく似ていますが、ASTATに影響を与える点が大きく違います。
たとえば
AR = pass -3; // AR に -3 を代入。ASTATが変化する。 AR = -3; // AR に -3 を代入。ASTATは変化しない。 AF = pass AX0; // AF に AX0 の値を代入。ASTATが変化する。 AF = AX0; // AF に AX0 の値を代入。ASTAは変化しない。
といった違いがあります。
ISRにもこの点に関して混乱があります。ISR 3-20によれば"pass"という記号は省略してもいいことになっています。しかしながら、"pass"を省略するとアセンブラは通常のレジスタ間移動、あるいは即値ロード命令としてアセンブルしますので、ASTATの値は変化しません。
ISRの記述にかかわらず、"pass"は省略不能だと考えてください。
もうひとつpass命令で混乱するのは、そのオペランドの変則さです。たとえば、
これらは、pass命令が単一命令でないことからきています。下に少し例を挙げてみましょう。
AR = pass -1; // AR = 0 - 1 の省略形 ( <yop>-1 : <yop>=0 ) AR = pass 0; // 正真正銘 pass 命令 AR = pass 1; // AR = 0 + 1 の省略形 ( <yop>+1 : <yop>=0 ) AR = pass 1023; // AR = 1024 - 1 の省略形 ( <yop>-1 : <yop>=1024 ) AR = pass 1024; // 正真正銘 pass 命令 AR = pass 1025; // AR = 1024 + 1 の省略形 ( <yop>+1 : <yop>=1024 )
このようにpass命令は複数の命令の特殊形の寄せ集めになっているため、やや規則が煩雑です。また、<yop>=0は基本形式なので、pass -1, 0, +1も基本形式となります。
<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>  ::= <即値>, および即値+1, 即値-1
<cond> ::= EQ, NE, GT, LE, LT, GE, AV, NOT AV, AC, NOT AC, 
           SWCOND, NOT SWCOND, MV, NOT MV, NOT CE, TRUE