Vývoj mikroprocesorů z rodiny 80×86: 32bitové čipy 80386 a 80486

5. 12. 2024
Doba čtení: 55 minut

Sdílet

 Autor: Depositphotos
Dnes se budeme zabývat těmi novými instrukcemi, které byly přidány do třetí generace mikroprocesorů rodiny 80×86, tj. konkrétně do čipů Intel 80386 (a posléze i Intel 80486). Prozatím se zaměříme především na reálný režim.

Obsah

1. Vývoj mikroprocesorů z rodiny 80×86: 32bitové čipy 80386 a 80486

2. Sada 32bitových pracovních registrů

3. Nové segmentové registry

4. Kódování instrukcí s novými segmentovými registry

5. Instrukce PUSH a POP s novými segmentovými registry

6. Práce s novými 32bitovými pracovními registry

7. Kódování instrukcí v šestnáctibitovém režimu mikroprocesorů

8. Kódování instrukcí v 32bitovém režimu mikroprocesorů

9. Rozšíření možností instrukcí skoku

10. Základní varianta: lokální skoky

11. Rozšířená varianta: „blízké“ skoky

12. Krátké vs. blízké skoky z pohledu kódování instrukcí

13. Dlouhé skoky

14. Nové instrukce pro konverzi dat

15. Rozšíření hodnoty bez znaménka při přenosu dat

16. Rozšíření hodnoty se znaménkem při přenosu dat

17. Nové bitové operace

18. Nastavení výsledku pravdivostní operace

19. Repositář s demonstračními příklady

20. Odkazy na Internetu

1. Vývoj mikroprocesorů z rodiny 80×86: 32bitové čipy 80386 a 80486

Na článek o nových instrukcích podporovaných mikroprocesory Intel 80186 a Intel 80286 dnes navážeme. Zabývat se totiž budeme vybranými instrukcemi, které byly přidány do třetí generace mikroprocesorů rodiny 80×86, tj. konkrétně do čipů Intel 80386 (a posléze i Intel 80486). Prozatím se zaměříme především na reálný režim těchto mikroprocesorů, takže nebudeme odbíhat ani k chráněnému režimu ani k režimu virtuálnímu. Dále popsané instrukce jsou sice (většinou) 32bitové, protože dokážou zpracovávat 32bitové operandy, ovšem kvůli omezením reálného režimu měli programátoři stížené adresování paměti nad první megabajt a navíc byli omezeni i adresováním formou segment:offset. Jak bylo možné toto (dosti zásadní) omezení obejít, je problematika, které se budeme věnovat v samostatném článku.

Poznámka: 80386 skutečně přinesla nové užitečné instrukce, což se u rozšíření zavedeném v rámci 80186 úplně říci nedá. Ovšem nové instrukce byly přidány za cenu nutnosti použití prefixů, tj. jednoho nebo dvou bajtů zapsaných před vlastní operační kód instrukce. Některé instrukce povolují i další prefixy, takže jedna instrukce může být zakódována například do deseti bajtů (a pravděpodobně lze nalézt i delší varianty – praktickým limitem je ovšem délka instrukční fronty).

2. Sada 32bitových pracovních registrů

Mikroprocesory 80386 a 80486 jsou nazývány 32bitovými čipy mj. i z toho důvodu, že se u nich rozšířila aritmeticko-logická jednotka tak, aby bylo možné pracovat s 32bitovými operandy. A tomu se musela přizpůsobit i sada pracovních registrů. Společnost Intel se rozhodla, že namísto „párování“ dvou šestnáctibitových registrů do registrů 32bitových rozšíří původní registry ze šestnácti bitů na plných 32 bitů. Týká se to všech čtyř pracovních registrů AX, BX, CX, DX, indexových registrů SI, DI, bázových registrů SP, BP i ukazatele na instrukci IP. Tyto registry byly rozšířeny o horních šestnáct bitů, přičemž je stále možné adresovat spodních 16 bitů původními jmény registrů a/nebo (pouze u pracovních registrů) použít jejich horních a spodních osm bitů zvlášť (AX=AH+AL atd.). V assembleru se 32bitové registry poznají podle toho, že začínají písmenem E:

32bitový registr Spodních 16 bitů Rozdělení horní/dolní bajt Funkce registru
EAX AX AH/AL akumulátor
EBX BX BH/BL bázový registr
ECX CX CH/CL čítač
EDX DX DH/DL datový registr
       
ESP SP   ukazatel na vrchol zásobníku
EBP BP   báze zásobníkového rámce
ESI SI   indexový registr pro zdroj dat
EDI DI   indexový registr pro cíl dat
       
EIP IP   ukazatel na prováděnou instrukci
Poznámka: zachování přístupu k 16bitovým polovinám registrů a dokonce k nejnižšímu bajtu a bajtu nad ním sice může vypadat zvláštně, ovšem tento koncept umožnil relativně dobrou práci s řetězci, což je například u klasických čistě RISCových procesorů sice možné (díky specializovaným instrukcím LOAD a STORE), ale ne plně efektivní.

3. Nové segmentové registry

Mikroprocesory 80386 mají k dispozici taktéž dva nové segmentové registry pojmenované jednoduše FS a GS. Tyto registry lze použít pro adresování libovolného segmentu operační paměti a nemají žádný další speciální význam, na rozdíl od původní čtveřice segmentových registrů CS (kódový segment), DS (datový segment), SS (segment se zásobníkem) a ES (použit u řetězcových a blokových operací). Ovšem pochopitelně u složitějších aplikací mohou být další dva segmentové registry užitečné a mohou je využívat i překladače vyšších programovacích jazyků. S těmito novými registry se pracuje stejně, jako s původní čtveřicí.

Poznámka: pochopitelně je otázkou, zda by nebylo lepší spíše přidat více pracovních registrů, to však původní schéma kódování instrukcí neumožňuje, takže jsme si museli počkat až na 64bitovou architekturu.

4. Kódování instrukcí s novými segmentovými registry

Zajímavé bude zjistit, jak se přidání nových segmentových registrů projevilo v kódování instrukcí, které s těmito registry pracují. Kupodivu k žádnému přidávání nových prefixových bajtů v případě některých instrukcí nedošlo, což si ostatně můžeme snadno ověřit na instrukci MOV:

;-----------------------------------------------------------------------------
 
BITS 16         ; 16bitovy vystup pro DOS
CPU 386         ; specifikace pouziteho instrukcniho souboru
 
; ukonceni procesu a navrat do DOSu
%macro exit 0
        ret
%endmacro
 
; vyprazdneni bufferu klavesnice a cekani na klavesu
%macro wait_key 0
        xor     ax, ax
        int     0x16
%endmacro
 
;-----------------------------------------------------------------------------
org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
 
start:
        mov  ax, ds
        mov  ax, es
        mov  ax, fs
        mov  ax, gs
        mov  ax, ss
        mov  ax, cs
 
        xor  ax, ax
        mov  ds, ax
        mov  es, ax
        mov  fs, ax
        mov  gs, ax
        mov  ss, ax
        mov  cs, ax  ; toto neni dobry napad!!!
 
        wait_key
        exit

Způsob překladu těchto instrukcí do strojového kódu:

     8                                  ;-----------------------------------------------------------------------------
     9
    10                                  BITS 16         ; 16bitovy vystup pro DOS
    11                                  CPU 386         ; specifikace pouziteho instrukcniho souboru
    12
    13                                  ; ukonceni procesu a navrat do DOSu
    14                                  %macro exit 0
    15                                          ret
    16                                  %endmacro
    17
    18                                  ; vyprazdneni bufferu klavesnice a cekani na klavesu
    19                                  %macro wait_key 0
    20                                          xor     ax, ax
    21                                          int     0x16
    22                                  %endmacro
    23
    24                                  ;-----------------------------------------------------------------------------
    25                                  org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
    26
    27                                  start:
    28 00000000 8CD8                            mov  ax, ds
    29 00000002 8CC0                            mov  ax, es
    30 00000004 8CE0                            mov  ax, fs
    31 00000006 8CE8                            mov  ax, gs
    32 00000008 8CD0                            mov  ax, ss
    33 0000000A 8CC8                            mov  ax, cs
    34
    35 0000000C 31C0                            xor  ax, ax
    36 0000000E 8ED8                            mov  ds, ax
    37 00000010 8EC0                            mov  es, ax
    38 00000012 8EE0                            mov  fs, ax
    39 00000014 8EE8                            mov  gs, ax
    40 00000016 8ED0                            mov  ss, ax
    41 00000018 8EC8                            mov  cs, ax  ; toto neni dobry napad!!!
    42
    43                                          wait_key
    20 0000001A 31C0                            xor ax, ax
    21 0000001C CD16                            int 0x16
    44                                          exit
    15 0000001E C3                              ret
Poznámka: všechny instrukce tedy mají stejnou délku i stejný první bajt.

5. Instrukce PUSH a POP s novými segmentovými registry

Při pohledu na demonstrační příklad uvedený v předchozí kapitole by se mohlo zdát, že přidání nových segmentových registrů FS a GS neznamenalo žádné zásadní změny v kódování instrukcí, protože se kódy těchto registrů „vešly“ do stávajícího schématu kódování. Ve skutečnosti tomu tak není ve všech případech, jelikož například u instrukcí PUSH a POP bylo nutné přidat instrukční prefix 0F (který mimochodem znamená, že instrukce POP CS již není podporována – o tom jsme se ostatně zmínili již minule):

Podívejme se tedy na kódování instrukcí PUSH a POP v případě, že jsou tyto instrukce použity společně se segmentovými registry:

;-----------------------------------------------------------------------------
 
BITS 16         ; 16bitovy vystup pro DOS
CPU 386         ; specifikace pouziteho instrukcniho souboru
 
; ukonceni procesu a navrat do DOSu
%macro exit 0
        ret
%endmacro
 
; vyprazdneni bufferu klavesnice a cekani na klavesu
%macro wait_key 0
        xor     ax, ax
        int     0x16
%endmacro
 
;-----------------------------------------------------------------------------
org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
 
start:
        push cs
        push ds
        push ss
        push es
        push fs
        push gs
 
        pop  gs
        pop  fs
        pop  es
        pop  ss
        pop  ds
        pop  cs
 
        wait_key
        exit

Z výsledného výpisu je patrné, že u nových segmentových registrů je použit instrukční prefix 0F, takže už tak složité schéma kódování instrukcí se nyní stává ještě složitějším (a to jsme teprve u třetí generace):

     7                                  ;-----------------------------------------------------------------------------
     8
     9                                  BITS 16         ; 16bitovy vystup pro DOS
    10                                  CPU 386         ; specifikace pouziteho instrukcniho souboru
    11
    12                                  ; ukonceni procesu a navrat do DOSu
    13                                  %macro exit 0
    14                                          ret
    15                                  %endmacro
    16
    17                                  ; vyprazdneni bufferu klavesnice a cekani na klavesu
    18                                  %macro wait_key 0
    19                                          xor     ax, ax
    20                                          int     0x16
    21                                  %endmacro
    22
    23                                  ;-----------------------------------------------------------------------------
    24                                  org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
    25
    26                                  start:
    27 00000000 0E                              push cs
    28 00000001 1E                              push ds
    29 00000002 16                              push ss
    30 00000003 06                              push es
    31 00000004 0FA0                            push fs
    32 00000006 0FA8                            push gs
    33
    34 00000008 0FA9                            pop  gs
    35 0000000A 0FA1                            pop  fs
    36 0000000C 07                              pop  es
    37 0000000D 17                              pop  ss
    38 0000000E 1F                              pop  ds
    39 0000000F 0F                              pop  cs
    39          ******************       warning: instruction obsolete and removed from the target CPU [-w+obsolete-removed]
    40
    41                                          wait_key
    19 00000010 31C0                            xor ax, ax
    20 00000012 CD16                            int 0x16
    42                                          exit
    14 00000014 C3                              ret

