Inštrukcie mikroprocesora I8051. 

Jazyk symbolických adries - assambler

  1. Základné rozdelenie inštrukcií
  2. Inštrukcia a jej štruktúra, OPERAČNÝ KÓD a OPERAND
  3. Register PSW - stavové slovo procesora riadiace podmienené skoky
  4. Priame a nepriame operandy v inštrukciách .
  5. Prehľad inštrukcií
  6. Nové pojmy
  7. Zdroje informácií

Základné rozdelenie inštrukcií

    Inštrukcie mikroprocesora sa delia do 4 základných skupín:

  • PRESUNY DÁT
  • ARITMETICKÉ INŠTRUKCIE
  • LOGICKÉ INŠTRUKCIE
  • SKOKY - nepodmienené
  • SKOKY - podmienené
  MOV, MOVC, MOVX, POP, PUSH, XCH, XCHD, SWAP
ADD, ADDC, DA, DEC, DIV, INC, MUL, SUBB
ANL, CLR, CPL, ORL, RL, RLC, RR, RRC, SETB, XRL
ACALL, AJMP, CALL, LCALL, LJMP, SJMP, CJNE, DJNZ, JB, JBC, JC, JNC, JZ, JNZ, RET, RETI

 

Návrat na začiatok

Inštrukcia a jej štruktúra

1-slovná inštrukcia  2-slovná inštrukcia 3-slovná inštrukcia
OpK Operand
OpK Operand
Operand
OpK Operand
Operand
Operand

Operačný kód

    Inštrukcie mikroprocesora pozostávajú z 13  8 bitových slov (slovonajmenšia priamo adresovateľná bunka operačnej pamäte). Prvé slovo inštrukcie obsahuje operačný kód - určujúci ČO má operácia vykonať a  kódy alebo hodnoty operandov s ktorými sa má operáciu vykonať.

Operandy

Sú to 8 bitové alebo 1 bitové  binárne údaje uložené:  a #data ako aj   prípadne   a @R1

Operand udávaný v inštrukcii je určovaný buď ako:

    Nasledovná vzorová tabuľka ukazuje princíp kódovania strojových inštrukcií príbuzných  inštrukcií ANL, ORL a XRL, ktoré sa  líšia operačným kódom  ( vid. ANL0101, ORL - 0100 a XRL - 0110), zatiaľ čo časť operandov majú rovnakú.   V inštrukciách vidno kódovanie operandu registra  R0 R7 tromi bitmi 000 - 111. Vidno kódovanie priameho operandu direct a #data ako aj  A a #data  prípadne  @R0 a @R1. V tabuľke vidno aj ako sa používa hodnota priamych operandov dddddddd a ########

----------- ANL -----------       ----------- ORL -----------       ----------- XRL -----------
assembler        binárny tvar     assembler        binárny tvar     assembler        binárny tvar
ANL A,R0         0101 1 000       ORL A,R0         0100 1 000       XRL A,R0         0110 1 000
ANL A,R1         0101 1 001       ORL A,R1         0100 1 001       XRL A,R1         0110 1 001
ANL A,R2         0101 1 010       ORL A,R2         0100 1 010       XRL A,R2         0110 1 010
ANL A,R3         0101 1 011       ORL A,R3         0100 1 011       XRL A,R3         0110 1 011
ANL A,R4         0101 1 100       ORL A,R4         0100 1 100       XRL A,R4         0110 1 100
ANL A,R5         0101 1 101       ORL A,R5         0100 1 101       XRL A,R5         0110 1 101
ANL A,R6         0101 1 110       ORL A,R6         0100 1 110       XRL A,R6         0110 1 110
ANL A,R7         0101 1 111       ORL A,R7         0100 1 111       XRL A,R7         0110 1 111
ANL A,direct     0101 0 101       ORL A,direct     0100 0 101       XRL A,direct     0110 0 101
                   dddddddd                          dddddddd                          dddddddd
ANL A,#data      0101 0 100       ORL A,#data      0100 0 100       XRL A,#data      0110 0 100
                   ########                          ########                          ########
