El cálculo de dirección absoluta / Los valores del registro en ensamblador (Intel 8086)

StackOverflow https://stackoverflow.com/questions/3046271

  •  27-09-2019
  •  | 
  •  

Pregunta

Yo sé la dirección absoluta de la siguiente instrucción se encuentra 50000 (hexadecimal), y sé que el valor hexadecimal que debe estar en el Registro de IP es 4000 (hexadecimal). Mi pregunta es ... ¿Por qué funciona así?

Tengo los otros valores del registro disponible si se necesitan.

¿Alguna idea?

¿Fue útil?

Solución

La rareza de 8086 direccionamiento (heredado por todos los chips de Intel más tarde) es segmentación . Los registros son todos de 16 bits, pero la memoria direccionable es 1 Meg = 2 de potencia 20, es decir, que necesita 20 bits para una dirección.

Los genios de Intel decidieron usar dos registros para formar la dirección completa - un registro de segmento (CS, DS, SS, ES) que se desplaza a la izquierda 4 bits, y luego añadió con compensado registrarse para formar la dirección completa de 20 bits.

Así que el valor de IP es el desplazamiento del valor de CS (segmento de código). A partir de lo que ha dicho el valor de CS debe ser (0x50000 - 0x4000) >> 4 = 0x4c00.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top