6. Práce s novými 32bitovými pracovními registry

V assembleru se s 32bitovými registry pracuje prakticky stejným způsobem, jako s původními registry šestnáctibitovými. To platí pro většinu aritmetických a logických instrukcí, což si ostatně můžeme snadno ukázat na demonstračním příkladu, v němž postupně sečteme dvojici osmibitových hodnot, dále dvojici 16bitových hodnot a konečně dvojici hodnot 32bitových:

; Instrukcni soubor mikroprocesoru Intel 80386.
;
; Tento demonstracni priklad je pouzity v serialu o programovani
; grafickych dem a her na PC v DOSu:
; https://www.root.cz/serialy/vyvoj-her-a-grafickych-dem-pro-platformu-pc/
;
;-----------------------------------------------------------------------------
 
BITS 16         ; 16bitovy vystup pro DOS
CPU 386         ; specifikace pouziteho instrukcniho souboru
 
; ukonceni procesu a navrat do DOSu
%macro exit 0
        ret
%endmacro
 
; vyprazdneni bufferu klavesnice a cekani na klavesu
%macro wait_key 0
        xor     ax, ax
        int     0x16
%endmacro
 
;-----------------------------------------------------------------------------
org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
 
start:
        mov  al, 1
        mov  ah, 1
        add  ah, al
 
        mov  ax, 1
        mov  bx, 1
        add  ax, bx
 
        mov  eax, 1
        mov  ebx, 1
        add  eax, ebx
 
        wait_key
        exit

Zajímavé bude zjištění, jak se tyto instrukce přeložily do strojového kódu:

     1                                  ; Instrukcni soubor mikroprocesoru Intel 80386.
     2                                  ;
     3                                  ; Tento demonstracni priklad je pouzity v serialu o programovani
     4                                  ; grafickych dem a her na PC v DOSu:
     5                                  ; https://www.root.cz/serialy/vyvoj-her-a-grafickych-dem-pro-platformu-pc/
     6                                  ;
     7                                  ;-----------------------------------------------------------------------------
     8
     9                                  BITS 16         ; 16bitovy vystup pro DOS
    10                                  CPU 386         ; specifikace pouziteho instrukcniho souboru
    11
    12                                  ; ukonceni procesu a navrat do DOSu
    13                                  %macro exit 0
    14                                          ret
    15                                  %endmacro
    16
    17                                  ; vyprazdneni bufferu klavesnice a cekani na klavesu
    18                                  %macro wait_key 0
    19                                          xor     ax, ax
    20                                          int     0x16
    21                                  %endmacro
    22
    23                                  ;-----------------------------------------------------------------------------
    24                                  org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
    25
    26                                  start:
    27 00000000 B001                            mov  al, 1
    28 00000002 B401                            mov  ah, 1
    29 00000004 00C4                            add  ah, al
    30
    31 00000006 B80100                          mov  ax, 1
    32 00000009 BB0100                          mov  bx, 1
    33 0000000C 01D8                            add  ax, bx
    34
    35 0000000E 66B801000000                    mov  eax, 1
    36 00000014 66BB01000000                    mov  ebx, 1
    37 0000001A 6601D8                          add  eax, ebx
    38
    39                                          wait_key
    19 0000001D 31C0                <1>  xor ax, ax
    20 0000001F CD16                <1>  int 0x16
    40                                          exit
    14 00000021 C3                  <1>  ret

Z výpisu je patrné, že nové 32bitové instrukce obsahují prefix 66H (a jsou tedy poměrně dlouhé, samozřejmě nepočítaje delší konstanty v instrukcích MOV):

B001               mov  al, 1
B401               mov  ah, 1
00C4               add  ah, al
 
B80100             mov  ax, 1
BB0100             mov  bx, 1
01D8               add  ax, bx
 
66B801000000       mov  eax, 1
66BB01000000       mov  ebx, 1
6601D8             add  eax, ebx

7. Kódování instrukcí v šestnáctibitovém režimu mikroprocesorů

V předchozí kapitole jsme viděli, že se 32bitové instrukce MOV a ADD přeložily takovým způsobem, že samotné instrukční slovo zůstalo stejné jako u 16bitových variant, ovšem před instrukci byl přidán prefix 0×66. Vyzkoušejme si tento koncept ještě na jedné instrukci, která je jednodušší. Jedná se o instrukci INC, která se v kombinaci s registrem AX přeloží do jediného bajtu (optimalizace právě pro akumulátor). Instrukci INC opět použijeme pro osmibitový, šestnáctibitový i 32bitový operand:

; Instrukcni soubor mikroprocesoru Intel 80386.
;
; Tento demonstracni priklad je pouzity v serialu o programovani
; grafickych dem a her na PC v DOSu:
; https://www.root.cz/serialy/vyvoj-her-a-grafickych-dem-pro-platformu-pc/
;
;-----------------------------------------------------------------------------
 
BITS 16         ; 16bitovy vystup pro DOS
CPU 386         ; specifikace pouziteho instrukcniho souboru
 
; ukonceni procesu a navrat do DOSu
%macro exit 0
        ret
%endmacro
 
; vyprazdneni bufferu klavesnice a cekani na klavesu
%macro wait_key 0
        xor     ax, ax
        int     0x16
%endmacro
 
;-----------------------------------------------------------------------------
org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
 
start:
        xor  al, al
        inc  al
 
        xor  ax, ax
        inc  ax
 
        xor  eax, eax
        inc  eax
 
        wait_key
        exit

Překlad do strojového kódu může na listingu vyprodukovaného assemblerem vypadat následovně:

     1                                  ; Instrukcni soubor mikroprocesoru Intel 80386.
     2                                  ;
     3                                  ; Tento demonstracni priklad je pouzity v serialu o programovani
     4                                  ; grafickych dem a her na PC v DOSu:
     5                                  ; https://www.root.cz/serialy/vyvoj-her-a-grafickych-dem-pro-platformu-pc/
     6                                  ;
     7                                  ;-----------------------------------------------------------------------------
     8
     9                                  BITS 16         ; 16bitovy vystup pro DOS
    10                                  CPU 386         ; specifikace pouziteho instrukcniho souboru
    11
    12                                  ; ukonceni procesu a navrat do DOSu
    13                                  %macro exit 0
    14                                          ret
    15                                  %endmacro
    16
    17                                  ; vyprazdneni bufferu klavesnice a cekani na klavesu
    18                                  %macro wait_key 0
    19                                          xor     ax, ax
    20                                          int     0x16
    21                                  %endmacro
    22
    23                                  ;-----------------------------------------------------------------------------
    24                                  org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
    25
    26                                  start:
    27 00000000 30C0                            xor  al, al
    28 00000002 FEC0                            inc  al
    29
    30 00000004 31C0                            xor  ax, ax
    31 00000006 40                              inc  ax
    32
    33 00000007 6631C0                          xor  eax, eax
    34 0000000A 6640                            inc  eax
    35
    36                                          wait_key
    19 0000000C 31C0                <1>  xor ax, ax
    20 0000000E CD16                <1>  int 0x16
    37                                          exit
    14 00000010 C3                  <1>  ret

Konkrétně se zaměřme jen na instrukci INC s akumulátorem:

FEC0          inc  al
40            inc  ax
6640          inc  eax

Opět tedy platí, že před 32bitovou variantu byl pouze vložen prefix 0×66.

8. Kódování instrukcí v 32bitovém režimu mikroprocesorů

Mohlo by se zdát, že třetí generace mikroprocesorů sice dokáže provádět 32bitové operace, ale platíme za to dosti vysokou cenu – každá instrukce je o bajt delší, což ovlivňuje využití cache atd. Ve skutečnosti tomu tak je pouze v původním šestnáctibitovém režimu mikroprocesorů. Pokud se mikroprocesor nachází v režimu 32bitovém (čehož ovšem není zcela snadné dosáhnout), bude situace prakticky opačná. Jak by situace vypadala v 32bitovém režimu, si můžeme ověřit překladem následujícího příkladu, v němž jsme pozměnili specifikaci BITS 16 na BITS 32. Výsledný binární soubor sice nebude v DOSu přímo spustitelný, ovšem nás nyní zajímá především způsob zakódování 32bitových instrukcí:

; Instrukcni soubor mikroprocesoru Intel 80386.
;
; Tento demonstracni priklad je pouzity v serialu o programovani
; grafickych dem a her na PC v DOSu:
; https://www.root.cz/serialy/vyvoj-her-a-grafickych-dem-pro-platformu-pc/
;
;-----------------------------------------------------------------------------
 
BITS 32         ; 16bitovy vystup pro DOS
CPU 386         ; specifikace pouziteho instrukcniho souboru
 
; ukonceni procesu a navrat do DOSu
%macro exit 0
        ret
%endmacro
 
; vyprazdneni bufferu klavesnice a cekani na klavesu
%macro wait_key 0
        xor     ax, ax
        int     0x16
%endmacro
 
;-----------------------------------------------------------------------------
org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
 
start:
        xor  al, al
        inc  al
 
        xor  ax, ax
        inc  ax
 
        xor  eax, eax
        inc  eax
 
        wait_key
        exit

Listing vyprodukovaný assemblerem:

     1                                  ; Instrukcni soubor mikroprocesoru Intel 80386.
     2                                  ;
     3                                  ; Tento demonstracni priklad je pouzity v serialu o programovani
     4                                  ; grafickych dem a her na PC v DOSu:
     5                                  ; https://www.root.cz/serialy/vyvoj-her-a-grafickych-dem-pro-platformu-pc/
     6                                  ;
     7                                  ;-----------------------------------------------------------------------------
     8
     9                                  BITS 32         ; 16bitovy vystup pro DOS
    10                                  CPU 386         ; specifikace pouziteho instrukcniho souboru
    11
    12                                  ; ukonceni procesu a navrat do DOSu
    13                                  %macro exit 0
    14                                          ret
    15                                  %endmacro
    16
    17                                  ; vyprazdneni bufferu klavesnice a cekani na klavesu
    18                                  %macro wait_key 0
    19                                          xor     ax, ax
    20                                          int     0x16
    21                                  %endmacro
    22
    23                                  ;-----------------------------------------------------------------------------
    24                                  org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
    25
    26                                  start:
    27 00000000 30C0                            xor  al, al
    28 00000002 FEC0                            inc  al
    29
    30 00000004 6631C0                          xor  ax, ax
    31 00000007 6640                            inc  ax
    32
    33 00000009 31C0                            xor  eax, eax
    34 0000000B 40                              inc  eax
    35
    36                                          wait_key
    19 0000000C 6631C0              <1>  xor ax, ax
    20 0000000F CD16                <1>  int 0x16
    37                                          exit
    14 00000011 C3                  <1>  ret

