NOT命令(not r)
レジスタに対するNOT命令です。
0: f6 d0 not %al 2: f6 d3 not %bl 4: f6 d1 not %cl 6: f6 d2 not %dl 8: 66 f7 d0 not %ax b: 66 f7 d3 not %bx e: 66 f7 d1 not %cx 11: 66 f7 d2 not %dx 14: f7 d0 not %eax 16: f7 d3 not %ebx 18: f7 d1 not %ecx 1a: f7 d2 not %edx
これは、al/ax/eaxレジスタを含むすべてのレジスタに、同じオペコードを割り当てるタイプの命令ですね(al/ax/eaxを特別扱いしない)。
どーもModR/Mフィールドを使用しているようなので、それぞれのModR/Mフィールドを分解してみると、
命令 | オペコード | ModR/M (Mod Reg/OpeCode R/M) |
---|---|---|
NOT %al | F6 | D0 (11 010 000) |
NOT %bl | F6 | D3 (11 010 011) |
NOT %cl | F6 | D1 (11 010 001) |
NOT %dl | F6 | D2 (11 010 010) |
NOT %ax | 66 F7 | D0 (11 010 000) |
NOT %bx | 66 F7 | D3 (11 010 011) |
NOT %cx | 66 F7 | D1 (11 010 001) |
NOT %dx | 66 F7 | D2 (11 010 010) |
NOT %abx | F7 | D0 (11 010 000) |
NOT %ebx | F7 | D3 (11 010 011) |
NOT %ecx | F7 | D1 (11 010 001) |
NOT %edx | F7 | D2 (11 010 010) |
となっており、Modビットが「11(レジスタ指定)」固定になっており、Reg/OpeCodeが「010」固定になっています(マニュアルには/2の指定あり)。また、R/Mビットに、それぞれのレジスタ番号が指定されています。
// ModR/Mフィールド 7 6 5 4 3 2 1 0 +-----------------------------+ | Mod | Reg/ | R/M | | | OpeCode | | +-----------------------------+
NOT命令のフォーマットをまとめると、
命令 | オペコード | 説明 |
---|---|---|
NOT r/m8 | F6 D0+rb | r/m8の各ビットを反転する。 |
NOT r/m16 | 66 F7 D0+rw | r/m16の各ビットを反転する。 |
NOT r/m32 | F7 D0+rd | r/m32の各ビットを反転する。 |