Расширенные архитектуры могут предоставить инструкции для этого. Фактически, тот, который я разработал много месяцев назад, имел 16-битную битовую маску, которая могла указывать любое количество регистров, которые вы хотели использовать для такой операции:
xor r3, bitmask
Каждый бит будет проверяться по очереди, и, если он установлен в 1, r3
будет xor
'с соответствующим регистром. Тем не менее, это только когда-либо существовал в качестве симулятора перед внедрением, и это было сочтено ненужным. Я полагаю, они посчитали, что в кремнии дешевле было позволить пользователю делать это вручную.
И продвинутые ассемблеры также могут предоставлять эту функциональность, возможно, позволяя написать:
xor r1, r2, r3, r4, r5, r6
и превращение его в эквивалент машинного языка:
xor r1, r2
xor r1, r3
xor r1, r4
xor r1, r5
xor r1, r6
Это, конечно, на самом деле не инструкция с несколькими аргументами на уровне машинного кода, просто ассемблер немного умнее. Это также не должно быть перепутано с реальными инструкциями, которые используют больше чем два аргумента с одним, являющимся местом назначения, таким как:
add r7, r3, r2 ; r7 = r3 + r2
Однако это то, что вы обычно делаете последовательно, особенно если вы не знаете значения, которые вы использовали заранее:
xor al, bl
xor al, 0x11
Если у вас есть константа элементов, которые вы хотите xor
зарегистрировать, вы можете объединить их заранее, xor
сначала, так как xor
коммутативно:
(a xor b) xor c == a xor (b xor c)
Например, если вы хотите xor
зарегистрировать с помощью 0x11
, а затем 0x12
, вы можете использовать:
xor al, 0x03 ; 0x03 is (0x12 xor 0x11)