Opět se zaměřme pouze na instrukce INC s akumulátorem. Oproti šestnáctibitové variantě se situace otočila – nyní mají prefix 0×66 šestnáctibitové operace (jsou tedy delší) zatímco operace 32bitové tento prefix nemají. Osmibitových variant se přepnutí režimu mikroprocesoru nijak nedotklo:

FEC0         inc  al
6640         inc  ax
40           inc  eax
Poznámka: tato změna se týká i mnoha dalších instrukcí, které byly rozšířeny tak, aby dokázaly pracovat s 32bitovými operandy.

9. Rozšíření možností instrukcí skoku

V instrukčním souboru mikroprocesorů řady Intel 80386 došlo i k rozšíření instrukcí pro nepodmíněné a podmíněné skoky. Z hlediska relativně malých programů (tedy i programů typu COM) je důležité především rozšíření původně pouze lokálních (krátkých) skoků na takzvané „blízké“ (near) skoky, což se týká především podmíněných skoků. Připomeňme si, že původně byly cílové adresy těchto skoků omezeny na relativní rozsah –128 až 127 od aktuální hodnoty registru IP. To vyhovuje spíše pro malé subrutiny, ovšem zejména při překladu programů z vyšších programovacích jazyků do strojového kódu může být tento rozsah nedostatečný. Blízké skoky tento problém řeší, protože skok je možné provést na libovolnou adresu v aktuálně nastaveném kódovém segmentu (CS). Proto se někdy tyto skoky nazývají intrasegment jump. A konečně je nově možné provést i dlouhé skoky (far jump) mimo aktuální segment. Tyto skoky se z tohoto důvodu nazývají intersegment jump.

10. Základní varianta: lokální skoky

Pro krátké zopakování se podívejme na jednoduchý demonstrační příklad, který po svém spuštění vypíše na terminál desetkrát tu samou zprávu. Interně je v tomto příkladu realizována programová smyčka instrukcí JMP, ze které je možné po dosáhnutí konečné hodnoty čítače vyskočit instrukcí JZ. Tento příklad je plně kompatibilní s původními mikroprocesory řady Intel 8086 a Intel 8088 a pochopitelně je dopředně kompatibilní i s dalšími typy mikroprocesorů:

; Instrukcni soubor mikroprocesoru Intel 8088 a Intel 8086
;
;-----------------------------------------------------------------------------
 
BITS 16         ; 16bitovy vystup pro DOS
CPU 8086        ; specifikace pouziteho instrukcniho souboru
 
;-----------------------------------------------------------------------------
org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
 
start:
        mov     cx, 10       ; pocatecni hodnota pocitadla
opak:
        ; tisk retezce na obrazovku
        mov     dx, message
        mov     ah, 9
        int     0x21
 
        dec     cx            ; snizeni pocitadla o jednicku
        jz      konec         ; skok, pokus se dosahne nuly
 
        jmp     opak          ; opakujeme smycku
konec:
        ; ukonceni procesu a navrat do DOSu
        mov     ah, 0x4c
        int     0x21
 
 
        ; retezec ukonceny znakem $
        ; (tato data jsou soucasti vysledneho souboru typu COM)
message db "Hello, world!", 0x0d, 0x0a, "$"

Způsob překladu do strojového kódu nám osvětlí listing vygenerovaný assemblerem v průběhu překladu:

     1                                  ; Instrukcni soubor mikroprocesoru Intel 8088 a Intel 8086
     2                                  ;
     3                                  ; Tento demonstracni priklad je pouzity v serialu o programovani
     4                                  ; grafickych dem a her na PC v DOSu:
     5                                  ; https://www.root.cz/serialy/vyvoj-her-a-grafickych-dem-pro-platformu-pc/
     6                                  ;
     7                                  ;-----------------------------------------------------------------------------
     8
     9                                  BITS 16         ; 16bitovy vystup pro DOS
    10                                  CPU 8086        ; specifikace pouziteho instrukcniho souboru
    11
    12                                  ;-----------------------------------------------------------------------------
    13                                  org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
    14
    15                                  start:
    16 00000000 B90A00                          mov     cx, 10       ; pocatecni hodnota pocitadla
    17                                  opak:
    18                                          ; tisk retezce na obrazovku
    19 00000003 BA[1300]                        mov     dx, message
    20 00000006 B409                            mov     ah, 9
    21 00000008 CD21                            int     0x21
    22
    23 0000000A 49                              dec     cx            ; snizeni pocitadla o jednicku
    24 0000000B 7402                            jz      konec         ; skok, pokus se dosahne nuly
    25
    26 0000000D EBF4                            jmp     opak          ; opakujeme smycku
    27                                  konec:
    28                                          ; ukonceni procesu a navrat do DOSu
    29 0000000F B44C                            mov     ah, 0x4c
    30 00000011 CD21                            int     0x21
    31
    32
    33                                          ; retezec ukonceny znakem $
    34                                          ; (tato data jsou soucasti vysledneho souboru typu COM)
    35 00000013 48656C6C6F2C20776F-     message db "Hello, world!", 0x0d, 0x0a, "$"
    35 0000001C 726C64210D0A24

Zaměřme se na instrukce skoku. Ty jsou přeloženy do instrukcí s délkou pouhé dva bajty, přičemž v prvním bajtu je uložen operační kód instrukce a v bajtu druhém je relativní osmibitová adresa. Takto zakódované skoky jsou tedy omezeny na lokální rozsah –128 až 127 přičtený k aktuální hodnotě registru IP (Instruction Pointer):

7402     jz  konec     ; skok, pokus se dosahne nuly
 
EBF4     jmp opak      ; opakujeme smycku

11. Rozšířená varianta: „blízké“ skoky

U mikroprocesorů řady 80386 (a vyšších) lze použít i takzvané blízké skoky neboli near jumps, které umožňují provedení skoku na libovolné místo v kódovém segmentu. Adresa takového skoku je pochopitelně šestnáctibitová a díky tomu, že platí v rámci segmentu, není nutné provádět žádné testy, zda skok náhodou neporušuje izolaci programu (což se týká chráněného režimu). Blízké skoky dokáže assembler generovat automaticky ve chvíli, kdy je cíl skoku vzdálenější než relativní offset –128 až 127. Ovšem blízký skok si můžeme i vynutit modifikátorem near. Tento koncept je ukázán v následujícím demonstračním příkladu:

; Instrukcni soubor mikroprocesoru Intel 80386.
;
; Tento demonstracni priklad je pouzity v serialu o programovani
; grafickych dem a her na PC v DOSu:
; https://www.root.cz/serialy/vyvoj-her-a-grafickych-dem-pro-platformu-pc/
;
;-----------------------------------------------------------------------------
 
BITS 16         ; 16bitovy vystup pro DOS
CPU 386         ; specifikace pouziteho instrukcniho souboru
 
;-----------------------------------------------------------------------------
org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
 
start:
        mov     cx, 10       ; pocatecni hodnota pocitadla
opak:
        ; tisk retezce na obrazovku
        mov     dx, message
        mov     ah, 9
        int     0x21
 
        dec     cx            ; snizeni pocitadla o jednicku
        jz      near konec    ; skok, pokus se dosahne nuly

        jmp     near opak     ; opakujeme smycku
konec:
        ; ukonceni procesu a navrat do DOSu
        mov     ah, 0x4c
        int     0x21
 
 
        ; retezec ukonceny znakem $
        ; (tato data jsou soucasti vysledneho souboru typu COM)
message db "Hello, world!", 0x0d, 0x0a, "$"

Způsob překladu do strojového kódu opět zjistíme z listingu:

     1                                  ; Instrukcni soubor mikroprocesoru Intel 80386.
     2                                  ;
     3                                  ; Tento demonstracni priklad je pouzity v serialu o programovani
     4                                  ; grafickych dem a her na PC v DOSu:
     5                                  ; https://www.root.cz/serialy/vyvoj-her-a-grafickych-dem-pro-platformu-pc/
     6                                  ;
     7                                  ;-----------------------------------------------------------------------------
     8
     9                                  BITS 16         ; 16bitovy vystup pro DOS
    10                                  CPU 386         ; specifikace pouziteho instrukcniho souboru
    11
    12                                  ;-----------------------------------------------------------------------------
    13                                  org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
    14
    15                                  start:
    16 00000000 B90A00                          mov     cx, 10       ; pocatecni hodnota pocitadla
    17                                  opak:
    18                                          ; tisk retezce na obrazovku
    19 00000003 BA[1600]                        mov     dx, message
    20 00000006 B409                            mov     ah, 9
    21 00000008 CD21                            int     0x21
    22
    23 0000000A 49                              dec     cx            ; snizeni pocitadla o jednicku
    24 0000000B 0F840300                        jz      near konec    ; skok, pokus se dosahne nuly
    25
    26 0000000F E9F1FF                          jmp     near opak     ; opakujeme smycku
    27                                  konec:
    28                                          ; ukonceni procesu a navrat do DOSu
    29 00000012 B44C                            mov     ah, 0x4c
    30 00000014 CD21                            int     0x21
    31
    32
    33                                          ; retezec ukonceny znakem $
    34                                          ; (tato data jsou soucasti vysledneho souboru typu COM)
    35 00000016 48656C6C6F2C20776F-     message db "Hello, world!", 0x0d, 0x0a, "$"
    35 0000001F 726C64210D0A24

Povšimněte si, jak jsou nyní instrukce skoku zakódovány. Problematický je především první skok, který má namísto dvou bajtů délku celých čtyř bajtů:

0000000B 0F840300       jz      near konec    ; skok, pokus se dosahne nuly
 
0000000F E9F1FF         jmp     near opak     ; opakujeme smycku

12. Krátké vs. blízké skoky z pohledu kódování instrukcí

Zatímco u rozšíření instrukcí zmíněných v předchozím textu většinou došlo pouze k přidání prefixu před operační kód instrukce, je tomu u blízkých skoků jinak, protože se kromě prefixu (ten zde stále existuje a má hodnotu 0F) změní i samotný operační kód instrukce. Tato nepravidelnost je patrná z následující tabulky se základními formami skoků. Pro úplnost uvádím i všechny alternativy jmen instrukcí:

