¿Por qué establece el registro SP DOS a 0xFFFE después de cargar un archivo .COM?

Nadder:

En la página Wikpedia sobre .com archivos https://en.wikipedia.org/wiki/COM_file se lee:

.COM archivos en DOS establecen todos los registros de segmento x86 con el mismo valor y el SP (puntero de pila) registro para 0xFFFE, por tanto, la pila comienza en la parte superior del segmento de memoria y trabaja hacia abajo desde allí.

Pero esto en realidad establece la pila para comenzar una palabra debajo de la parte superior del segmento. Al empujar un valor en la pila de la CPU disminuirá SP para 0xFFFC y almacenar el valor allí, perdiendo así la palabra superior del segmento. ¿Cuál es la razón para no establecer DOS SP a 0 en su lugar?

CherryDT:

Esto es para la compatibilidad con CP / M.

En el CP / M simplemente podría volver de su programa usando rety su programa podría salir limpiamente. Esto se logró por tener una 0x0000en la parte superior de la pila, y que tiene una int 20hinstrucción en la dirección 0x0000. A pesar de que int 20hes de manera oficial DOS' para salir de un programa, la opción de salir del programa utilizando call 0se mantuvo de CP / M, y la más externa-alcance retfunciona de la misma, así, ya que vuelve a 0.

Con el fin de tener esa 0x0000palabra en la parte superior de la pila, que necesita para empezar la pila utilizable 2 bytes más abajo, obviamente. Es por eso que SPestá inicialmente en 0xFFFE, señalando que la 0x0000palabra que a su vez apunta a la int 20hinstrucción.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=370109&siteId=1
Recomendado
Clasificación