¿Qué hace la instrucción MOVZBL en IA-32 AT & T syntax?
¿Qué es exactamente la instrucción
movzbl 0x01(%eax,%ecx),%eax
¿Lo hace?
2 answers
La sintaxis de AT & T divide movzx
Intel instruction mnemonic en diferentes mnemotécnicas para diferentes tamaños de fuente (movzb
vs. movzw
). En la sintaxis de Intel, es:
movzx eax, byte ptr [eax+ecx+1]
Es decir, cargar un byte de la memoria en eax+ecx+1 y cero-extender al registro completo.
POR cierto, la mayoría de las herramientas GNU ahora tienen un switch o una opción de configuración para preferir la sintaxis Intel. (Como objdump -Mintel
o gcc -S -masm=intel
, aunque esto último afecta la sintaxis utilizada al compilar inline-asm). Sin duda recomendaría que lo investigara, si no haces el montaje de AT&T para vivir. Vea también el wiki de etiquetas x86 para más documentos y guías.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-23 03:10:52
Ejemplo:
mov $0x01234567, %eax
mov $1, %bl
movzbl %bl, %eax
# %eax == 0000 0001
mov $0x01234567, %eax
mov $-1, %bl
movzbl %bl, %eax
# %eax == 0000 00FF
La mnemotécnica es:
- MOV
- Cero extender
- Byte (8-bit)
- a Largo (32 bits)
También Hay versiones para otros tamaños:
-
movzbw
: Byte (8-bit) a Word (16-bit) -
movzwl
: Word (16-bit) a Long (32-bit)
Como la mayoría de las instrucciones de GAS, puede omitir el último carácter de tamaño cuando se trata de registros:
movzb %bl, %eax
Pero no puedo entender por qué no podemos omitir la antes de la última letra, por ejemplo, el siguiente falla:
movz %bl, %eax
¿Por qué no deducirlo del tamaño de los operandos cuando son registros como para mov
y la sintaxis de Intel?
Y si usa registros de tamaño incorrecto, no puede compilar, por ejemplo:
movzb %ax, %eax
Intel ejecutable ejemplo con aserciones en GitHub.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-22 09:43:40