Instrukce Význam Testovaná podmínka Krátký skok Blízký skok
JO Jump if Overflow OF = 1 70 0F 80
JNO Jump if Not Overflow OF = 0 71 0F 81
JS Jump if Sign SF = 1 78 0F 88
JNS Jump if Not Sign SF = 0 79 0F 89
JE Jump if Equal ZF = 1 74 0F 84
JZ Jump if Zero ZF = 1 74 0F 84
JNE Jump if Not Equal ZF = 0 75 0F 85
JNZ Jump if Not Zero ZF = 0 75 0F 85
JB Jump if Below CF = 1 72 0F 82
JNAE Jump if Not Above or Equal CF = 1 72 0F 82
JC Jump if Carry CF = 1 72 0F 82
JNB Jump if Not Below CF = 0 73 0F 83
JAE Jump if Above or Equal CF = 0 73 0F 83
JNC Jump if Not Carry CF = 0 73 0F 83
JBE Jump if Below or Equal CF = 1 | ZF = 1 76 0F 86
JNA Jump if Not Above CF = 1 | ZF = 1 76 0F 86
JA Jump if Above CF = 0 & ZF = 0 77 0F 87
JNBE Jump if Not Below or Equal CF = 0 & ZF = 0 77 0F 87
JL Jump if Less SF <> OF 7C 0F 8C
JNGE Jump if Not Greater or Equal SF <> OF 7C 0F 8C
JGE Jump if Greater or Equal SF = OF 7D 0F 8D
JNL Jump if Not Less SF = OF 7D 0F 8D
JLE Jump if Less or Equal ZF = 1 | SF <> OF 7E 0F 8E
JNG Jump if Not Greater ZF = 1 | SF <> OF 7E 0F 8E
JG Jump if Greater ZF = 0 & SF = OF 7F 0F 8F
JNLE Jump if Not Less or Equal ZF = 0 & SF = OF 7F 0F 8F
JP Jump if Parity PF = 1 7A 0F 8A
JPE Jump if Parity Even PF = 1 7A 0F 8A
JNP Jump if Not Parity PF = 0 7B 0F 8B
JPO Jump if Parity Odd PF = 0 7B 0F 8B

13. Dlouhé skoky

Provádět je možné i takzvané dlouhé skoky, tj. skoky, při nichž se mění jak hodnota registru EIP (ano i tento registr je nyní 32bitový), tak i hodnota CS (kódový segment). Adresa cíle skoku nyní musí obsahovat plný ukazatel (tj. segment+16bitový offset nebo dokonce segment+32bitový offset) a může být zadána buď skutečně jako absolutní adresa, nebo jako adresa na ukazatel obsahující vlastní adresu cíle skoku. V prvním případě je pochopitelně adresa součástí instrukčního slova (4 bajty nebo šest bajtů), ve druhém případě se jedná o čtyřbajtovou nebo šestibajtovou adresu ukazatele. S podrobnostmi se seznámíme příště při popisu způsobů adresace paměti, která přesahuje základní 1MB.

14. Nové instrukce pro konverzi dat

Procesory ze třetí generace čipů 80×86 mají rozšířenou sadu instrukcí určenou pro konverze dat. Těmito instrukcemi jsme se prozatím v tomto seriálu podrobněji nezabývali, takže si nyní vypišme všechny dostupné varianty i s jejich stručným popisem. To, zda se jedná o nové instrukce či nikoli, je patrné z obsahu druhého sloupce:

Instrukce Kompatibilita Stručný popis instrukce
CBW 8086 znaménkové rozšíření AL→AX
CWD 8086 znaménkové rozšíření AX→DX:AX
CWDE 80386 znaménkové rozšíření AX→EAX
CDQ 80386 znaménkové rozšíření EAX→EDX:EAX

Tyto instrukce původní osmibitovou, 16bitovou či 32bitovou hodnotu rozšíří na dvojnásobnou šířku, přičemž berou v úvahu znaménko (nejedná se tedy o pouhé vynulování horních bitů registru či dvojice registrů). V rámci čipů 80386 byly přidány instrukce CWDE a CDQ. Zajímavé je, že tyto instrukce trvají dva cykly, zatímco instrukce původní (jednodušší) trvají cykly tři.

Kódování těchto instrukcí v šestnáctibitovém režimu:

98          cbw
99          cwd
6698        cwde
6699        cdq

Opět zde tedy můžeme vidět prefix 66.

15. Rozšíření hodnoty bez znaménka při přenosu dat

Instrukce uvedené v předchozí kapitole pracují pouze s akumulátorem popř. s dvojicí registrů D:A (DX:AX nebo EDX:EAX). Čipy 80386 jsou ale doplněny i obecnějšími instrukcemi určenými pro rozšíření hodnoty při přenosu dat z/do jiných registrů nebo z operační paměti. Jedná se tedy o variantu obecné přenosové instrukce MOV nazvanou MOVZX, ovšem s tím, že se horních osm bitů resp. šestnáct bitů vynuluje:

Instrukce Operandy Stručný popis instrukce
MOVZX reg16, reg8 přenos z osmibitového registru do registru 16bitového s vynulováním horních osmi bitů
MOVZX reg32, reg16 přenos z 16bitového registru do registru 32bitového s vynulováním horních šestnácti bitů
MOVZX reg16, mem přenos osmi bitů z operační paměti s vynulováním horních osmi bitů
MOVZX reg32, mem přenos šestnácti bitů z operační paměti s vynulováním horních šestnácti bitů
Poznámka: další adresovací režimy podporované instrukcí MOV nejsou u MOVZX podporovány.

16. Rozšíření hodnoty z šestnáctibitového registru do registru 32bitového

K dispozici je i instrukce nazvaná MOVSX umožňující přenosy dat se znaménkovým rozšířením. Pro kladné hodnoty (nejvyšší bit je nulový) je tato instrukce totožná s výše uvedenou MOVZX, pro hodnoty záporné (nejvyšší bit nastaven na jedničku) se pak vyšší polovina cílového registru taktéž nastaví na jedničku:

Instrukce Operandy Stručný popis instrukce
MOVSX reg16, reg8 přenos z osmibitového registru do registru 16bitového se znaménkovým rozšířením do horních osmi bitů
MOVSX reg32, reg16 přenos z 16bitového registru do registru 32bitového se znaménkovým rozšířením do horních šestnácti bitů
MOVSX reg16, mem přenos osmi bitů z operační paměti se znaménkovým rozšířením do horních osmi bitů
MOVSX reg32, mem přenos šestnácti bitů z operační paměti se znaménkovým rozšířením do horních šestnácti bitů

Pro zajímavost se podívejme na způsob zakódování těchto instrukcí do strojového kódu:

0FB6DB             movzx bx, bl
660FB6DB           movzx ebx, bl
660FB7DB           movzx ebx, bx
0FB61E[0000]       movzx bx, byte [data]
660FB71E[0000]     movzx ebx, word [data]
0FBEDB             movsx bx, bl
660FBEDB           movsx ebx, bl
660FBFDB           movsx ebx, bx
0FBE1E[0000]       movsx bx, byte [data]
660FBF1E[0000]     movsx ebx, word [data]
Poznámka: nyní jsou u některých kombinací použity dokonce dva instrukční prefixy 66 i 0F.

17. Nové bitové operace

Mikroprocesory 80386 mají k dispozici i instrukce pro provádění různých bitových operací. Jedná se velmi užitečné nízkoúrovňové operace a podobné instrukce nalezneme například v mnoha mikrořadičích:

Instrukce Operandy Stručný popis instrukce
BT src, n n-tý bit se zkopíruje do příznaku Carry
BTC src, n negace n-tého bitu se zkopíruje do příznaku Carry
BTR src, n jako instrukce BT, ale bit se poté vynuluje
BTS src, n jako instrukce BT, ale bit se poté nastaví na 1
     
BSF dest, src hledá první nenulový bit od bitu nejnižšího
BSR dest, src hledá první nenulový bit od bitu nejvyššího

Pro zajímavost si uveďme program, který zjistí index prvního nenulového bitu při procházení slovem zprava doleva, tj. od nejnižšího bitu směrem k bitu nejvyššímu. Instrukce, která tuto činnost provádí, se jmenuje BSF neboli celým jménem Bit Scan Forward:

; Instrukcni soubor mikroprocesoru Intel 80386.
; Test instrukce BSF.
;
;-----------------------------------------------------------------------------
 
BITS 16         ; 16bitovy vystup pro DOS
CPU 386         ; specifikace pouziteho instrukcniho souboru
 
; ukonceni procesu a navrat do DOSu
%macro exit 0
        ret
%endmacro
 
; vyprazdneni bufferu klavesnice a cekani na klavesu
%macro wait_key 0
        xor     ax, ax
        int     0x16
%endmacro
 
; tisk retezce na obrazovku
%macro print 1
        mov     dx, %1
        mov     ah, 9
        int     0x21
%endmacro
 
; tisk hexadecimalni hodnoty
%macro print_hex 1
        mov     bx, hex_digits
        mov     cl, %1                ; zapamatovat si predanou hodnotu
 
        mov     al, cl                ; do AL se vlozi horni hexa cifra
        and     al, 0xf0
        shr     al, 1
        shr     al, 1
        shr     al, 1
        shr     al, 1
 
        xlat                          ; prevod hodnoty 0-15 na ASCII znak
        mov     [message], al         ; zapis ASCII znaku do retezce
 
        mov     al, cl                ; do BL se vlozi dolni hexa cifra
        and     al, 0x0f
        xlat                          ; prevod hodnoty 0-15 na ASCII znak
        mov     [message + 1], al     ; zapis ASCII znaku do retezce
 
        print   message
%endmacro
 
;-----------------------------------------------------------------------------
org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
 
start:
        mov  ebx, 0x00030000 ; nastavení bitu
    bsf  eax, ebx        ; vyhledání prvního nenulového bitu
        print_hex al         ; výsledek je v EAX, ovšem nám stačí jen AL
 
        wait_key
        exit
 
        ; retezec ukonceny znakem $
        ; (tato data jsou soucasti vysledneho souboru typu COM)
message db 0x01, 0x01, 0x0d, 0x0a, "$"
 
        ; prevodni tabulka hodnoty 0-15 na ASCII znak
hex_digits db "0123456789abcdef"

Tento program po svém spuštění vypíše hexadecimální hodnotu 10, protože první nenulový bit zprava je skutečně na pozici číslo 16 (počítáno od nuly). Ovšem pokud zaměníme instrukci BSF za BSR, vypíše se hexadecimální hodnota 11, jelikož hledáme první nenulový bit zleva (od nejvyššího bitu). Tato varianta příkladu vypadá následovně:

bitcoin školení listopad 24

; Instrukcni soubor mikroprocesoru Intel 80386.
; Test instrukce BSR.
;
;-----------------------------------------------------------------------------
 
BITS 16         ; 16bitovy vystup pro DOS
CPU 386         ; specifikace pouziteho instrukcniho souboru
 
; ukonceni procesu a navrat do DOSu
%macro exit 0
        ret
%endmacro
 
; vyprazdneni bufferu klavesnice a cekani na klavesu
%macro wait_key 0
        xor     ax, ax
        int     0x16
%endmacro
 
; tisk retezce na obrazovku
%macro print 1
        mov     dx, %1
        mov     ah, 9
        int     0x21
%endmacro
 
; tisk hexadecimalni hodnoty
%macro print_hex 1
        mov     bx, hex_digits
        mov     cl, %1                ; zapamatovat si predanou hodnotu
 
        mov     al, cl                ; do AL se vlozi horni hexa cifra
        and     al, 0xf0
        shr     al, 1
        shr     al, 1
        shr     al, 1
        shr     al, 1
 
        xlat                          ; prevod hodnoty 0-15 na ASCII znak
        mov     [message], al         ; zapis ASCII znaku do retezce
 
        mov     al, cl                ; do BL se vlozi dolni hexa cifra
        and     al, 0x0f
        xlat                          ; prevod hodnoty 0-15 na ASCII znak
        mov     [message + 1], al     ; zapis ASCII znaku do retezce
 
        print   message
