Что делает movslq? - PullRequest
       51

Что делает movslq?

0 голосов
/ 09 апреля 2019

У меня проблемы с поиском инструкции movslq. Google не очень полезен, и в этом списке такой инструкции нет. Здесь Я читал, что

MOVSLQ - это перемещение и расширение знака из 32-разрядного источника в 64-разрядное назначение.

Я так понимаю. Инструкция перемещает значение из 32-разрядного источника в 64-разрядное назначение, но гарантирует, что знаковое значение числа в 64-разрядном назначении равно значению из источника, то есть в случае отрицательного числа оно заполняет первые 32 бита пункт назначения с единицами, иначе с нулями.

Правильно ли мое понимание? Если нет, пожалуйста, объясните, где я не прав.

EDIT:

Это не дубликат этой темы: Разница в сборке cltq и разница movslq . Там нет объяснения моего вопроса. И вам нужно будет прочитать весь ответ за 10 минут, чтобы убедить себя в этом.

1 Ответ

2 голосов
/ 09 апреля 2019

Это movsxd: https://www.felixcloutier.com/x86/MOVSX:MOVSXD.html.

Вы можете сами понять это, собрав его с помощью ассемблера AT & T и разобрав с помощью синтаксического дизассемблера Intel.(например, objdumpd -d -Mintel foo.o)


И да, он выполняет 32-> 64-битное 2 расширение знака дополнения , расширяющееся путем копирования знакового бита источникако всем новым старшим битам.(т. е. dst[63:32] = src[31] и dst[31:0] = src[31:0].)

Интересный факт: его можно использовать без префикса REX.W в качестве просто 32-битной копии, которая архитектурно эквивалентна mov, но нет никакого преимущества в этом.Или даже с префиксом размера операнда в качестве 16-битной копии, но опять же, это совершенно бессмысленно, используйте mov.


Related: Что делает cltq в сборке? содержит таблицу эквивалентности для мнемоники AT & T и Intel для всех инструкций по расширению знака x86, а также описание.([ER] AX в DX: AX, в пределах - [ER] AX и movsx / movzx в произвольные регистры.)

сборка cltq и разница movslq имеет больше истории о том, как AMD64 переназначилкод операции ARPL из 16/32-битного режима для получения 1-байтового кода операции для movsxd.

...