Знак Movsx
расширяет регистр с помощью 1
, верно?
Итак, почему в Ollydbg я получил это:
- До:
- После:
У меня должно быть FFFFFF65
вместо 00000065
в ECX
нет?
Благодарю вас !
Знак Movsx
расширяет регистр с помощью 1
, верно?
Итак, почему в Ollydbg я получил это:
У меня должно быть FFFFFF65
вместо 00000065
в ECX
нет?
Благодарю вас !
Байт в ячейке памяти имеет значение 65h. Это положительное число, поэтому расширение заполнит 3 старших байта ECX нулями, что даст 00000065h .
byte ptr ds:[429d5d]
говорит ассемблеру, что вы собираетесь загрузить байт изds:[429d5d]
. Поскольку знакMOVSX
расширяет операнд src, он будет смотреть на этот старший бит байта и реплицировать его через старшие биты (знак расширяет его). 0x65 MSB (самый старший бит) равен 0, поэтому он был дополнен знаком 0. Значение от 0x80 до 0xFF будет дополнено знаком со значением 1 до старших битов, потому что MSB в этом диапазоне равен 1. Если бы вы имели дело со СЛОВОМ PTR, тогда расширение знака будет основано на старшем бите 16-битного слова. - person Michael Petch   schedule 17.11.2015