%endmacro
 
;-----------------------------------------------------------------------------
org  0x100        ; zacatek kodu pro programy typu COM (vzdy se zacina na 256)
 
start:
        mov  ebx, 0x00030000 ; nastavení bitu
    bsr  eax, ebx        ; vyhledání prvního nenulového bitu
        print_hex al         ; výsledek je v EAX, ovšem nám stačí jen AL
 
        wait_key
        exit
 
        ; retezec ukonceny znakem $
        ; (tato data jsou soucasti vysledneho souboru typu COM)
message db 0x01, 0x01, 0x0d, 0x0a, "$"
 
        ; prevodni tabulka hodnoty 0-15 na ASCII znak
hex_digits db "0123456789abcdef"

18. Nastavení výsledku pravdivostní operace

Poslední sada instrukcí, které si dnes popíšeme, slouží pro nastavení hodnoty 0 nebo 1 do zvoleného osmibitového registru nebo do adresy v operační paměti. To, jaká hodnota se zapíše, záleží na vyhodnocení podmínky, přičemž samotné podmínky jsou naprosto stejné, jako u podmíněných skoků. Nastavením 0/1 se vlastně instrukční sada mikroprocesorů řady 80386 přibližuje požadavkům vyšších programovacích jazyků, zejména pak klasického céčka. V následující tabulce jsou uvedeny všechny jmenné aliasy instrukcí (mnohé instrukce mají stejný význam, jen odlišné jméno):

Instrukce Operandy Stručný popis instrukce
SETO Set to 1 if Overflow OF = 1
SETNO Set to 1 if Not Overflow OF = 0
SETS Set to 1 if Sign SF = 1
SETNS Set to 1 if Not Sign SF = 0
SETE Set to 1 if Equal ZF = 1
SETZ Set to 1 if Zero ZF = 1
SETNE Set to 1 if Not Equal ZF = 0
SETNZ Set to 1 if Not Zero ZF = 0
SETB Set to 1 if Below CF = 1
SETNAE Set to 1 if Not Above or Equal CF = 1
SETC Set to 1 if Carry CF = 1
SETNB Set to 1 if Not Below CF = 0
SETAE Set to 1 if Above or Equal CF = 0
SETNC Set to 1 if Not Carry CF = 0
SETBE Set to 1 if Below or Equal CF = 1 | ZF = 1
SETNA Set to 1 if Not Above CF = 1 | ZF = 1
SETA Set to 1 if Above CF = 0 & ZF = 0
SETNBE Set to 1 if Not Below or Equal CF = 0 & ZF = 0
SETL Set to 1 if Less SF <> OF
SETNGE Set to 1 if Not Greater or Equal SF <> OF
SETGE Set to 1 if Greater or Equal SF = OF
SETNL Set to 1 if Not Less SF = OF
SETLE Set to 1 if Less or Equal ZF = 1 | SF <> OF
SETNG Set to 1 if Not Greater ZF = 1 | SF <> OF
SETG Set to 1 if Greater ZF = 0 & SF = OF
SETNLE Set to 1 if Not Less or Equal ZF = 0 & SF = OF
SETP Set to 1 if Parity PF = 1
SETPE Set to 1 if Parity Even PF = 1
SETNP Set to 1 if Not Parity PF = 0
SETPO Set to 1 if Parity Odd PF = 0

19. Repositář s demonstračními příklady

Demonstrační příklady napsané v assembleru, které jsou určené pro překlad s využitím assembleru NASM, byly uloženy do Git repositáře, který je dostupný na adrese https://github.com/tisnik/8bit-fame. Jednotlivé demonstrační příklady si můžete v případě potřeby stáhnout i jednotlivě bez nutnosti klonovat celý (dnes již poměrně rozsáhlý) repositář:

# Příklad Stručný popis Adresa
1 hello.asm program typu „Hello world“ naprogramovaný v assembleru pro systém DOS https://github.com/tisnik/8bit-fame/blob/master/pc-dos/hello.asm
2 hello_shorter.asm kratší varianta výskoku z procesu zpět do DOSu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/hello_shorter.asm
3 hello_wait.asm čekání na stisk klávesy https://github.com/tisnik/8bit-fame/blob/master/pc-dos/hello_wait.asm
4 hello_macros.asm realizace jednotlivých částí programu makrem https://github.com/tisnik/8bit-fame/blob/master/pc-dos/hello_macros.asm
       
5 gfx4_putpixel.asm vykreslení pixelu v grafickém režimu 4 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx4_putpixel.asm
6 gfx6_putpixel.asm vykreslení pixelu v grafickém režimu 6 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_putpixel.asm
7 gfx4_line.asm vykreslení úsečky v grafickém režimu 4 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx4_line.asm
8 gfx6_line.asm vykreslení úsečky v grafickém režimu 6 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_line.asm
       
9 gfx6_fill1.asm vyplnění obrazovky v grafickém režimu, základní varianta https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_fill1.asm
10 gfx6_fill2.asm vyplnění obrazovky v grafickém režimu, varianta s instrukcí LOOP https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_fill2.asm
11 gfx6_fill3.asm vyplnění obrazovky instrukcí REP STOSB https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_fill3.asm
12 gfx6_fill4.asm vyplnění obrazovky, synchronizace vykreslování s paprskem https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_fill4.asm
       
13 gfx4_image1.asm vykreslení rastrového obrázku získaného z binárních dat, základní varianta https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx4_image1.asm
14 gfx4_image2.asm varianta vykreslení rastrového obrázku s využitím instrukce REP MOVSB https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx4_image2.asm
15 gfx4_image3.asm varianta vykreslení rastrového obrázku s využitím instrukce REP MOVSW https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx4_image3.asm
16 gfx4_image4.asm korektní vykreslení všech sudých řádků bitmapy https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx4_image4.asm
17 gfx4_image5.asm korektní vykreslení všech sudých i lichých řádků bitmapy https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx4_image5.asm
       
18 gfx4_image6.asm nastavení barvové palety před vykreslením obrázku https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx4_image6.asm
19 gfx4_image7.asm nastavení barvové palety před vykreslením obrázku, snížená intenzita barev https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx4_image7.asm
20 gfx4_image8.asm postupná změna barvy pozadí https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx4_image8.asm
       
21 gfx6_putpixel1.asm vykreslení pixelu, základní varianta se 16bitovým násobením https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_putpixel1.asm
22 gfx6_putpixel2.asm vykreslení pixelu, varianta s osmibitovým násobením https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_putpixel2.asm
23 gfx6_putpixel3.asm vykreslení pixelu, varianta bez násobení https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_putpixel3.asm
24 gfx6_putpixel4.asm vykreslení pixelu přes obrázek, nekorektní chování (přepis obrázku) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_putpixel4.asm
25 gfx6_putpixel5.asm vykreslení pixelu přes obrázek, korektní varianta pro bílé pixely https://github.com/tisnik/8bit-fame/blob/master/pc-dos/gfx6_putpixel5.asm
       
26 cga_text_mode1.asm standardní textový režim s rozlišením 40×25 znaků https://github.com/tisnik/8bit-fame/blob/master/pc-dos/cga_text_mode1.asm
27 cga_text_mode3.asm standardní textový režim s rozlišením 80×25 znaků https://github.com/tisnik/8bit-fame/blob/master/pc-dos/cga_text_mode3.asm
28 cga_text_mode_intensity.asm změna významu nejvyššího bitu atributového bajtu: vyšší intenzita namísto blikání https://github.com/tisnik/8bit-fame/blob/master/pc-dos/cga_text_mode_intensity.asm
29 cga_text_mode_cursor.asm změna tvaru textového kurzoru https://github.com/tisnik/8bit-fame/blob/master/pc-dos/cga_text_mode_cursor.asm
30 cga_text_gfx1.asm zobrazení „rastrové mřížky“: pseudografický režim 160×25 pixelů (interně textový režim) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/cga_text_gfx1.asm
31 cga_text_mode_char_height.asm změna výšky znaků https://github.com/tisnik/8bit-fame/blob/master/pc-dos/cga_text_mode_char_height.asm
32 cga_text_160×100.asm grafický režim 160×100 se šestnácti barvami (interně upravený textový režim) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/cga_text_160×100.asm
       
33 hercules_text_mode1.asm využití standardního textového režimu společně s kartou Hercules https://github.com/tisnik/8bit-fame/blob/master/pc-dos/hercules_text_mode1.asm
34 hercules_text_mode2.asm zákaz blikání v textových režimech https://github.com/tisnik/8bit-fame/blob/master/pc-dos/hercules_text_mode2.asm
35 hercules_turn_off.asm vypnutí generování video signálu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/hercules_turn_off.asm
36 hercules_gfx_mode1.asm přepnutí karty Hercules do grafického režimu (základní varianta) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/hercules_gfx_mode1.asm
37 hercules_gfx_mode2.asm přepnutí karty Hercules do grafického režimu (vylepšená varianta) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/hercules_gfx_mode2.asm
38 hercules_putpixel.asm subrutina pro vykreslení jediného pixelu na kartě Hercules https://github.com/tisnik/8bit-fame/blob/master/pc-dos/hercules_putpixel.asm
       
39 ega_text_mode_80×25.asm standardní textový režim 80×25 znaků na kartě EGA https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_text_mode_80×25.asm
40 ega_text_mode_80×43.asm zobrazení 43 textových řádků na kartě EGA https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_text_mode_80×43.asm
41 ega_gfx_mode_320×200.asm přepnutí do grafického režimu 320×200 pixelů se šestnácti barvami https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_gfx_mode_320×200.asm
42 ega_gfx_mode_640×200.asm přepnutí do grafického režimu 640×200 pixelů se šestnácti barvami https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_gfx_mode_640×200.asm
43 ega_gfx_mode_640×350.asm přepnutí do grafického režimu 640×350 pixelů se čtyřmi nebo šestnácti barvami https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_gfx_mode_640×350.asm
44 ega_gfx_mode_bitplanes1.asm ovládání zápisu do bitových rovin v planárních grafických režimech (základní způsob) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_gfx_mode_bitplanes1.asm
45 ega_gfx_mode_bitplanes2.asm ovládání zápisu do bitových rovin v planárních grafických režimech (rychlejší způsob) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_gfx_mode_bitplanes2.asm
       
46 ega_320×200_putpixel.asm vykreslení pixelu v grafickém režimu 320×200 pixelů se šestnácti barvami https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_320×200_putpixel.asm
47 ega_640×350_putpixel.asm vykreslení pixelu v grafickém režimu 640×350 pixelů se šestnácti barvami https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_640×350_putpixel.asm
       
48 ega_standard_font.asm použití standardního fontu grafické karty EGA https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_standard_font.asm
49 ega_custom_font.asm načtení vlastního fontu s jeho zobrazením https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_custom_font.asm
       
