ALU(Arithmetic Logic Unit)命令はADSP-2191の命令体系の中で一番種類の多いものです。ALUはレジスタファイルに直結した算術論理演算ユニットで、加減算、論理演算を実行します。
ALU命令には二項命令と三項命令があります。これらはいずれも高級言語の実行文のように書くことができます。また、オペランドのとり方は、直交形式、基本形式、即値形式のすべてが原則として許されています。
下の図は基本形式で使うことのできるオペランドの分類を表しています。薄青はxopとして使うことができます。薄緑はyopとして使うことができます。
三項命令は次のような形式を持っています
dst = src1 op src2;
三項命令は右辺の二項演算と左辺のデスティネーションの組み合わせです。具体例を挙げれば次のようなものがあります。
AR = AX0 + AY0; AF = MX0 - AX0; AR = AX0 AND AY0;
一見してわかるように高級言語の演算/代入命令によく似ています。上の例ではARおよびAFがデスティネーションです。ALU命令がとることのできるデスティネーションはこれだけです。
オペランドsrc1, src2に何をとるかは、その命令が直交形式、基本形式、即値形式のいずれであるかで決まります。普通は直交形式で自由にプログラムを組み、がちがちに最適化するときだけ基本形式にすればいいでしょう。
二項命令は次のような形式を持っています。
dst = op src;
二項命令は右辺の単項演算と左辺のデスティネーションの組み合わせです。具体例をあげると、
AR = ABS AX0; AR = - AY0; AF = NOT MX0;
などがあります。