Share via


Extensión de firma

Cuando un entero de 32 bits con signo es negativo, su bit más alto es igual a uno. Cuando este entero de 32 bits con signo se convierte en un número de 64 bits, los bits altos se pueden establecer en cero (conservando el entero sin signo y el valor hexadecimal del número) o los bits altos se pueden establecer en uno (conservando el valor con signo del número). Esta última situación se denomina extensión de signo.

El depurador sigue diferentes reglas para la extensión de inicio de sesión en expresiones MASM, en expresiones de C++ y al mostrar números.

Extensión de inicio de sesión en expresiones MASM

En determinadas condiciones, el evaluador de expresiones MASM amplía automáticamente los números. La extensión de signo solo puede afectar a los números de 0x80000000 a través de 0xFFFFFFFF. Es decir, la extensión de signo afecta solo a los números que se pueden escribir en 32 bits con el bit alto igual a 1.

El número 0x12345678 siempre permanece 0x00000000'12345678 cuando el depurador lo trata como un número de 64 bits. Por otro lado, cuando 0x890ABCDE se trata como un valor de 64 bits, podría permanecer 0x00000000'890ABCDE o el evaluador de expresiones MASM podría firmar su extensión a 0xFFFFFFFF'890ABCDE.

Un número de 0x80000000 a través de 0xFFFFFFFF se extiende según los siguientes criterios:

  • Las constantes numéricas nunca se extienden en modo de usuario. En el modo kernel, se extiende una constante numérica a menos que contenga un énfasis grave ( ` ) antes de los bytes bajos. Por ejemplo, en el modo kernel, los números hexadecimales EEAA1122 y 0000000EEAA1122 están extendidos, pero 00000000'EEAA1122 y 0'EEAA1122 no.

  • Un registro de 32 bits se extiende en ambos modos.

  • Los pseudo-registros siempre se almacenan como valores de 64 bits. No se extienden cuando se evalúan. Cuando se asigna un pseudo-registro a un valor, la expresión que se usa se evalúa según los criterios estándar de C++.

  • Los números individuales y los registros de una expresión se pueden extender, pero no se extiende ningún otro cálculo durante la evaluación de expresiones. Como resultado, puede enmascarar los bits altos de un número o registro mediante la sintaxis siguiente.

    ( 0x0`FFFFFFFF & expression )
    

Extensión de inicio de sesión en expresiones de C++

Cuando el depurador evalúa una expresión de C++, se aplican las reglas siguientes:

  • Los registros y pseudo-registros nunca se extienden.

  • Todos los demás valores se tratan exactamente como C++ trataría los valores de su tipo.

Mostrar Sign-Extended y números de 64 bits

Aparte de los registros de 32 y 16 bits, todos los números se almacenan internamente en el depurador como valores de 64 bits. Sin embargo, cuando un número cumple ciertos criterios, el depurador lo muestra como un número de 32 bits en la salida del comando.

El depurador usa los siguientes criterios para determinar cómo mostrar números:

  • Si los 32 bits altos de un número son ceros (es decir, si el número es de 0x00000000'000000000 a 0x00000000'FFFFFFFF), el depurador muestra el número como un número de 32 bits.

  • Si los 32 bits altos de un número son todos y si el bit más alto de los 32 bits bajos también es uno (es decir, si el número es de 0xFFFFFFFF'800000000 a 0xFFFFFFFF'FFFFFFFF), el depurador asume que el número es un número de 32 bits extendido con signo y lo muestra como un número de 32 bits.

  • Si no se aplica la condición anterior (es decir, si el número es de 0x00000001'000000000 a 0xFFFFFFFF'7FFFFFFFFF), el depurador muestra el número como un número de 64 bits.

Debido a estas reglas de visualización, cuando se muestra un número como un número de 32 bits de 0x80000000 a través de 0xFFFFFFFF, no se puede confirmar si los 32 bits altos son todos o ceros. Para distinguir entre estos dos casos, debe realizar un cálculo adicional en el número (por ejemplo, enmascarar uno o varios de los bits altos y mostrar el resultado).

Consulte también

Números y operadores de MASM

Números y operadores de C++

Expresiones de MASM frente a expresiones de C++

Ejemplos de expresiones mixtas

Extensión de firma