50 ega_palette1.asm změna barvové palety (všech 16 barev) v grafickém režimu 320×200 se šestnácti barvami https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_palette1.asm
51 ega_palette2.asm změna barvové palety (všech 16 barev) v grafickém režimu 640×350 se šestnácti barvami https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_palette2.asm
52 ega_palette3.asm změna všech barev v barvové paletě s využitím programové smyčky https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_palette3.asm
53 ega_palette4.asm změna všech barev, včetně barvy okraje, v barvové paletě voláním funkce BIOSu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/ega_palette4.asm
       
54 vga_text_mode_80×25.asm standardní textový režim 80×25 znaků na kartě VGA https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_text_mode_80×25.asm
55 vga_text_mode_80×50.asm zobrazení 50 a taktéž 28 textových řádků na kartě VGA https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_text_mode_80×50.asm
56 vga_text_mode_intensity1.asm změna chování atributového bitu pro blikání (nebezpečná varianta změny registrů) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_text_mode_intensity1.asm
57 vga_text_mode_intensity2.asm změna chování atributového bitu pro blikání (bezpečnější varianta změny registrů) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_text_mode_intensity2.asm
58 vga_text_mode_9th_column.asm modifikace způsobu zobrazení devátého sloupce ve znakových režimech (720 pixelů na řádku) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_text_mode_9th_column.asm
59 vga_text_mode_cursor_shape.asm změna tvaru textového kurzoru na grafické kartě VGA https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_text_mode_cursor_shape.asm
60 vga_text_mode_custom_font.asm načtení vlastního fontu s jeho zobrazením https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_text_mode_custom_font.asm
       
61 vga_gfx_mode_640×480.asm přepnutí do grafického režimu 640×480 pixelů se šestnácti barvami, vykreslení vzorků https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_gfx_mode_640×480.asm
62 vga_gfx_mode_320×200.asm přepnutí do grafického režimu 320×200 pixelů s 256 barvami, vykreslení vzorků https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_gfx_mode_320×200.asm
63 vga_gfx_mode_palette.asm změna všech barev v barvové paletě grafické karty VGA https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_gfx_mode_palette.asm
64 vga_gfx_mode_dac1.asm využití DAC (neočekávané výsledky) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_gfx_mode_dac1.asm
65 vga_gfx_mode_dac2.asm využití DAC (očekávané výsledky) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_gfx_mode_dac2.asm
       
66 vga_640×480_putpixel.asm realizace algoritmu pro vykreslení pixelu v grafickém režimu 640×480 pixelů se šestnácti barvami https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_640×480_putpixel.asm
67 vga_320×200_putpixel1.asm realizace algoritmu pro vykreslení pixelu v grafickém režimu 320×200 s 256 barvami (základní varianta) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_putpixel1.asm
68 vga_320×200_putpixel2.asm realizace algoritmu pro vykreslení pixelu v grafickém režimu 320×200 s 256 barvami (rychlejší varianta) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_putpixel2.asm
       
69 vga_gfx_mode_dac3.asm přímé využití DAC v grafickém režimu 13h https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_gfx_mode_dac3.asm
       
70 vga_gfx_mode_unchained_step1.asm zobrazení barevných pruhů v režimu 13h https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_gfx_mode_unchained_step1.asm
71 vga_gfx_mode_unchained_step2.asm vypnutí zřetězení bitových rovin a změna způsobu adresování pixelů https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_gfx_mode_unchained_step2.asm
72 vga_gfx_mode_unchained_step3.asm vykreslení barevných pruhů do vybraných bitových rovin https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_gfx_mode_unchained_step3.asm
       
73 vga_gfx_mode_320×400.asm nestandardní grafický režim s rozlišením 320×400 pixelů a 256 barvami https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_gfx_mode_320×400.asm
74 vga_320×200_image.asm zobrazení rastrového obrázku ve standardním grafickém režimu 320×200 pixelů https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_image.asm
75 vga_320×200_unchained_image1.asm zobrazení rastrového obrázku v režimu s nezřetězenými rovinami (nekorektní řešení) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_unchained_image1.asm
76 vga_320×200_unchained_image2.asm zobrazení rastrového obrázku v režimu s nezřetězenými rovinami (korektní řešení) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_unchained_image2.asm
77 vga_320×400_unchained_image.asm zobrazení rastrového obrázku v nestandardním režimu 320×400 pixelů https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×400_unchained_image.asm
       
78 vga_vertical_scroll1.asm vertikální scrolling na kartě VGA v režimu s rozlišením 320×200 pixelů https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_vertical_scroll1.asm
79 vga_vertical_scroll2.asm vertikální scrolling na kartě VGA v režimu s rozlišením 320×400 pixelů https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_vertical_scroll2.asm
80 vga_split_screen1.asm režim split-screen a scrolling, nefunční varianta https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_split_screen1.asm
81 vga_split_screen2.asm režim split-screen a scrolling, plně funkční varianta https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_split_screen2.asm
82 vga_horizontal_scroll1.asm horizontální scrolling bez rozšíření počtu pixelů na virtuálním řádku https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_horizontal_scroll1.asm
83 vga_horizontal_scroll2.asm horizontální scrolling s rozšířením počtu pixelů na virtuálním řádku https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_horizontal_scroll2.asm
84 vga_horizontal_scroll3.asm jemný horizontální scrolling s rozšířením počtu pixelů na virtuálním řádku https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_horizontal_scroll3.asm
       
85 vga_320×240_image.asm nastavení grafického režimu Mode-X, načtení a vykreslení obrázku, scrolling https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×240_image.asm
       
86 io.asm knihovna maker pro I/O operace https://github.com/tisnik/8bit-fame/blob/master/pc-dos/io.asm
87 vga_lib.asm knihovna maker a podprogramů pro programování karty VGA https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_lib.asm
88 vga_320×240_lib.asm nastavení grafického režimu Mode-X, tentokrát knihovními funkcemi https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×240_lib.asm
       
89 vga_bitblt1.asm první (naivní) implementace operace BitBLT https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_bitblt1.asm
90 vga_bitblt2.asm operace BitBLT s výběrem bitových rovin pro zápis https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_bitblt2.asm
91 vga_bitblt3.asm operace BitBLT s výběrem bitových rovin pro čtení i zápis https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_bitblt3.asm
92 vga_bitblt4.asm korektní BitBLT pro 16barevný režim, realizace makry https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_bitblt4.asm
93 vga_bitblt5.asm korektní BitBLT pro 16barevný režim, realizace podprogramem https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_bitblt5.asm
       
94 vga_bitblt_rotate.asm zápisový režim s rotací bajtu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_bitblt_rotate.asm
95 vga_bitblt_fast.asm rychlá korektní 32bitová operace typu BitBLT https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_bitblt_fast.asm
96 vga_320×400_bitblt1.asm přenos obrázku v režimu 320×400 operací BitBLT (neúplná varianta) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×400_bitblt1.asm
97 vga_320×400_bitblt2.asm přenos obrázku v režimu 320×400 operací BitBLT (úplná varianta) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×400_bitblt2.asm
98 vga_write_modes1.asm volitelné zápisové režimy grafické karty VGA, zápis bez úpravy latche https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_write_modes1.asm
99 vga_write_modes2.asm volitelné zápisové režimy grafické karty VGA, zápis s modifikací latche https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_write_modes2.asm
100 vga_write_modes3.asm volitelné zápisové režimy grafické karty VGA, cílená modifikace latche vzorkem https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_write_modes3.asm
       
101 instruction_jump.asm použití instrukce JMP https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_jump.asm
102 instruction_jnz.asm použití instrukce JNZ pro realizaci programové smyčky https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_jnz.asm
103 instruction_jz_jmp.asm použití instrukcí JZ a JMP pro realizaci programové smyčky https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_jz_jmp.asm
104 instruction_loop.asm použití instrukce LOOP pro realizaci programové smyčky https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_loop.asm
       
105 instruction_template.asm šablona všech následujících demonstračních příkladů https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_template.asm
106 instruction_print_hex.asm tisk osmibitové hexadecimální hodnoty https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_print_hex.asm
107 instruction_xlat.asm využití instrukce XLAT pro získání tisknutelné hexadecimální cifry https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_xlat.asm
       
108 instruction_daa.asm operace součtu s využitím binární i BCD aritmetiky https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_daa.asm
109 instruction_daa_sub.asm instrukce DAA po provedení operace rozdílu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_daa_sub.asm
110 instruction_das.asm instrukce DAS po provedení operace rozdílu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_das.asm
111 instruction_aaa.asm korekce výsledku na jedinou BCD cifru operací AAA https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_aaa.asm
112 instruction_mul.asm ukázka výpočtu součinu dvou osmibitových hodnot https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_mul.asm
113 instruction_aam.asm BCD korekce po výpočtu součinu instrukcí AAM https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_aam.asm
       
114 instruction_stosb.asm blokový zápis dat instrukcí STOSB https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_stosb.asm
115 instruction_rep_stosb.asm opakované provádění instrukce STOSB https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_rep_stosb.asm
116 instruction_lodsb.asm čtení dat instrukcí LODSB https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_lodsb.asm
117 instruction_movsb.asm přenos jednoho bajtu instrukcí MOVSB https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_movsb.asm
118 instruction_rep_movsb.asm blokový přenos po bajtech instrukcí MOVSB https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_rep_movsb.asm
119 instruction_rep_scas.asm vyhledávání v řetězci instrukcí SCAS https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_rep_scas.asm
       
120 vga_320×200_image_0B.asm výsledek blokového přenosu ve chvíli, kdy je CX=0 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_image_0B.asm
121 vga_320×200_image_64kB.asm výsledek blokového přenosu ve chvíli, kdy je CX=0×ffff https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_image_64kB.asm
122 vga_320×200_image_movsb.asm blokový přenos v rámci obrazové paměti instrukcí REP MOVSB https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_image_movsb.asm
123 vga_320×200_image_movsw.asm blokový přenos v rámci obrazové paměti instrukcí REP MOVSW https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_image_movsw.asm
124 vga_320×200_image_movsd.asm blokový přenos v rámci obrazové paměti instrukcí REP MOVSD https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_image_movsd.asm
125 vga_320×200_image_movsb_forward.asm blokový přenos překrývajících se bloků paměti (zvyšující se adresy) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_image_mov­sb_forward.asm
126 vga_320×200_image_movsb_backward1.asm blokový přenos překrývajících se bloků paměti (snižující se adresy, nekorektní nastavení) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_image_mov­sb_backward1.asm
127 vga_320×200_image_movsb_backward2.asm blokový přenos překrývajících se bloků paměti (snižující se adresy, korektní nastavení) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_image_mov­sb_backward2.asm
       
128 sound_bell.asm přehrání zvuku pomocí tisku ASCII znaku BELL https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_bell.asm
129 sound_beep.asm přehrání zvuku o zadané frekvenci na PC Speakeru https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_beep.asm
130 sound_play_pitch.asm přehrání zvuku o zadané frekvenci na PC Speakeru, použití maker https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_play_pitch.asm
       
131 sound_opl2_basic.asm přehrání komorního A na OPL2 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl2_basic.asm
132 sound_opl2_table.asm přehrání komorního A na OPL2, použití tabulky s hodnotami registrů https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl2_table.asm
       
