registers assembly x86

assembly - registers - ¿Qué hace la instrucción movsbl?



x86 assembly instructions (4)

Esta pregunta ya tiene una respuesta aquí:

He buscado en la red, pero no pude encontrar un ejemplo claro para entender qué hace esta instrucción. Entonces, si alguien puede dar un ejemplo sobre esto, será muy útil para mí.


La página web más importante para movsbl es esta página , y si buscas movsbl dice:

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

Parece un ejemplo bastante claro para mí. Para más ejemplos, lea la página que sigue.


Mover con signo extenderse de byte a longword. En la sintaxis de Intel, el mnemotécnico de esta instrucción es MOVSX.

El compilador de CA puede usar esta instrucción cuando una variable de tipo int8_t necesita convertirse a int , lo que sucede automáticamente en la aritmética y en algunas otras operaciones (promoción de enteros).

Debido a que esta instrucción escribe en todos los 32 (o 64) bits del registro de destino, evita penalizaciones de rendimiento que pueden resultar de la escritura en solo los 8 (o 16) bits bajos de un registro. Un conjunto similar de instrucciones permite extender con cero bits (MOVZX en la sintaxis de Intel, MOVZst en la sintaxis de AT&T (de tamaño sa tamaño t)).


Suponiendo que está hablando de x86, la instrucción MOVSBL extiende un byte (8 bits) que representa un número con signo a un número con signo de 32 bits. Los 24 bits restantes son ceros o unos dependiendo del signo para que el valor de complemento de los dos permanezca.

Es decir, si tenía un número negativo, los 24 bits superiores serán 1s, de lo contrario serán ceros.

El equivalente para números sin firmar es MOVZBL, que se extiende siempre con 0s.


Suponiendo que esta es la sintaxis de ensamblaje de AT&T para IA32 (i386 / x86_64) significa MOV con extensión de Signo de Byte a Largo. Es decir, es equivalente a MOVSX r32, r/m8 ver 3-730 vol. 2A .