一般に、プログラムで使用する変数を格納するメモリは、比較的近接したアドレスに配置することが多いので、メモリアドレスの指定を(レジスタの内容)+/-(数値)のように指定できれば、メモリアドレスを指定するレジスタの内容を一々変更しなくて良いということになり、便利である。また、オペランドとしてレジスタだけでなく、オペランドレジスタの内容をメモリアドレスと見てメモリを指すとか、+4とかの固定値を足す演算の場合には、オペランドとして直接、数値を書けると便利とかいう場合があり、CISCアーキテクチャの命令では、各種のオペランド指定が可能な形式が採られる。

その代表的な例が、名機と言われるDECのVAXシリーズの命令形式である。VAXシリーズでは、オペランドの最初のバイトの上位4ビットでモードを指定し、下位の4ビットでレジスタ番号を指定する。

モード オペランド バイト数
Literal -32~+31の数値 1
Register レジスタ Rn 1
Register Deferred レジスタの内容がメモリアドレス Memory[Rn] 1
Byte / Word / Long Displacement レジスタの内容+数値がメモリアドレス Memory[Rn+disp] 1+Displacementのバイト数
Byte / Word / Long Displacement Deferred レジスタの内容+数値をメモリアドレスとし、その内容がメモリアドレス Memory[Memory[Rn+disp]] 1+Displacementのバイト数
Autoincrement レジスタの内容がメモリアドレス;レジスタの内容にデータサイズを加算 Memory[Rn];Rn=Rn+d 1
Autodecrement レジスタの内容からデータサイズを減算;レジスタの内容がメモリアドレス Rn=Rn-d;Memory[Rn] 1
Autoincrement Deferred レジスタの内容+数値をメモリアドレスとし、その内容がメモリアドレス;レジスタの内容にデータサイズを加算 Memory[Memory[Rn]];Rn=Rn+d 1
Indexed (Scaled) ベースモード+レジスタの内容*データサイズがメモリアドレス Memory[Base+Rn*d] Base Mode+1

レジスタ直接のRegister、レジスタの内容がメモリアドレスとなるRegister Deferredモード、あるいはそれにインクリメントやデクリメントが加わったモードなどはオペランドの指定は1バイトであるが、Displacementが付くモードでは、ディスプレースメントの長さに応じて1~4のバイトの数値が続くことになる。

また、AutoincrementやAutodecrementモードは、レジスタの内容に加算や減算を行い、次のデータのアドレスを指す機能をもっている。これらのモードでは、OPコード部に書かれた命令の種別で、演算するデータのサイズが1バイト、2バイト、4バイトのいずれであるかが分かっているので、そのデータのバイト数(データサイズ)の数値を、使用したレジスタに加算、または減算する。

そして、Indexedモードは特別なモードで、LiteralとRegisterモードを除くモードのオペランド指定に続けてIndexedモード指定のバイトを付け加えることが出来る。そうすると、基本となるベースモードでメモリアドレスを計算した後、Indexedモード指定のレジスタの内容をデータサイズ倍して加算する。配列要素を順にアクセスする場合はAutoincrementモードでも良いが、ランダムな順序でアクセスする場合などには、配列の先頭アドレスをベースモードで指定し、配列のインデックスをIndexedモードのレジスタに入れてやると、上手くアクセスできる。

また、Literalモードも少し特別で、上位2ビットが00で、残りの6ビットで-32~+31までの数値を表す。このモードはレジスタの値に小さな数を引いたり加えたりする場合に便利である。

VAXのオペランドアドレス指定は、このような形式になっているので、全てのオペランドがRegisterあるいはRegister DeferredなどであればOPコードを含めて4バイトで命令を表現できるが、ベースモードにLongのDisplacement指定が付き、それにIndexedモードが付いていると、一つのオペランドの指定が6バイトの長さになる。そして、VAXは3アドレス形式の命令であるので、全部のオペランドにこのアドレス指定が使われている場合には合計19バイトという長い命令になる。

このようにVAXの命令アーキテクチャでは、OPコードとオペランドのアドレッシングの指定は完全に独立しており、操作とアドレッシングの直交性の高い、美しい命令アーキテクチャであると言われる。一方、同じCISCであるが、x86命令アーキテクチャではアドレッシングが非対称であり、Memory[Rn] ← Memory[Rn]+RmやRm ← Rm+Memory[Rn]はできるが、Memory[Rn] ← Memory[Rn]+Memory[Rm]のようなオペランド指定は出来ない。このため、x86命令アーキテクチャは、美しくないアーキテクチャであると言われる。但し、美しい命令アーキテクチャと言われたVAXは滅亡したが、美しくないと言われるx86は健在で、コンピュータアーキテクチャも美人薄命が当てはまるのかも知れない。