Sur la page wikpedia sur les fichiers .COM https://en.wikipedia.org/wiki/COM_file, il indique:
Les fichiers .COM sous DOS définissent tous les registres de segments x86 à la même valeur et le registre SP (pointeur de pile) à 0xFFFE, ainsi la pile commence tout en haut du segment de mémoire et fonctionne à partir de là.
Mais cela définit en fait la pile pour commencer un mot sous le haut du segment. Lorsque vous poussez une valeur sur la pile, le CPU décrémente SP à 0xFFFC et y stocke la valeur, gaspillant ainsi le mot supérieur du segment. Quelle est la raison pour laquelle DOS ne définit pas SP à 0 à la place?
int 20h
instruction afin que vous puissiez quitter votre programme en émettant uneret
instruction.Réponses:
C'est pour la compatibilité avec CP / M.
Dans CP / M, vous pouvez simplement revenir de votre programme en utilisant
ret
et votre programme se terminera proprement. Ceci a été réalisé en ayant un0x0000
en haut de la pile et en ayant uneint 20h
instruction à l'adresse0x0000
. Même siint 20h
c'est la façon officielle de DOS de quitter un programme, l'option de quitter le programme en utilisant acall 0
été conservée de CP / M, et la portée la plus externeret
fonctionne de la même manière depuis son retour0
.Afin d'avoir ce
0x0000
mot en haut de la pile, vous devez évidemment commencer la pile utilisable 2 octets plus bas. C'est pourquoiSP
est initialement à0xFFFE
, pointant vers ce0x0000
mot qui à son tour pointe vers l'int 20h
instruction.la source