Perché DOS imposta il registro SP su 0xFFFE dopo aver caricato un file .COM?


10

Sulla pagina wiki sui file .COM https://en.wikipedia.org/wiki/COM_file si legge:

I file .COM in DOS impostano tutti i registri del segmento x86 sullo stesso valore e il registro SP (puntatore dello stack) su 0xFFFE, quindi lo stack inizia nella parte superiore del segmento di memoria e procede da lì.

Ma questo in realtà imposta lo stack in modo che inizi una parola sotto la parte superiore del segmento. Quando si spinge un valore nello stack, la CPU decrementa SP su 0xFFFC e memorizza il valore lì, sprecando così la parola superiore del segmento. Qual è la ragione per cui DOS non imposta invece SP su 0?


6
DOS memorizza un puntatore a int 20hun'istruzione lì in modo da poter uscire dal programma emettendo retun'istruzione.
fuz

Risposte:


16

Questo è per compatibilità con CP / M.

In CP / M potresti semplicemente tornare dal tuo programma usando rete il tuo programma uscirà in modo pulito. Ciò è stato ottenuto avendo a 0x0000nella parte superiore dello stack e avendo int 20hun'istruzione all'indirizzo 0x0000. Anche se int 20hè il modo ufficiale di DOS per uscire da un programma, l'opzione per uscire dal programma è call 0stata mantenuta da CP / M e l'ambito più esterno retfunziona allo stesso modo dal momento in cui ritorna 0.

Per avere quella 0x0000parola in cima allo stack, è necessario avviare lo stack utilizzabile 2 byte più in basso, ovviamente. Ecco perché SPè inizialmente a 0xFFFE, indicando quella 0x0000parola che a sua volta indica l' int 20histruzione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.