Какова цель 40-часового кода операции REX в ASM x64? - PullRequest
0 голосов
/ 09 мая 2018

Я пытался понять назначение кода операции 0x40 REX для инструкций ASM x64. Как, например, в этой функции пролог из Kernel32.dll:

enter image description here

Как вы видите, они используют push rbx как:

40 53      push        rbx 

Но использование только кода операции 53h (без префикса) также дает тот же результат:

enter image description here

Согласно этому сайту , макет префикса REX выглядит следующим образом:

enter image description here

Итак, опкод 40h, похоже, ничего не делает. Может кто-нибудь объяснить его цель?

1 Ответ

0 голосов
/ 09 мая 2018

байты 04xh (т.е. 040h, 041h ... 04fh) действительно являются байтами REX. Каждый бит в нижней части куска имеет значение, как вы указали в своем вопросе. Значение 040h означает, что REX.W, REX.R, REX.X и REX.B - все 0. Это означает, что добавление этого байта ничего не делает с этой инструкцией, потому что вы не переопределяете любые биты REX по умолчанию, и это не 8-битная инструкция с AH / BH / CH / DH в качестве операнд.

Кроме того, все биты X, R и B соответствуют некоторым операндам. Если ваша инструкция не использует эти операнды, то соответствующий бит REX игнорируется.

...