Blog:Programovanie v assembleri i8080 pre PMD 85 (2)

Z PMD 85 Infoserver

Programovanie v assembleri i8080 pre PMD 85 (2)


Obsah

Inštrukčná sada mikroprocesora i8080

Mikroprocesor i8080 má celkom 78 rôznych "typov" inštrukcií, ale celkovo ich je 244 vo všetkých obmenách operandov. Delia sa do niekoľkých kategórií podľa svojej funkcie.

Ako už bolo spomenuté skôr, inštrukcie mikroprocesora i8080 môžu byť dlhé 1, 2 alebo 3 byty a môžu mať 0 až 2 operandy. Počet bytov ale nemusí priamo súvisieť s počtom operandov. Operandom môže byť:

  • žiadny - inštrukcia pracuje s nejakým implicitným argumentom, ktorý vyplýva z mnemoniky inštrukcie alebo inštrukcia vykonáva nejakú špecifickú operáciu
  • 8 bitový register - A, B, C, D, E, H, L
  • 16 bitový register (registrový pár) - B, D, H, SP, PSW
  • 8 bitová priama hodnota - N - celé číslo 0 až 255 (00h až 0FFh)
  • 16 bitová priama hodnota - NN - celé číslo 0 až 65535 (0000h až 0FFFFh) - v pamäti je uložený najprv nižší byte a potom vyšší byte
  • priama adresa - celé číslo 0 až 65535 (0000h až 0FFFFh)
  • nepriama adresa - registrové páry B, D alebo "pseudo register" M (adresa je v registrovom páre H),

V nasledujúcom popise bude pre vysvetlenie funkcie inštrukcií použitá nasledujúca symbolika:

  • r, r1, r2 - 8 bitový register A, B, C, D, E, H, L
  • m - "pseudo-register" M
  • rp - registrový pár B, D, H, SP alebo PSW
  • N - priama 8 bitová hodnota
  • NN - priama 16 bitová hodnota alebo adresa pamäte
  • p - 8 bitová adresa vstupno/výstupného portu
  • (X) - hodnota na adrese X, kde X môže byť priama adresa NN, 16 bitový register HL, DE, BC, SP alebo port p
  • <-- - presun, resp. skopírovanie hodnoty z pravého operandu do ľavého
  • <--> - výmena hodnôt ľavého a pravého operandu


Všetky inštrukcie si na jednom mieste môžete pozrieť v prehľadnej tabuľke, ku ktorej sa budete neskôr pravdepodobne vracať. V tabuľke je ku každej inštrukcii uvedený jej operačný kód, dĺžka v bytoch, doba trvania v taktoch procesora a informácia o ovplyvňovaných príznakoch. Stačí sa postaviť myšou nad príslušnú inštrukciu.

Trvanie inštrukcií je uvádzané v Taktoch, alebo T-cykloch mikroprocesora. Mikroprocesor i8080 je v PMD 85 taktovaný frekvenciou 2,048 MHz (PMD 85-1/2/2A), resp. 2 MHz (PMD 85-3), to znamená, že jeden takt mikroprocesora trvá 1/2,048 MHz = 488,281 ns (resp. 1/2 MHz = 500 ns). Na PMD 85 ale treba ešte počítať s brzdením mikroprocesora Videoprocesorom, čo znamená, že ak potrebuje k pamäti pristúpiť mikroprocesor a aj Videoprocesor, tak má Videoprocesor prednosť a mikroprocesor je "pozastavený" na jeden takt. Mikroprocesor je teda brzdený zhruba o 8%.

Inštrukcie pre presun dát

Je to najpočetnejšia skupina inštrukcií, ktorá slúži na prenos údajov medzi dvoma registrami, registrami a pamäťou a napĺňanie registra alebo pamäte priamou hodnotou.

MOV r1,r2      (Move Register)

Operácia: r1 <-- r2

Príznaky: žiadne

Inštrukcia MOV skopíruje hodnotu z 8 bitového registra r2 do 8 bitového registra r1. Prakticky je možné kopírovať hodnotu medzi ktoroukoľvek dvojicou 8 bitových registrov. Verzie inštrukcií, kde je zdrojový aj cieľový register rovnaký, samozrejme, neurobia nič, ale ich "nelogická" existencia je daná hardvérovo (viď. tabuľka inštrukcií a ich usporiadanie).

Presun hodnoty z jedného 8 bitového registra do druhého      (1 byte / 5T)
mov b,b mov c,b mov d,b mov e,b mov h,b mov l,b mov a,b
mov b,c mov c,c mov d,c mov e,c mov h,c mov l,c mov a,c
mov b,d mov c,d mov d,d mov e,d mov h,d mov l,d mov a,d
mov b,e mov c,e mov d,e mov e,e mov h,e mov l,e mov a,e
mov b,h mov c,h mov d,h mov e,h mov h,h mov l,h mov a,h
mov b,l mov c,l mov d,l mov e,l mov h,l mov l,l mov a,l
mov b,a mov c,a mov d,a mov e,a mov h,a mov l,a mov a,a

