XOR命令(r xor imm)
レジスタに対する即値とのXOR命令です。
0: 34 7f xor $0x7f,%al 2: 66 35 ff 7f xor $0x7fff,%ax 6: 35 ff ff ff 7f xor $0x7fffffff,%eax b: 80 f3 7f xor $0x7f,%bl e: 80 f1 7f xor $0x7f,%cl 11: 80 f2 7f xor $0x7f,%dl 14: 66 81 f3 ff 7f xor $0x7fff,%bx 19: 66 81 f1 ff 7f xor $0x7fff,%cx 1e: 66 81 f2 ff 7f xor $0x7fff,%dx 23: 81 f3 ff ff ff 7f xor $0x7fffffff,%ebx 29: 81 f1 ff ff ff 7f xor $0x7fffffff,%ecx 2f: 81 f2 ff ff ff 7f xor $0x7fffffff,%edx
XOR命令でも、al/ax/eaxレジスタには個別のオペコードが割り当てられています。
で、他のレジスタについては、どーもModR/Mフィールドを使用しているようなので、それぞれのModR/Mフィールドを分解してみると、
命令 | オペコード | ModR/M(Mod Reg/OpeCode R/M) |
---|---|---|
XOR %bl imm8 | 80 | F3(11 110 011) |
XOR %cl imm8 | 80 | F1(11 110 001) |
XOR %dl imm8 | 80 | F2(11 110 010) |
XOR %bx imm16 | 66 81 | F3(11 110 011) |
XOR %cx imm16 | 66 81 | F1(11 110 001) |
XOR %dx imm16 | 66 81 | F2(11 110 010) |
XOR %ebx imm32 | 81 | F3(11 110 011) |
XOR %ecx imm32 | 81 | F1(11 110 001) |
XOR %edx imm32 | 81 | F2(11 110 010) |
となっており、Modビットが「11(レジスタ指定)」固定になっており、Reg/OpeCodeが「110」固定になっています(マニュアルには/6の指定あり)。また、R/Mビットに、それぞれのレジスタ番号が指定されています。
// ModR/Mフィールド 7 6 5 4 3 2 1 0 +-----------------------------+ | Mod | Reg/ | R/M | | | OpeCode | | +-----------------------------+
XOR命令のフォーマットをまとめると、AL/AX/EAXレジスタについては、
命令 | オペコード | 説明 |
---|---|---|
XOR AL imm8 | 34 imm8 | ALレジスタとimm8とのXORをとる。 |
XOR AX imm16 | 66 35 imm16 | AXレジスタとimm16とのXORをとる。 |
XOR EAX imm32 | 35 imm32 | AXレジスタとimm32とのXORをとる。 |
その他のレジスタについては、
命令 | オペコード | 説明 |
---|---|---|
XOR r/m8 imm8 | 80 F0+rb | r/m8とimm8とのXORをとる。 |
XOR r/m16 imm16 | 66 81 F0+rw | r/m16とimm16とのXORをとる。 |
XOR r/m32 imm32 | 81 F0+rd | r/m32とimm32とのXORをとる。 |