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?
Esto es para la compatibilidad con CP / M.
En el CP / M simplemente podría volver de su programa usando ret
y su programa podría salir limpiamente. Esto se logró por tener una 0x0000
en la parte superior de la pila, y que tiene una int 20h
instrucción en la dirección 0x0000
. A pesar de que int 20h
es de manera oficial DOS' para salir de un programa, la opción de salir del programa utilizando call 0
se mantuvo de CP / M, y la más externa-alcance ret
funciona de la misma, así, ya que vuelve a 0
.
Con el fin de tener esa 0x0000
palabra en la parte superior de la pila, que necesita para empezar la pila utilizable 2 bytes más abajo, obviamente. Es por eso que SP
está inicialmente en 0xFFFE
, señalando que la 0x0000
palabra que a su vez apunta a la int 20h
instrucción.