Подтвердить что ты не робот

Что делает инструкция movsbl?

Я искал в сети, но я не мог найти ясного примера, чтобы понять, что делает эта инструкция. Поэтому, если кто-то может дать пример об этом, это будет очень полезно для меня.

4b9b3361

Ответ 1

Перемещение со значком от байта до слова. В синтаксисе Intel мнемоника этой команды - MOVSX.

Компилятор C может использовать эту инструкцию, если переменную типа int8_t необходимо преобразовать в int, что происходит автоматически по арифметике и нескольким другим операциям (целая продвижение).

Поскольку эта инструкция записывает все 32 (или 64) бита регистра назначения, это позволяет избежать штрафов за производительность, которые могут возникнуть в результате записи только младших (или 16) битов регистра. Аналогичный набор инструкций позволяет расширять нулевые биты (MOVZX в синтаксисе Intel, MOVZst в синтаксисе AT & T (от размера s до размера t)).

Ответ 2

Топ-хит для 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

Похож на довольно яркий пример для меня. Для получения дополнительных примеров прочитайте следующую страницу.

Ответ 3

Предполагая, что вы говорите о x86, команда MOVSBL расширяет байт (8 бит), представляющий подписанный номер до 32-разрядного числа со знаком. Остальные 24 бита являются нулями или единицами в зависимости от знака, так что остается два значения дополнения.

Значение, если у вас есть отрицательное число, верхние 24 бита будут равны 1 с, иначе они будут нулями.

Эквивалент для беззнаковых чисел - MOVZBL, который всегда продолжается с 0s.

Ответ 4

Предполагая, что это синтаксис сборки AT & T для IA32 (i386/x86_64), это означает MOV с расширением знака от байта до длинного. То есть это эквивалентно MOVSX r32, r/m8 см. 3-730 Vol. 2A.