No kupodivu se tomu místy dá rozumět. Zprvu mne napadlo tolik PUSH a POP namísto PUSHA, POPA..jenže rok výroby to vysvětluje :-)
.
Jinak s tím dolarem na konci stringu je to tak, že DOS pochází ze CP/Mky (tipuji 80%). A samotné CP/M vychází z DECovského OS11, který vychází z DECovského OS8 a ten měl šestibitové kódování znaků Radix50. Tedy celou velkou abecedu, cifry 0 až 9, mezeru, tečku, procento a doláč. Nic víc. A ten jediný $ se jevil na ukončení asi tak nějak nejlépe.
PUSHA/POPA existuje až od 286. Ale hlavně, PUSHA sežere mnohem více zásobníku než PUSH jen potřebných registrů. A zásobník je při API operačního systému asi ta nejkritičtější věc. Každý použitý bajt na zásobníku operačním systémem je velké, převeliké zlo, a může být tou poslední kapkou do pekla.
S tím dolarem je to tak, že dolar byl všeobecný oddělovač všude možně. Dolarem se oddělovaly v assemblerech příkazy assembleru (pseudoinstrukce) od instrukcí. V řadě databázových strojů, například MySQL je dodnes dolar jediným oddělovacím znakem, který nemusíte v identifikátorech databázových objektů (tabulek, procedur, ...) escapovat.
Fakt není třeba ze CP/M a Gary Kildalla dělat vynálezce dolaru jako terminátoru/separátoru věcí. I ten Gary Killdal to jen sprostě obšlehl třeba z kompilátoru assembleru, ve kterém napsal svůj CP/M. Každý, kdo v té době žil - včetně Billa Gatese - nasázel dolar jako terminátor/separátor na řadu míst. Dělal jsem to tak i já, a fakt jsem to neobšlehl od nějakého CP/M.
Takže když se Gary (jak tu kdosi navrhuje níže) zeptá Billa Gatese, proč řetězce v API int21h, al=9 končí dolarem, jednoduchá odpověď bude: "Protože jsem to ty kluku ušatá, Killdalová opsal z konvencí všeho kolem, stejně jako ty."
1) Prostě CP/M měl své API, a to API implementoval i QDOS a později MS-DOS. Jinak řečeno, nikdo nic neopsal, pouze se nezávisle implementovalo určité rozšířené API.
2) Řetězce ukončené nulou (ála COBOL a C) bylo tehdy revoluční rozhodnutí. Řetězce se ukončovaly namnoze jinými znaky.