133 sound_opl2_table2.asm přepis tabulky s obsahy registrů pro přehrání komorního A https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl2_table2.asm
134 sound_key_on.asm přímé ovládání bitu KEY ON mezerníkem https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_key_on.asm
135 sound_adsr.asm nastavení obálky pro tón přehrávaný prvním kanálem https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_adsr.asm
136 sound_modulation.asm řízení frekvence modulátoru klávesami 1 a 0 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_modulation.asm
       
137 keyboard_basic.asm přímá práce s klávesnicí IBM PC https://github.com/tisnik/8bit-fame/blob/master/pc-dos/keyboard_basic.asm
       
138 sound_stereo_opl2.asm stereo zvuk v konfiguraci DualOPL2 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_stereo_opl2.asm
139 sound_opl2_multichannel.asm vícekanálový zvuk na OPL2 (klávesy), delší varianta https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl2_multichannel.asm
140 sound_opl2_multichannel2.asm vícekanálový zvuk na OPL2 (klávesy), kratší varianta https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl2_multichannel2.asm
141 sound_opl3_stereo1.asm stereo výstup na OPL3 (v kompatibilním režimu) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl3_stereo1.asm
142 sound_opl3_stereo2.asm stereo výstup na OPL3 (v režimu OPL3) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl3_stereo2.asm
143 sound_opl3_multichannel.asm vícekanálový zvuk na OPL3 (klávesy) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl3_multichannel.asm
       
144 sound_opl3_waveform1.asm interaktivní modifikace tvaru vlny u prvního operátoru https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl3_waveform1.asm
145 sound_opl3_waveform2.asm oprava chyby: povolení režimu kompatibilního s OPL3 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl3_waveform2.asm
146 sound_opl3_waveform3.asm vliv tvaru vln na zvukový kanál s FM syntézou https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl3_waveform3.asm
147 sound_opl3_waveform4.asm modifikace tvaru vlny nosné vlny i modulátoru https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl3_waveform4.asm
148 sound_opl3_4operators1.asm výběr AM/FM režimu ve čtyřoperátorovém nastavení https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl3_4operators1.asm
149 sound_opl3_4operators2.asm výběr AM/FM režimu ve čtyřoperátorovém nastavení https://github.com/tisnik/8bit-fame/blob/master/pc-dos/sound_opl3_4operators2.asm
       
150 timer_basic.asm základní obsluha přerušení od časovače/čítače https://github.com/tisnik/8bit-fame/blob/master/pc-dos/timer_basic.asm
151 timer_restore.asm obnovení původní obsluhy přerušení při ukončování aplikace https://github.com/tisnik/8bit-fame/blob/master/pc-dos/timer_restore.asm
152 timer_restore_better_structure.asm refaktoring předchozího demonstračního příkladu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/timer_restore_better_structure.asm
153 timer_faster_clock.asm zrychlení čítače na 100 přerušení za sekundu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/timer_faster_clock.asm
       
154 instruction_push_imm.asm instrukce PUSH s konstantou https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_push_imm.asm
155 instruction_imul_imm.asm instrukce IMUL s konstantou https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_imul_imm.asm
156 instruction_into1.asm instrukce INTO s obsluhou přerušení https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_into1.asm
157 instruction_into2.asm instrukce INTO s obsluhou přerušení https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_into2.asm
158 instruction_bound1.asm instrukce BOUND s obsluhou přerušení (nekorektní řešení) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_bound1.asm
159 instruction_bound2.asm instrukce BOUND s obsluhou přerušení (korektní řešení) https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_bound2.asm
160 vga_320×200_putpixel286.asm instrukce bitového posunu s konstantou větší než 1 https://github.com/tisnik/8bit-fame/blob/master/pc-dos/vga_320×200_putpixel286.asm
161 instruction_push_pop.asm instrukce PUSH a POP se všemi pracovními registry https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_push_pop.asm
       
162 instruction_push_pop_B.asm instrukce s novými segmentovými registry https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_push_pop_B.asm
163 instruction_near_jz_jmp.asm blízké skoky https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_near_jz_jmp.asm
164 instruction_bsf.asm nová instrukce BSF https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_bsf.asm
165 instruction_bsr.asm nová instrukce BSR https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_bsr.asm
166 instruction_add_32bit.asm 32bitový součet https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_add_32bit.asm
167 instruction_inc_32bit.asm 32bitová instrukce INC v šestnáctibitovém režimu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_inc_32bit.asm
168 instruction_inc_32bit_B.asm 32bitová instrukce INC v 32bitovém režimu https://github.com/tisnik/8bit-fame/blob/master/pc-dos/instruction_inc_32bit_B.asm

