В чем смысл esi0a в инструкциях по сборке? - PullRequest
1 голос
/ 26 марта 2019

Я потратил около 6 часов на отладку кода с помощью Cheat Engine. Я столкнулся с чем-то действительно странным.

crazy weird instruction

Инструкция гласит:

imul esi,esi0A

Что это значит?

ESI = 5 перед инструкцией После инструкции imul оно становится 32.

1 Ответ

3 голосов
/ 26 марта 2019

TL; DR

Указанная инструкция, вероятно, должна была быть

imul esi, esi, 0x0A

, но Cheat Engine, вероятно, забыл напечатать запятую ,.


Более длинная версия

Математический результат, который вы описываете, согласуется с умножением 0x00000005 = 5 на 0x0A = 10 для получения 0x00000032 = 50.

В Руководстве для разработчиков программного обеспечения Intel, том 2A, § 3.2 - IMUL - Signed Multiply описаны функции инструкции и действующие формы. Из тех, которые допускают непосредственные константы, единственные доступные формы требуют указания 1) регистра назначения, 2) регистра источника и 3) непосредственной константы.

В данном конкретном случае очевидно, что они должны были быть соответственно esi, esi, 0x0A. Cheat Engine только напечатал это неправильно.

IMUL Instruction Forms

...