ANL direct,A     0101 0 010       ORL direct,A     0100 0 010       XRL direct,A     0110 0 010
                   dddddddd                          dddddddd                          dddddddd
ANL direct,#data 0101 0 011       ORL direct,#data 0100 0 011       XRL direct,#data 0110 0 011
                   dddddddd                          dddddddd                          dddddddd
                   ########                          ########                          ########
ANL A,@R0        0101 0 110       ORL A,@R0        0100 0 110       XRL A,@R0        0110 0 110
ANL A,@R1        0101 0 111       ORL A,@R1        0100 0 111       XRL A,@R1        0110 0 111

 

    V príklade sú jedno-, dvoj- ale aj troj-slovné inštrukcie. Každá inštrukcia (aj viac slovná) má kódovanie operačného kódu a operandov v prvom slove inštrukcie.  Kódovanie má svoju logiku, ktorá uľahčuje dekódovanie. Ako vidno z farebného označenia, tvorcovia mikroprocesoru do kódov zahrnuli aj význam zakódovaný do jednotlivých skupín bitov v inštrukcii. (Vid. napr. zakódovanie čísel registrov R0 - R7.) 

    Množstvo inštrukcií a kombinácií operandov je obmedzený na celkový počet 256 možných kombinácií. Ako z tabuľky vidno, v princípe kódovanie každej 8 bitovej inštrukcie vzniká ako súhrn troch skupín binárnych kódov rôznej dlžky. Aj v rámci užšej skupiny ( vid. inštrukcia ANL), existuje ďalšie členennie na menšie skupiny, ktoré majú rôzne interpretácie kódov (vid direct a #data ako aj  A a #data  prípadne  @R0 a @R1) pritom  na ich rozlíšenie sa použil ten istý bit kódového slova. 

 

Návrat na začiatok

Register PSW - stavové slovo procesora

    PSW - PROGRAM STATUS WORD REGISTER - Register stavového slova, obsahuje nezávislé bity, ktoré majú svoju špecifickú úlohu a pracujú nezávise jedna od druhej. Sú to tieto:

CY AC FO RS1 RS0 OV P

Príznak prenosu (CY) - Príznak sa nastaví na 1 ak vznikne deviaty bit ako výsledok operácie vykonanej v ALU.

Pomocný príznak (AC) - Nastaví sa pri vykonnej operácii v ALU keď vznikne prenos medzi niblami t.j. v poradí medzi 4-tým a 5-tym bitom registra Acc.

Príznak nuly (FO) - ? 

Príznak pretečenia (OV) - Príznak naznačuje že bol získaný nesprávny výsledok operácie sčítania alebo odčítania, kde pri operácii napr. dvoch veľkých kladných čísel dostaneme výsledok záporný - OV signalizuje pretečenie

Príznak parity (P) - Signalizuje, že vo výsledku operácie je párny počet jedničiek. Toto sa využíva zvyčajne pri komunikácii medzi počítačmi pre potreby paritnej kontroly. 

 RS1, RS2 - Nastavenie aktuálneho banku registrov Rn (00, 01, 10, 11) .

Návrat na začiatok.

Priame a nepriame operandy v inštrukciách, 4 bitový nible

    Inštrukcie mikroprocesora  narábajú jednak s registrami, obsahom pamäti v programovej časti CODE resp. dátovej časti DATA. Pri bitových operáciách používa aj špeciálny príznak CY - CARRY - bit uchovávajúci prenosový bit resp. pomocný bit pri operáciách rotácie obsahu Acc cez CY príznak. 

Návrat na začiatok

Prehľad inštrukcií

Inštrukcia Operandy Popis Počet byte Príznaky Cyklov/ Taktov
 Algebraické a logické inštrukcie
ADD *- sčítaj / ADDC *- sčítaj aj s CY/ SUBB *- odčítaj s výpožičkou v CY/ ANL - logický súčin AND / ORL - logický súčet OR / XRL - operácia EXCLUSIVE OR  s operandom v registri Acc C,AC,OV,P
ADD, ADDC, SUBB A,Rn  s operandom v registri Rn - výsledok do Acc 1 P 1
ANL, ORL, XRL A,direct  s operandom na priamej adrese direct v inštrukcii - výsledok do Acc 2 P 1
A,@Ri  s operandom na adrese v registri Ri (i =0,1) - výsledok do Acc 1 P 1
A,#data  s priamym operandom #data v inštrukcii - výsledok do Acc  2 P 1
ANL - logický súčin AND / ORL - logický súčet OR / XRL - operácia EXCLUSIVE OR  s operandom na adrese direct
ANL, ORL, XRL direct, A s operandom v registri Acc - výsledok na priamu adresu direct v inštrukcii 2 / 1
direct,#data s priamym operandom #data v inštrukcii - výsledok na priamu adresu direct v inštrukcii 3 / 2
 
ANL, ORL C, bit AND , OR operandu na priamej adrese bit v inštrukcii  a CY, výsledok do CY 2 CY 2
C, /bit -"-  negovanej hodnoty operandu na priamej adrese  bit v inštrukcii a CY, výsledok do CY 2 CY 2
  Špeciálne inštrukcie pracujúce s obsahom registra A (aj Acc = akumulátor)
CLR A Vynulovanie Acc 1 P 1
CPL Doplnok Acc  - t.j. vzájomná zámena 1 a 0  1 / 1
RL Rotuj Acc doľava 1 / 1
RLC Rotuj Acc doľava cez CY 1 CY,P 1
RR Rotuj Acc doprava  1 / 1
RRC Rotuj Acc doprava cez CY 1 CY,P 1
SWAP Výmena nibles (t.j. high 4 bity a low 4 bity) v Acc 1 / 1
DAA Desiatková oprava Acc po aritmetickej  operácii 1 CY/P 1
 
CLR, SETB, CPL C  Vynuluj (CLR) Nastav (SETB) Invertuj (CPL)  bit príznaku CY 1 CY 1
bit  Vynuluj (CLR) Nastav (SETB) Invertuj (CPL)  bit na priamej bit. adrese bit v inštrukcii 2 / 1
  Inkrementačné a dekrementačné inštrukcie bez vplyvu na prenosový bit CY
INC, DEC A +1 (INC) resp. -1 (DEC)  opreandu v Acc 1 P 1
Rn +1 (INC) resp. -1 (DEC)  opreandu v Rn 1 / 1
direct +1 (INC) resp. -1 (DEC)  opreandu na priamej adrese direct v inštrukcii  0..255 v RAM 2 / 1
@Ri +1 (INC) resp. -1 (DEC)  opreandu na adrese adresovanej obsahom Ri (i = 0,1) 1 / 1
 
INC DPTR +1 operandu v registri DPTR 1 / 2
  Algebraické inštrukcie s výsledkom v dvoch registroch 
MUL AB  Vynásob operand v Acc (0..255)  operandom v B (0..255) -  výsledok do Acc-low B-high 1 CY,OV,P 4
DIV  Vydel operand v Acc operandom v B - celá časť podielu do Acc zvyšok do  B 1 CY,OV,P 4
  Prenosové inštrukcie operujúce s registrami a operendami v iRAM
MOV A,Rn presuň register Rn do registra Acc 1 P 1
A,direct presuň operand na priamej adrese direct v inštrukcii do registra Acc 2 P 1
A,@Ri presuň operand adresovaný registrom Ri (i = 0, 1 ) do registra Acc 1 P 1
A,#data presuň priamy operand #data z inštrukcie do registra Acc 2 P 1
Rn,A presuň obsah Acc registra do registra Rn  1 / 1
Rn,direct presuň operand na priamej adrese direct v inštrukcii do registra Rn 2 / 2
Rn,#data presuň priamy operand #data z inštrukcie do registra Rn 2 / 1
direct,A presuň obsah registra Acc na priamu adresu direct v inštrukcii  2 / 1
direct,Rn presuň obsah registra Rn na priamu adresu direct v inštrukcii  2 / 2
direct2,direct1 presuň operand na priamej adrese direct1 v inštrukcii na priamu adresu direct2 v inštrukcii  3 / 2
direct,@Ri presuň operand adresovaný registrom Ri (i = 0,1)  na priamu adresu direct v inštrukcii  2 / 2
direct,#data presuň priamy operand  #data z inštrukcie na priamu adresu direct v inštrukcii  3 / 2
@Ri,A presuň register Acc na adresu adresovanú registrom Ri (i = 0,1) 1 / 1
@Ri,#data presuň priamy operand #data z inštrukcie na adresu adresovanú registrom Ri (i = 0,1) 2 / 1
@Ri,direct presuň operand na priamej adrese direct v inštrukcii na adresu adresovanú registrom Ri  2 / 2
bit, C presuň CY na priamu bitovú adresu bit v inštrukcii  2 / 2
C, bit presuň bit. operand na priamej bitovej adrese bit v inštrukcii do CY 2 CY 1
DPTR,#data16 presuň priamy operand #data16 z inštrukcie do registra DPTR 3 / 2
  Prenosové inštrukcie operujúce s registrami a operendami v (i/e) ROM
MOVC A,@A+DPTR presuň operand z adresy A+DPTR  z kódovej pamäte (ROM) do registra Acc 1 P 2
A,@A+PC presuň operand z adresy A+PC  z kódovej pamäte (ROM) do registra Acc 1 P 2
  Prenosové inštrukcie operujúce s registrami a operendami v eRAM
MOVX A,@Ri presuň operand adresovaný registrom Ri z externej RAM (0..255) (i = 0,1) do registra Acc 1 P 2
A,@DPTR presuň operand adresovaný registrom DPTR  z externej RAM (0..56535) do registra Acc 1 P 2
@Ri,A presuň obsah registra Acc na adresu adresovanú registrom Ri (i = 0,1) v externej RAM 1 / 2
@DPTR,A presuň obsah registra Acc na adresu adresovanú registrom DPTR v externej RAM 1 / 2
  Prenosové inštrukcie operujúce so zásobníkom
PUSH direct Vlož (PUSH)  operand na priamej adrese direct v inštrukcii do  zásobníka  a  SP = SP + 1 1 / 2
POP Vyber (POP) operand zo zásobníka a ulož na priamu adresu direct v inštrukcii  a  SP = SP - 1 1 / 2
  Prenosové - výmenné inštrukcie operujúce s registrami a operendami v iRAM
XCH A,direct Vymeň operand v registri Acc s operandom  na priamej adrese direct v inštrukcii  2 P 1
A,@Ri  Vymeň operand v registri Acc s operandom  na adrese adresovanú registrom Ri (i = 0,1) 1 P 1
A,Rn Vymeň operendy v registri Acc s operandom v registri Rn 1 P 1
 
SWAP Výmena nibles (t.j. high 4 bity a low 4 bity) v Acc 1 / 1
  
XCHD A,@Ri  Vymeň  bity/0..3/ registra Acc s bitmi/0..3/ operandu na adrese adresovanú registrom Ri (i = 0,1) 1 P 1
  Volanie podprogramov a návrat z nich
ACALL  addr11 Volanie programu na priamej adrese addr11 v inštrukcii  (0..07FFh)  (PC)+2 do SP v poradi low, high byte 2 / 2
 
LCALL addr16 Dlhé volanie programu na priamej adrese addr16 v inštrukcii  (0..0FFFFh)  (PC)+3 do SP v poradi low, high byte 3 / 2
CALL Všeobecné dlhé volanie funguje ako ACALL resp. LCALL ? / 2
 
RET, RETI Návrat z podprogramu ( RET ) v prípade návratu z prerušenia ( RETI ) naviac povolí sa prerušenie rovnakej alebo nižšej úrovne PC = PChigh=((SP--))  +  PClow=((SP--)) t.j. navratová adresa sa aktivuje v PC. 1 / 2
 Neutrálna inštrukcia - implicitný kód prázdnej programovej pamäte - skok o 1
NOP Prejdi len na ďalšiu adresu bez vykonania operácie   PC++   1 / 1
  Nepodmienené skoky - inštrukcie ovplyvňujúce obsah PC registra
AJMP addr11 Absolutný skok na kratšiu adresu adrr11 v inštrukcii (0..07FFh) 2 / 2
LJMP addr16 Absolutný skok na dlhú adresu adrr16 v inštrukcii (0..0FFFFh) 3 / 2
SJMP rel Relatívny skok s použitím offsetu rel  <-128 + 127> na adresu (PC) + rel 2 / 2
JMP  @A+DPTR Relatívny skok na adresu v DPTR modifikovanú + obsahom Acc   1 / 2
JMP addr16 obdoba AJMP, SJMP, LJMP 2-3 / 2
 Skoky podmienené - inštrukcie ovplyvňujúce obsah PC registra
JZ, JNZ rel Ak obsah Acc=0  (JZ) resp. Acc<>0  (JNZ) skok na relatívny ofset (PC)  + rel v inštrukcii 2 / 2
JC, JNC Pri príznaku CY v PSW skok na relatívny ofset (PC) + rel v inštrukcii  2 / 2
 
JB, JNB, JBC bit, rel Skok ak bitový príznak na adrese bit  =1 (JB a JBC); = 0 (JNB)  na offset (PC)+ rel ; pri JBC pred skokom vynuluje pôvodne nastavený bit  3 / 2
 
CJNE A,direct,rel Porovnanie Acc s operandom na priamej adrese direct v inštrukcii, ak <> skok na ofset PC + rel  3 CY 2
A,#data,rel Porovnanie Acc s priamym operandom #data v inštrukcii, ak <> skok na ofset PC + rel  3 CY 2
Rn,#data,rel Porovnanie Rn s priamym operandom #data v inštrukcii, ak <> skok na ofset PC + rel  3 CY 2
@Ri,#data,rel Porovnanie operandu na adrese v Ri s priamym operandom #data v inštrukcii, ak <> skok na ofset PC + rel  Pozn.:  pri < > v teste  možno následne hneď využiť test JC resp. JNC  3 CY
=1 Op1<  OP2
=0 OP1>=OP2
2
 
DJNZ Rn,rel -1 operandu v registri a pri Rn<>0  skok na offset PC+ rel v inštrukcii  2 / 2
direct, rel -1 operandu na priamej adrese direct v inštrukcii a pri obsahu <>0  skok na offset PC+ rel v inštrukcii  3 / 2
 
Návrat na začiatok.

Nové pojmy

RAM - Random acces memory - Pamäť s náhodným prístupom = pamäťová súčiastka do ktorej sa dajú zapisovať slová na konkrétne adresy a potom ich opäť z týchto adries prečítať. Pamäť obsahuje dve zbernice - adresnú a dátovú. Okrem nich riadiace vodiče typu RD - read, WR - write, slúžiace na zápis a čítanie z pamäti. 

ROM -  Read only memory - Pamäť z ktorej sa dá len čítať. Obsahuje adresnú a dátovú zbernicu. Na čítanie slúži riadiaci vodič typu RD - read. 

NIBLE - rozumejú sa tým skupiny 4 bitov v registri. Bity 7-4 predstavujú horný nible a bity 3-0 predstavujú spodný nible.  Niektoré operácie zabezpečujú výmenu niblov medzi sebou v rámci jednoho slova, niektoré medzi dvomi slovami.

 

Návrat na začiatok.

Zdroje informácií

  1. Mikropočítač 8051. Arieh Nachum, Scientific Educational Systems LTD. 1991 

 

Návrat na začiatok.


Author Ing.  JANOUŠEK  Jaroslav.
Copyright © 2003   ManINFO - Košice.  All rights reserved.
Revised: januára 11, 2009 .