La extensión de signo (a veces abreviada como sext , particularmente en mnemotecnia ) es la operación, en aritmética informática , de aumentar el número de bits de un número binario mientras se conserva el signo (positivo/negativo) y el valor del número. Esto se hace agregando dígitos al lado más significativo del número, siguiendo un procedimiento que depende de la representación particular del número con signo que se use.
Por ejemplo, si se utilizan seis bits para representar el número " 00 1010
" (decimal positivo 10) y la operación de extensión de signo aumenta la longitud de la palabra a 16 bits, entonces la nueva representación es simplemente " 0000 0000 0000 1010
". De esta manera, se mantienen tanto el valor como el hecho de que el valor era positivo.
Si se utilizan diez bits para representar el valor " 11 1111 0001
" (decimal negativo 15) mediante complemento a dos , y este signo se extiende a 16 bits, la nueva representación es " 1111 1111 1111 0001
". Por lo tanto, al rellenar el lado izquierdo con unos, se conserva el signo negativo y el valor del número original.
En el conjunto de instrucciones Intel x86 , por ejemplo, hay dos formas de realizar la extensión de signo:
cbw
, cwd
, cwde
, y cdq
: convierte el byte en palabra, palabra en palabra doble, palabra en palabra doble extendida y palabra doble en palabra cuádruple, respectivamente (en el contexto x86 un byte tiene 8 bits, una palabra 16 bits, una palabra doble y una palabra doble extendida 32 bits, y una palabra cuádruple 64 bits);movsx
familia de instrucciones ("movimiento con extensión de signo").Un concepto similar es la extensión de cero (a veces abreviada como zext ). En una operación de movimiento o conversión, la extensión de cero se refiere a establecer los bits altos del destino en cero, en lugar de establecerlos en una copia del bit más significativo del origen. Si el origen de la operación es un número sin signo, entonces la extensión de cero suele ser la forma correcta de moverlo a un campo más grande mientras se conserva su valor numérico, mientras que la extensión de signo es correcta para los números con signo.
En los conjuntos de instrucciones x86 y x64, la movzx
instrucción ("mover con extensión cero") realiza esta función. Por ejemplo, movzx ebx, al
copia un byte del al
registro al byte de orden inferior de ebx
y luego llena los bytes restantes de ebx
con ceros.
En x64, la mayoría de las instrucciones que escriben en la totalidad de los 32 bits inferiores de cualquiera de los registros de propósito general pondrán a cero la mitad superior del registro de destino. Por ejemplo, la instrucción mov eax, 1234
borrará los 32 bits superiores del registro rax
[a] .