Pěkně se ta série rozrůstá. :)
Opět nějaké opravy v textu:
* 3. Instrukce XLAT
Oprava:
Tato instrukce dokáže načíst hodnotu z adresy DS:[BX+AL] a uložit výsledek opět do registru AL.
* 4. BCD aritmetika na čipech Intel 8086/8088
Oprava:
V tomto případě osmibitové registry obsahují buď pouze jednu cifru (tj. hodnotu 0–9 z možného rozsahu 0–256)
* 7. Instrukce DAS po provedení operace rozdílu
Oprava: příklad používá instrukce "daa" místo "das"
* 14. Varianty řetězcových a blokových operací
CLD nastaví příznak DF pro určení směru přenosu nahoru
STD nastaví příznak DF pro určení směru přenosu dolů
V tabulce všude vypadly hranaté závorky s registry SI/DI, tj. DS:[SI] nebo ES:[DI]
* 15. Zápis několika po sobě jdoucích znaků do řetězce
Oprava:
- 4. Pětkrát zopakujeme instrukci STOSB, která vlastně provede mov ES:[DI], AL + inc DI [tedy DI, ne AL]
* 16. Vylepšení předchozího příkladu: opakování instrukce STOSB CX-krát
Vloudila se vrána:
- 5. Spustíme instrukci REP STOSB, která vlastně CX-krák^H^H^H^Hkrát provede mov ES:[DI], AL + inc DI [opět ne AL]
* Jako bonus, který z pochopitelných důvodů není uveden v článku, existuje "magická sekvence instrukcí", která z bytu (0-15) v AL vyrobí přímo ASCII kód odpovídající hexadecimální číslici ('0'-'F') v AL bez použití převodní tabulky:
add al,90h
daa
adc al,40h
daa
Odvození jak to funguje ponechávám jako cvičení na laskavém čtenáři.
17. 9. 2024, 03:23 editováno autorem komentáře
Zdravicko. Co je spatne s tim XLATem a chybejicimi zavorkami v tabulce? IMHO je to napsany dobre. Ostatni jsem opravil a doplnil, diky!
Jinak bonus: kdyby na to nekdo neprisel, proc to funguje, tak jsme to probirali v clancich o programovani ZX Spectra, tam je popsany priznaky v jednotlivych krocich atd. (bohudik ma Speccy taky ASCII, takze je to prenositelny).
V článku vidím toto:
"Tato instrukce dokáže načíst hodnotu z adresy DS a uložit výsledek opět do registru AL."
DS je segmentový registr a bez offsetu ani netvoří kompletní adresu. Offset je tvořen součtem BX+AL, ale v článku to není. Bez této informace je funkce instrukce XLAT značně nejasná.
Tipuji, že redakční systém "sežral" celé hranaté závorky, protože podobně chybí i v jiných částech článku.
V článku je: "Tato instrukce dokáže načíst hodnotu z adresy DS a uložit výsledek opět do registru AL."
Ale ona dělá DS:[(E)BX + unsigned AL] => AL
Tzn. v tom textu není zmíněno nic o adresování pomocí BX a AL pouze o DS a stálo by zato to tam doplnit. Není to tam špatně, jen to tam není úplně přesně ;)