Мне трудно понять, что делает инструкция movslq
. Google не очень полезен, и в этом списке нет такой инструкции. Здесь я прочитал это
MOVSLQ — это перемещение и расширение по знаку значения из 32-битного источника в 64-битное место назначения.
Я понимаю это так. Инструкция перемещает значение из 32-битного источника в 64-битное место назначения, но гарантирует, что значение числа со знаком в 64-битном назначении равно значению из источника, то есть в случае отрицательного числа она заполняет первые 32 бита пункт назначения единицами, иначе нулями.
Правильно ли я понимаю? Если нет, объясните, где я не прав.
ИЗМЕНИТЬ:
Это не дубликат этой темы: различие сборки cltq и movslq. Объяснений на мой вопрос нет. И вам придется прочитать весь ответ в течение 10 минут, чтобы убедиться в этом.
movsxd
: felixcloutier.com/x86/MOVSX:MOVSXD.html и да, это расширение знака дополнения 32->64 до 2. Вы можете понять это самостоятельно, собрав его с помощью ассемблера AT&T и разобрав с помощью синтаксического дизассемблера Intel. (например,objdumpd -d -Mintel foo.o
) - person Peter Cordes   schedule 09.04.2019movslq
в различии сборки cltq и movslq, второе упоминание об этом находится в предложении объясняя, что этоmovsx
, со ссылкой на руководство Intel. Вы правы, это не идеальный дубликат, но я хотел закрыть его, потому что есть механическое решение (собрать + разобрать), чтобы узнать мнемонику Intel для кодов операций AT&T, и больше нечего сказать об этом, поэтому такие вопросы имеют несколько низкое качество. - person Peter Cordes   schedule 09.04.2019movslq
. - person Peter Cordes   schedule 09.04.2019