что делает инструкция movsbl?
Я искал в сети, но я не мог найти ясного примера, чтобы понять, что делает эта инструкция. Итак, если кто-то может дать пример об этом, это будет очень полезно для меня.
- Что происходит, когда запускается компьютерная программа?
- Возможно ли запустить двоичный файл x86 на процессоре ARM?
- Ошибка сегментации сборки после выполнения системного вызова, в конце моего кода
- Заголовочные файлы для x86 SIMD intrinsics
- Улучшенный REP MOVSB для memcpy
- Что такое рамка стека в сборке?
- Печать целого числа в виде строки с синтаксисом AT & T с системными вызовами Linux вместо printf
- Загружает и сохраняет только инструкции, которые переупорядочиваются?
Перемещение со значком простирается от байта до слова. В синтаксисе Intel мнемоника этой команды MOVSX.
Компилятор AC может использовать эту инструкцию, когда переменную типа int8_t
необходимо преобразовать в int
, что происходит автоматически по арифметике и нескольким другим операциям (целая продвижение).
Поскольку эта инструкция записывает все 32 (или 64) бита регистра назначения, это позволяет избежать штрафов за производительность, которые могут возникнуть в результате записи только младших (или 16) битов регистра. Аналогичный набор инструкций позволяет расширять с нулевыми битами (MOVZX в синтаксисе Intel, MOVZst в синтаксисе AT & T (от размера s до размера t)).
Top web hit for movsbl
– это страница , и если вы movsbl
это говорит
MOVSBL and MOVZBL * MOVSBL sign-extends a single byte, and copies it into a double-word destination * MOVZBL expands a single byte to 32 bits with 24 leading zeros, and copies it into a double-word destination Example: %eax = 0x12345678 %edx = 0xAAAABBBB MOVB %dh, %al %eax = 0x123456BB MOVSBL %dh, %eax %eax = 0xFFFFFFBB MOVZBL %dh, %eax %eax = 0x000000BB
Похоже, это довольно ясный пример для меня. Для получения дополнительных примеров прочитайте следующую страницу.
Предполагая, что вы говорите о x86, команда MOVSBL расширяет байт (8 бит), представляющий подписанное число до 32-разрядного числа со знаком. Остальные 24 бита являются нулями или единицами в зависимости от знака, так что значение дополнения двух остается.
Значение, если у вас есть отрицательное число, верхние 24 бита будут равны 1 с, иначе они будут нулями.
Эквивалентом для беззнаковых чисел является MOVZBL, который всегда продолжается с 0s.
Предполагая, что это синтаксис сборки AT & T для IA32 (i386 / x86_64), это означает MOV с расширением знака от байта до длинного. То есть это эквивалентно MOVSX r32, r/m8
m8 см. 3-730 Vol. 2А .