20. Odkazy na Internetu

  1. The Intel 8088 Architecture and Instruction Set
    https://people.ece.ubc.ca/~ed­c/464/lectures/lec4.pdf
  2. x86 Opcode Structure and Instruction Overview
    https://pnx.tf/files/x86_op­code_structure_and_instruc­tion_overview.pdf
  3. x86 instruction listings (Wikipedia)
    https://en.wikipedia.org/wi­ki/X86_instruction_listin­gs
  4. x86 assembly language (Wikipedia)
    https://en.wikipedia.org/wi­ki/X86_assembly_language
  5. Intel Assembler (Cheat sheet)
    http://www.jegerlehner.ch/in­tel/IntelCodeTable.pdf
  6. 25 Microchips That Shook the World
    https://spectrum.ieee.org/tech-history/silicon-revolution/25-microchips-that-shook-the-world
  7. Chip Hall of Fame: MOS Technology 6502 Microprocessor
    https://spectrum.ieee.org/tech-history/silicon-revolution/chip-hall-of-fame-mos-technology-6502-microprocessor
  8. Chip Hall of Fame: Intel 8088 Microprocessor
    https://spectrum.ieee.org/tech-history/silicon-revolution/chip-hall-of-fame-intel-8088-microprocessor
  9. Jak se zrodil procesor?
    https://www.root.cz/clanky/jak-se-zrodil-procesor/
  10. Apple II History Home
    http://apple2history.org/
  11. The 8086/8088 Primer
    https://www.stevemorse.or­g/8086/index.html
  12. flat assembler: Assembly language resources
    https://flatassembler.net/
  13. FASM na Wikipedii
    https://en.wikipedia.org/wiki/FASM
  14. Fresh IDE FASM inside
    https://fresh.flatassembler.net/
  15. MS-DOS Version 4.0 Programmer's Reference
    https://www.pcjs.org/docu­ments/books/mspl13/msdos/dos­ref40/
  16. DOS API (Wikipedia)
    https://en.wikipedia.org/wiki/DOS_API
  17. Bit banging
    https://en.wikipedia.org/wi­ki/Bit_banging
  18. IBM Basic assembly language and successors (Wikipedia)
    https://en.wikipedia.org/wi­ki/IBM_Basic_assembly_lan­guage_and_successors
  19. X86 Assembly/Bootloaders
    https://en.wikibooks.org/wi­ki/X86_Assembly/Bootloaders
  20. Počátky grafiky na PC: grafické karty CGA a Hercules
    https://www.root.cz/clanky/pocatky-grafiky-na-pc-graficke-karty-cga-a-hercules/
  21. Co mají společného Commodore PET/4000, BBC Micro, Amstrad CPC i grafické karty MDA, CGA a Hercules?
    https://www.root.cz/clanky/co-maji-spolecneho-commodore-pet-4000-bbc-micro-amstrad-cpc-i-graficke-karty-mda-cga-a-hercules/
  22. Karta EGA: první použitelná barevná grafika na PC
    https://www.root.cz/clanky/karta-ega-prvni-pouzitelna-barevna-grafika-na-pc/
  23. RGB Classic Games
    https://www.classicdosgames.com/
  24. Turbo Assembler (Wikipedia)
    https://en.wikipedia.org/wi­ki/Turbo_Assembler
  25. Microsoft Macro Assembler
    https://en.wikipedia.org/wi­ki/Microsoft_Macro_Assembler
  26. IBM Personal Computer (Wikipedia)
    https://en.wikipedia.org/wi­ki/IBM_Personal_Computer
  27. Intel 8251
    https://en.wikipedia.org/wi­ki/Intel_8251
  28. Intel 8253
    https://en.wikipedia.org/wi­ki/Intel_8253
  29. Intel 8255
    https://en.wikipedia.org/wi­ki/Intel_8255
  30. Intel 8257
    https://en.wikipedia.org/wi­ki/Intel_8257
  31. Intel 8259
    https://en.wikipedia.org/wi­ki/Intel_8259
  32. Support/peripheral/other chips – 6800 family
    http://www.cpu-world.com/Support/6800.html
  33. Motorola 6845
    http://en.wikipedia.org/wi­ki/Motorola_6845
  34. The 6845 Cathode Ray Tube Controller (CRTC)
    http://www.tinyvga.com/6845
  35. CRTC operation
    http://www.6502.org/users/an­dre/hwinfo/crtc/crtc.html
  36. The 6845 Cathode Ray Tube Controller (CRTC)
    http://www.tinyvga.com/6845
  37. Motorola 6845 and bitwise graphics
    https://retrocomputing.stac­kexchange.com/questions/10996/mo­torola-6845-and-bitwise-graphics
  38. IBM Monochrome Display Adapter
    http://en.wikipedia.org/wi­ki/Monochrome_Display_Adap­ter
  39. Color Graphics Adapter
    http://en.wikipedia.org/wi­ki/Color_Graphics_Adapter
  40. Color Graphics Adapter and the Brown color in IBM 5153 Color Display
    https://www.aceinnova.com/en/e­lectronics/cga-and-the-brown-color-in-ibm-5153-color-display/
  41. The Modern Retrocomputer: An Arduino Driven 6845 CRT Controller
    https://hackaday.com/2017/05/14/the-modern-retrocomputer-an-arduino-driven-6845-crt-controller/
  42. flat assembler: Assembly language resources
    https://flatassembler.net/
  43. FASM na Wikipedii
    https://en.wikipedia.org/wiki/FASM
  44. Fresh IDE FASM inside
    https://fresh.flatassembler.net/
  45. MS-DOS Version 4.0 Programmer's Reference
    https://www.pcjs.org/docu­ments/books/mspl13/msdos/dos­ref40/
  46. DOS API (Wikipedia)
    https://en.wikipedia.org/wiki/DOS_API
  47. IBM Basic assembly language and successors (Wikipedia)
    https://en.wikipedia.org/wi­ki/IBM_Basic_assembly_lan­guage_and_successors
  48. X86 Assembly/Arithmetic
    https://en.wikibooks.org/wi­ki/X86_Assembly/Arithmetic
  49. Art of Assembly – Arithmetic Instructions
    http://oopweb.com/Assembly/Do­cuments/ArtOfAssembly/Volu­me/Chapter6/CH06–2.html
  50. ASM Flags
    http://www.cavestory.org/gu­ides/csasm/guide/asm_flag­s.html
  51. Status Register
    https://en.wikipedia.org/wi­ki/Status_register
  52. Linux assemblers: A comparison of GAS and NASM
    http://www.ibm.com/develo­perworks/library/l-gas-nasm/index.html
  53. Programovani v assembleru na OS Linux
    http://www.cs.vsb.cz/gryga­rek/asm/asmlinux.html
  54. Is it worthwhile to learn x86 assembly language today?
    https://www.quora.com/Is-it-worthwhile-to-learn-x86-assembly-language-today?share=1
  55. Why Learn Assembly Language?
    http://www.codeproject.com/Ar­ticles/89460/Why-Learn-Assembly-Language
  56. Is Assembly still relevant?
    http://programmers.stackex­change.com/questions/95836/is-assembly-still-relevant
  57. Why Learning Assembly Language Is Still a Good Idea
    http://www.onlamp.com/pub/a/on­lamp/2004/05/06/writegreat­code.html
  58. Assembly language today
    http://beust.com/weblog/2004/06/23/as­sembly-language-today/
  59. Assembler: Význam assembleru dnes
    http://www.builder.cz/rubri­ky/assembler/vyznam-assembleru-dnes-155960cz
  60. Programming from the Ground Up Book – Summary
    http://savannah.nongnu.or­g/projects/pgubook/
  61. DOSBox
    https://www.dosbox.com/
  62. The C Programming Language
    https://en.wikipedia.org/wi­ki/The_C_Programming_Langu­age
  63. Hercules Graphics Card (HCG)
    https://en.wikipedia.org/wi­ki/Hercules_Graphics_Card
  64. Complete 8086 instruction set
    https://content.ctcd.edu/cou­rses/cosc2325/m22/docs/emu8086in­s.pdf
  65. Complete 8086 instruction set
    https://yassinebridi.github.io/asm-docs/8086_instruction_set.html
  66. 8088 MPH by Hornet + CRTC + DESiRE (final version)
    https://www.youtube.com/wat­ch?v=hNRO7lno_DM
  67. Area 5150 by CRTC & Hornet (Party Version) / IBM PC+CGA Demo, Hardware Capture
    https://www.youtube.com/wat­ch?v=fWDxdoRTZPc
  68. 80×86 Integer Instruction Set Timings (8088 – Pentium)
    http://aturing.umcs.maine­.edu/~meadow/courses/cos335/80×86-Integer-Instruction-Set-Clocks.pdf
  69. Colour Graphics Adapter: Notes
    https://www.seasip.info/Vin­tagePC/cga.html
  70. Restoring A Vintage CGA Card With Homebrew HASL
    https://hackaday.com/2024/06/12/res­toring-a-vintage-cga-card-with-homebrew-hasl/
  71. Demoing An 8088
    https://hackaday.com/2015/04/10/de­moing-an-8088/
  72. Video Memory Layouts
    http://www.techhelpmanual.com/89-video_memory_layouts.html
  73. Screen Attributes
    http://www.techhelpmanual.com/87-screen_attributes.html
  74. IBM PC Family – BIOS Video Modes
    https://www.minuszerodegre­es.net/video/bios_video_mo­des.htm
  75. EGA Functions
    https://cosmodoc.org/topics/ega-functions/#the-hierarchy-of-the-ega
  76. Why the EGA can only use 16 of its 64 colours in 200-line modes
    https://www.reenigne.org/blog/why-the-ega-can-only-use-16-of-its-64-colours-in-200-line-modes/
  77. How 16 colors saved PC gaming – the story of EGA graphics
    https://www.custompc.com/retro-tech/ega-graphics
  78. List of 16-bit computer color palettes
    https://en.wikipedia.org/wi­ki/List_of16-bit_computer_color_palettes
  79. Why were those colors chosen to be the default palette for 256-color VGA?
    https://retrocomputing.stac­kexchange.com/questions/27994/why-were-those-colors-chosen-to-be-the-default-palette-for-256-color-vga
  80. VGA Color Palettes
    https://www.fountainware.com/EX­PL/vga_color_palettes.htm
  81. Hardware Level VGA and SVGA Video Programming Information Page
    http://www.osdever.net/Fre­eVGA/vga/vga.htm
  82. Hardware Level VGA and SVGA Video Programming Information Page – sequencer
    http://www.osdever.net/Fre­eVGA/vga/seqreg.htm
  83. VGA Basics
    http://www.brackeen.com/vga/ba­sics.html
  84. Introduction to VGA Mode ‚X‘
    https://web.archive.org/web/20160414072210/htt­p://fly.srk.fer.hr/GDM/ar­ticles/vgamodex/vgamx1.html
  85. VGA Mode-X
    https://web.archive.org/web/20070123192523/htt­p://www.gamedev.net/referen­ce/articles/article356.asp
  86. Mode-X: 256-Color VGA Magic
    https://downloads.gamedev­.net/pdf/gpbb/gpbb47.pdf
  87. Instruction Format in 8086 Microprocessor
    https://www.includehelp.com/embedded-system/instruction-format-in-8086-microprocessor.aspx
  88. How to use „AND,“ „OR,“ and „XOR“ modes for VGA Drawing
    https://retrocomputing.stac­kexchange.com/questions/21936/how-to-use-and-or-and-xor-modes-for-vga-drawing
  89. VGA Hardware
    https://wiki.osdev.org/VGA_Hardware
  90. Programmer's Guide to Yamaha YMF 262/OPL3 FM Music Synthesizer
    https://moddingwiki.shika­di.net/wiki/OPL_chip
  91. Does anybody understand how OPL2 percussion mode works?
    https://forum.vcfed.org/in­dex.php?threads/does-anybody-understand-how-opl2-percussion-mode-works.60925/
  92. Yamaha YMF262 OPL3 music – MoonDriver for OPL3 DEMO [Oscilloscope View]
    https://www.youtube.com/watch?v=a7I-QmrkAak
  93. Yamaha OPL vs OPL2 vs OPL3 comparison
    https://www.youtube.com/wat­ch?v=5knetge5Gs0
  94. OPL3 Music Crockett's Theme
    https://www.youtube.com/wat­ch?v=HXS008pkgSQ
  95. Bad Apple (Adlib Tracker – OPL3)
    https://www.youtube.com/wat­ch?v=2lEPH6Y3Luo
  96. FM Synthesis Chips, Codecs and DACs
    https://www.dosdays.co.uk/to­pics/fm_synthesizers.php
  97. The Zen Challenge – YMF262 OPL3 Original (For an upcoming game)
    https://www.youtube.com/wat­ch?v=6JlFIFz1CFY
  98. [adlib tracker II techno music – opl3] orbit around alpha andromedae I
    https://www.youtube.com/wat­ch?v=YqxJCu_WFuA
  99. [adlib tracker 2 music – opl3 techno] hybridisation process on procyon-ii
    https://www.youtube.com/wat­ch?v=daSV5mN0sJ4
  100. Hyper Duel – Black Rain (YMF262 OPL3 Cover)
    https://www.youtube.com/wat­ch?v=pu_mzRRq8Ho
  101. IBM 5155–5160 Technical Reference
    https://www.minuszerodegre­es.net/manuals/IBM/IBM_5155_5160_Techni­cal_Reference_6280089_MAR86­.pdf
  102. a ymf262/opl3+pc speaker thing i made
    https://www.youtube.com/watch?v=E-Mx0lEmnZ0
  103. [OPL3] Like a Thunder
    https://www.youtube.com/wat­ch?v=MHf06AGr8SU
  104. (PC SPEAKER) bad apple
    https://www.youtube.com/wat­ch?v=LezmKIIHyUg
  105. Powering devices from PC parallel port
    http://www.epanorama.net/cir­cuits/lptpower.html
  106. Magic Mushroom (demo pro PC s DOSem)
    http://www.crossfire-designs.de/download/articles/sou­ndcards//mushroom.rar
  107. Píseň Magic Mushroom – originál
    http://www.crossfire-designs.de/download/articles/sou­ndcards/speaker_mushroom_con­verted.mp3
  108. Píseň Magic Mushroom – hráno na PC Speakeru
    http://www.crossfire-designs.de/download/articles/sou­ndcards/speaker_mushroom_spe­aker.mp3
  109. Pulse Width Modulation (PWM) Simulation Example
    http://decibel.ni.com/content/docs/DOC-4599
  110. Resistor/Pulse Width Modulation DAC
    http://www.k9spud.com/trax­mod/pwmdac.php
  111. Class D Amplifier
    http://en.wikipedia.org/wi­ki/Electronic_amplifier#Clas­s_D
  112. Covox Speech Thing / Disney Sound Source (1986)
    http://www.crossfire-designs.de/index.php?lang=en&what=ar­ticles&name=showarticle.htm&ar­ticle=soundcards/&page=5
  113. Covox Digital-Analog Converter (Rusky, obsahuje schémata)
    http://phantom.sannata.ru/kon­kurs/netskater002.shtml
  114. PC-GPE on the Web
    http://bespin.org/~qz/pc-gpe/
  115. Keyboard Synthesizer
    http://www.solarnavigator­.net/music/instruments/ke­yboards.htm
  116. FMS – Fully Modular Synthesizer
    http://fmsynth.sourceforge.net/
  117. Javasynth
    http://javasynth.sourceforge.net/
  118. Software Sound Synthesis & Music Composition Packages
    http://www.linux-sound.org/swss.html
  119. Mx44.1 Download Page (software synthesizer for linux)
    http://hem.passagen.se/ja_linux/
  120. Software synthesizer
    http://en.wikipedia.org/wi­ki/Software_synthesizer
  121. Frequency modulation synthesis
    http://en.wikipedia.org/wi­ki/Frequency_modulation_syn­thesis
  122. Yamaha DX7
    http://en.wikipedia.org/wi­ki/Yamaha_DX7
  123. Wave of the Future
    http://www.wired.com/wired/ar­chive/2.03/waveguides_pr.html
  124. Analog synthesizer
    http://en.wikipedia.org/wi­ki/Analog_synthesizer
  125. Minimoog
    http://en.wikipedia.org/wiki/Minimoog
  126. Moog synthesizer
    http://en.wikipedia.org/wi­ki/Moog_synthesizer
  127. Tutorial for Frequency Modulation Synthesis
    http://www.sfu.ca/~truax/fmtut.html
  128. An Introduction To FM
    http://ccrma.stanford.edu/sof­tware/snd/snd/fm.html
  129. John Chowning
    http://en.wikipedia.org/wi­ki/John_Chowning
  130. I'm Impressed, Adlib Music is AMAZING!
    https://www.youtube.com/wat­ch?v=PJNjQYp1ras
  131. Milinda- Diode Milliampere ( OPL3 )
    https://www.youtube.com/wat­ch?v=oNhazT5HG0E
  132. Dune 2 – Roland MT-32 Soundtrack
    https://www.youtube.com/wat­ch?v=kQADZeB-z8M
  133. Interrupts
    https://wiki.osdev.org/In­terrupts#Types_of_Interrup­ts
  134. Assembly8086SoundBlasterDma­SingleCycleMode
    https://github.com/leonardo-ono/Assembly8086SoundBlas­terDmaSingleCycleMode/blob/mas­ter/sbsc.asm
  135. Interrupts in 8086 microprocessor
    https://www.geeksforgeeks­.org/interrupts-in-8086-microprocessor/
  136. Interrupt Structure of 8086
    https://www.eeeguide.com/interrupt-structure-of-8086/
ikonka

Zajímá vás toto téma? Chcete se o něm dozvědět víc?

Objednejte si upozornění na nově vydané články do vašeho mailu. Žádný článek vám tak neuteče.

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.