¿Cómo entiende una computadora los dígitos hexadecimales en el código de máquina?

Primero, una computadora no entiende nada.

Una computadora moderna es solo un dispositivo eléctrico que necesita electricidad para funcionar.

En los componentes de almacenamiento de una computadora (registros, caché, RAM, ROM y HDD, etc.), la electricidad se almacena como carga eléctrica . Este cargo puede ser bajo o alto.

En otros componentes como el bus y la CPU, la electricidad se mueve como señal eléctrica . Esta señal podría ser de bajo voltaje o alto voltaje.

Dado que una carga eléctrica o una señal eléctrica en la computadora puede estar en cualquiera de los dos estados (bajo o alto) en un momento dado, son binarias .

En segundo lugar, binario no significa 0 y 1.

Binario significa algo que tiene dos partes . Podemos ver que la carga eléctrica y las señales eléctricas en la computadora son binarias (baja o alta). ¿Cómo los representamos en un papel? ¿Deberíamos representarlos como Bajo y Alto, X e Y, Verdadero y Falso o 0 y 1?

Puede ver que podemos adoptar cualquier símbolo para representar mnemónicamente señales o cargas eléctricas altas o bajas.

La representación mnemónica de 0 y 1 se adoptó porque podríamos hacer aritmética binaria con él muy fácilmente.

En tercer lugar, programar en binario no fue fácil.

Programar una computadora usando la representación mnemónica de 0 y 1 no fue fácil y rastrear errores fue aún más difícil. También fue un trabajo largo escribir números en binario. Además, la conversión de binario a hexadecimal fue súper fácil como se muestra en el siguiente ejemplo:

Finalmente, un ensamblador convertiría hexadecimal a binario (a señales o cargas eléctricas bajas o altas y no 0 y 1, que es solo otra representación mnemónica)

La lógica explicada anteriormente de la conversión de binario a hexadecimal podría implementarse en cualquier software y, como se hace en ensamblador , podemos hacer que la computadora entienda hexadecimal en los programas de ensamblaje.

Las computadoras realmente no “entienden” nada. Los valores numéricos utilizados en el código de máquina se asignan a una serie de estados eléctricos que están “activados” o “desactivados”. Las diferentes series de “complementos” y “desactivados” dan como resultado diferentes operaciones de la CPU. Podemos representar una serie de entradas y salidas de ancho fijo de diferentes maneras.

Considere la representación del byte representado por el número hexadecimal 0xAB (

  1. La forma más directa de representarlos es como un número binario donde 1 representa “encendido” y 0 “apagado”. Aquí: 1010 1011 (encendido, apagado, encendido, apagado, encendido, apagado, encendido, encendido)
  2. Otra forma es representarlos como un número hexadecimal: 0xAB – todavía (encendido, apagado, encendido, apagado, encendido, apagado, encendido, encendido)
  3. Como un número decimal con signo usando el complemento de dos – -85 todavía (encendido, apagado, encendido, apagado, encendido, apagado, encendido, encendido)
  4. Como un número decimal con signo usando el complemento de uno – -54 todavía (encendido, apagado, encendido, apagado, encendido, apagado, encendido, encendido)
  5. Como un número decimal con signo usando signo y magnitud – -43 todavía (encendido, apagado, encendido, apagado, encendido, apagado, encendido, encendido)
  6. Como un número decimal sin signo – 171 todavía (encendido, apagado, encendido, apagado, encendido, apagado, encendido, encendido)
  7. Muchas otras codificaciones menos frecuentes

Entonces, para la computadora, todo lo anterior es solo (encendido, apagado, encendido, apagado, encendido, apagado, encendido, encendido). Las codificaciones hexadecimales, binarias o varias decimales son justo lo que se muestra al usuario; para la computadora, es solo una serie de 8 estados eléctricos binarios.

El hexadecimal es fácil de usar para los programadores humanos porque es mucho más fácil distinguir 0xAB de 0xAC que distinguir 10101011 de 10101100, especialmente cuando la pantalla está llena de números. También es más fácil convertir un número de hexadecimal a binario o binario a hexadecimal en la cabeza que de decimal a binario y viceversa.

La representación “en pantalla” de los dígitos como números binarios o números hexadecimales es solo eso, una cuestión de la representación que se muestra al usuario. Lo que realmente representa la representación mostrada sigue siendo una serie de estados eléctricos de encendido / apagado.

No lo hace.

Incluso un ensamblador tiene algo de inteligencia. Convierte cualquier valor en hexadecimal en el texto fuente en un valor binario que es parte del código de máquina real.

Tenga en cuenta que ningún humano realmente escribe código de máquina, al menos desde los días de las primeras placas de microcomputadora de 8 bits. Lo que un humano escribe (no mucho en estos días) es el lenguaje ensamblador, donde los patrones de bits para los diversos códigos de operación y datos son reemplazados por mnemónicos, una sintaxis muy simple y constantes familiares en decimal, hexadecimal, octal y binario. Hay una correspondencia 1: 1 entre una línea de lenguaje ensamblador y una sola instrucción de código de máquina, pero todavía hay un poco de traducción cuando se realiza el ensamblaje.

Es fácil convertir entre binario (que la CPU anhela) y hexadecimal que los humanos usamos para captar más fácilmente los datos. La conversión se realiza por software.

Para un byte / octeto:

Mordisco alto: b7 b6 b5 b4 → 0123456789abcdef

Mordisco bajo: b3 b2 b1 b0 → 0123456789abcdef

Ejemplo 01011010 → 5a, etc.

Convertir a la inversa es tan fácil.

No. El lenguaje de máquina usa solo dos caracteres 0 y 1.

El código octal y hexadecimal son formas convenientes para que un humano lea y escriba código binario. La ventaja de ellos es que cuatro caracteres binarios corresponden a un carácter hexadecimal, o tres caracteres binarios corresponden a un carácter octal. No tiene este lujo con el sistema decimal, la conversión es mucho más complicada.