Минимальный пример
mov $0x01234567, %eax
mov $1, %bl
movzbl %bl, %eax
/* %eax == 0000 0001 */
mov $0x01234567, %eax
mov $-1, %bl
movzbl %bl, %eax
/* %eax == 0000 00FF */
Runanble GitHub upstream с утверждениями .
Мнемоника:
- MOV
- Нулевое расширение
- Байт (8 бит)
- в Long (32-бит)
Существуют также версии для других размеров:
movzbw
: байт (8-разрядный) в слово (16-разрядный)
movzwl
: от слова (16 бит) до длинного (32 бита)
Как и большинство инструкций GAS, при работе с регистрами вы можете опустить последний символ размера:
movzb %bl, %eax
но я не могу понять, почему мы не можем опустить предыдущую букву, например следующие ошибки:
movz %bl, %eax
Почему бы просто не вывести его из размера операндов, когда они являются регистрами для mov
и синтаксиса Intel?
И если вы используете регистры неправильного размера, он не скомпилируется, например ::1010
movzb %ax, %eax