Подпись NASM XOR (32 бит)

#nasm

#nasm

Вопрос:

Я искал подпись операции NASM XOR, но не смог найти ее в руководстве. Какова сигнатура операции XOR NASM? Например, какие режимы комбинирования / адресации регистров возможны при выполнении XOR X, Y ? Ограничено ли это определенными регистрами?

Ответ №1:

Это определяется набором команд (x86), а не NASM. Это допустимые формы XOR (взяты из руководства разработчика программного обеспечения Intel):

 Opcode           Instruction      Op/En  64-Bit Mode  Compat/Leg Mode  Description
34 ib            XOR AL, imm8     I      Valid        Valid            AL XOR imm8.
35 iw            XOR AX, imm16    I      Valid        Valid            AX XOR imm16.
35 id            XOR EAX, imm32   I      Valid        Valid            EAX XOR imm32.
REX.W   35 id    XOR RAX, imm32   I      Valid        N.E.             RAX XOR imm32 (sign-extended).
80 /6 ib         XOR r/m8, imm8   MI     Valid        Valid            r/m8 XOR imm8.
REX   80 /6 ib   XOR r/m8*, imm8  MI     Valid        N.E.             r/m8 XOR imm8.
81 /6 iw         XOR r/m16, imm16 MI     Valid        Valid            r/m16 XOR imm16.
81 /6 id         XOR r/m32, imm32 MI     Valid        Valid            r/m32 XOR imm32.
REX.W   81 /6 id XOR r/m64, imm32 MI     Valid        N.E.             r/m64 XOR imm32 (sign-extended).
83 /6 ib         XOR r/m16, imm8  MI     Valid        Valid            r/m16 XOR imm8 (sign-extended).
83 /6 ib         XOR r/m32, imm8  MI     Valid        Valid            r/m32 XOR imm8 (sign-extended).
REX.W   83 /6 ib XOR r/m64, imm8  MI     Valid        N.E.             r/m64 XOR imm8 (sign-extended).
30 /r            XOR r/m8, r8     MR     Valid        Valid            r/m8 XOR r8.
REX   30 /r      XOR r/m8*, r8*   MR     Valid        N.E.             r/m8 XOR r8.
31 /r            XOR r/m16, r16   MR     Valid        Valid            r/m16 XOR r16.
31 /r            XOR r/m32, r32   MR     Valid        Valid            r/m32 XOR r32.
REX.W   31 /r    XOR r/m64, r64   MR     Valid        N.E.             r/m64 XOR r64.
32 /r            XOR r8, r/m8     RM     Valid        Valid            r8 XOR r/m8.
REX   32 /r      XOR r8*, r/m8*   RM     Valid        N.E.             r8 XOR r/m8.
33 /r            XOR r16, r/m16   RM     Valid        Valid            r16 XOR r/m16.
33 /r            XOR r32, r/m32   RM     Valid        Valid            r32 XOR r/m32.
REX.W   33 /r    XOR r64, r/m64   RM     Valid        N.E.             r64 XOR r/m64.
 

imm означает немедленное, как 5 или 13 (или метку). r/m означает либо регистр, либо операнд памяти (например al , bh и byte [foo] все они будут совпадать r/m8 .