MOV r,m      MOV m,r      (Move From/To Memory)

Operácia: r <-- (HL) resp. (HL) <-- r

Príznaky: žiadne

Tieto verzie inštrukcie MOV pracujú podobne ako predošlé, avšak presun je medzi pamäťou a registrom. Prvá verzia inštrukcie skopíruje hodnotu z pamäte, ktorej adresa je v registri HL do 8 bitového registra r. Druhá verzia funguje opačne, skopíruje hodnotu 8 bitového registra r do pamäte, ktorej adresa je v registri HL.

Presun hodnoty medzi pamäťou a 8 bitovým registrom      (1 byte / 7T)
mov b,m mov m,b
mov c,m mov m,c
mov d,m mov m,d
mov e,m mov m,e
mov h,m mov m,h
mov l,m mov m,l
mov a,m mov m,a

LDAX rp      STAX rp      (Load/Store Accumulator Indirect)

Operácia: A <-- (rp) resp. (rp) <-- A

Príznaky: žiadne

Inštrukcie LDAX a STAX pracujú rovnako ako predošlé presuny medzi pamäťou a registrom, avšak cieľovým/zdrojovým registrom je iba akumulátor A a pamäťové miesto je adresované registrovými pármi B resp. D. Takže, inštrukcia LDAX skopíruje hodnotu z pamäte, ktorej adresa je v registri BC resp. DE do akumulátora A a inštrukcia STAX skopíruje hodnotu akumulátora A do pamäte, ktorej adresa je v registri BC resp. DE.

Presun hodnoty akumulátora z/do pamäte nepriamo adresovanej registrovým párom      (1 byte / 7T)
ldax b stax b
ldax d stax d

LDA NN      STA NN      (Load/Store Accumulator Direct)

Operácia: A <-- (NN) resp. (NN) <-- A

Príznaky: žiadne

Inštrukcie LDA a STA slúžia pre načítanie resp. uloženie hodnoty akumulátora z/do pamäte určenou priamou adresou NN.

Presun hodnoty akumulátora z/do priamo adresovanej pamäte      (3 byty / 13T)
lda NN sta NN

MVI r,N      (Move Immediate)

Operácia: r <-- N

Príznaky: žiadne

Inštrukcia MVI uloží (nastaví) do registra r priamu 8 bitovú hodnotu N.

Uloženie priamej 8 bitovej hodnoty do 8 bitového registra      (2 byty / 7T)
mvi b,N
mvi c,N
mvi d,N
mvi e,N
mvi h,N
mvi l,N
mvi a,N

MVI m,N      (Move To Memory Immediate)

Operácia: (HL) <-- N

Príznaky: žiadne

Inštrukcia uloží do pamäte adresovanej registrom HL priamu 8 bitovú hodnotu N.

Uloženie priamej 8 bitovej hodnoty do pamäte      (2 byty / 10T)
mvi m,N

LXI rp,NN      (Load Register Pair Immediate)

Operácia: rp <-- NN

Príznaky: žiadne

Inštrukcia LXI uloží (nastaví) do registrového páru rp priamu 16 bitovú hodnotu NN.

Uloženie priamej 16 bitovej hodnoty do 16 bitového registra      (3 byty / 10T)
lxi b,NN
lxi d,NN
lxi h,NN
lxi sp,NN

LHLD NN      SHLD NN      (Load/Store H and L Direct)

Operácia: HL <-- (NN) resp. (NN) <-- HL

Príznaky: žiadne

Inštrukcia LHLD slúži pre načítanie hodnoty registra HL z pamäte určenou priamou adresou NN. Do registra L sa uloží hodnota z adresy NN a do registra H sa uloží hodnota z adresy NN+1.

Inštrukcia SHLD slúži pre uloženie hodnoty registra HL do pamäte určenou priamou adresou NN. Hodnota registra L sa uloží do pamäte na adresu NN a hodnota registra H sa uloží do pamäte na adresu NN+1.

Presun hodnoty registra HL z/do priamo adresovanej pamäte      (3 byty / 16T)
lhld NN shld NN

XCHG      (Exchange H and L with D and E)

Operácia: HL <--> DE

Príznaky: žiadne

Inštrukcia XCHG vymení navzájom hodnoty registrov HL a DE. A teda register H bude mať hodnotu registra D a register D bude mať hodnotu registra H. Podobne, register L bude mať hodnotu registra E a register E bude mať hodnotu registra L.

Výmena obsahov HL a DE      (1 byty / 4T)
xchg



<< Úvod, Čo je assembler, Mikroprocesor i8080 Inštrukčná sada mikroprocesora - Aritmetické inštrukcie >>