На странице википедии о файлах .COM https://en.wikipedia.org/wiki/COM_file она гласит:
Файлы .COM в DOS устанавливают все регистры сегмента x86 на одно и то же значение, а регистр SP (указатель стека) - на 0xFFFE, поэтому стек начинается с самой верхней части сегмента памяти и оттуда работает вниз.
Но это фактически устанавливает стек на одно слово ниже вершины сегмента. При перемещении значения в стек ЦПУ будет уменьшать SP до 0xFFFC и сохранять там значение, тратя таким образом верхнее слово сегмента. В чем причина того, что DOS не устанавливает SP в 0?
int 20h
инструкцию, чтобы вы могли выйти из программы, выполнивret
инструкцию.