Я изучаю руководство разработчика программного обеспечения Intel IA-32. В частности, я читаю следующее руководство: http://www.intel.com/Assets/PDF/manual/253666.pdf. Давайте возьмем, например, инструкцию ADD. На странице 79 написано, что вы можете добавить r8 (8-битный регистр) к r / m8 (8-битный регистр или ячейка памяти). В нескольких строках ниже также написано, что вы можете добавить r / m8 к r8. Вопрос: если я добавлю два 8-битных регистра, какую инструкцию я использую? Спасибо.
Инструкция добавления имеет несколько версий ... одна и та же мнемоника может быть закодирована в разные коды операций, в зависимости от того, какие операнды вы используете. (и чтобы ответить на ваш конкретный вопрос: инструкция «add r8, r8», вероятно, имеет 2 разных возможных кодировки, которые делают то же самое)
Инструкция ADD имеет 9 различных типов кодирования, и два кода операции зарезервированы для:
Opcode: 00/r = ADD r/m8, r8 Opcode: 02/r = ADD r8, r/m8
В случае, если "ADD r8, r8" оба имеют некоторый эффект.