En la página de wikpedia sobre archivos .COM https://en.wikipedia.org/wiki/COM_file se lee:
Los archivos .COM en DOS establecen todos los registros de segmentos x86 en el mismo valor y el SP (puntero de pila) se registra en 0xFFFE, por lo tanto, la pila comienza en la parte superior del segmento de memoria y funciona desde allí.
Pero esto realmente establece que la pila comience una palabra debajo de la parte superior del segmento. Al empujar un valor en la pila, la CPU disminuirá SP a 0xFFFC y almacenará el valor allí, desperdiciando así la palabra superior del segmento. ¿Cuál es la razón por la que DOS no establece SP en 0 en su lugar?

int 20hinstrucción allí para que pueda salir de su programa emitiendo unaretinstrucción.Respuestas:
Esto es por compatibilidad con CP / M.
En CP / M, simplemente podría regresar de su programa usando
rety su programa saldría limpiamente. Esto se logró al tener un0x0000en la parte superior de la pila y tener unaint 20hinstrucción en la dirección0x0000. Aunqueint 20hes la forma oficial de DOS de salir de un programa, la opción de salir del programa usandocall 0se mantuvo desde CP / M, y el alcance más externoretfunciona igual desde que regresa0.Para tener esa
0x0000palabra en la parte superior de la pila, debe iniciar la pila utilizable 2 bytes más abajo, obviamente. Es por esoSPque inicialmente está en0xFFFE, apuntando a esa0x0000palabra que a su vez apunta a laint 20hinstrucción.fuente