Prehľad inštrukcií I8051 (Ing.Sviantek

Download Report

Transcript Prehľad inštrukcií I8051 (Ing.Sviantek

Druhy inštrukcií
• Mikropočítač I8051 má k dispozícii sadu inštrukcií,
obsahujúcu 255 inštrukcií
• Inštrukcie sú rozdelené do niekoľkých skupín podľa toho,
aký druh operácií uskutočňujú
•
•
•
•
•
Aritmetické
Logické 1- bitové
Presunové
Logické 8 - bitové
Skokové a vetviace
Syntax inštrukcie
OP.KÓD
operand
OP.KÓD
operand
• Prvý bajt každej inštrukcie
obsahuje operačný kód
inštrukcie, ktorý určuje funkciu
jednobajtová
inštrukcie, t.j. čo má inštrukcia
vykonať.
• Druhý, resp. tretí bajt inštrukcie
obsahuje operand, ktorým môže
byť:
dvojbajtová • Rn, @Ri, DPTR, @DPTR A, C
( zahrnutý v kóde inštrukcie )
OP.KÓD
operand
operand
• direct, #data8, bit, rel, addr11
zaberá ďalší jeden bajt )
trojbajtová
• direct,direct direct,rel bit,rel
direct,#data8 #data8,rel
#data16
addr16
( zaberajú ďalšie dva bajty )
(
Príklady inštrukcií
OP.KÓD
operand
OP.KÓD
jednobajtová
Rn, @Ri, DPTR, @DPTR A, C
mov A,R5
mov @R1,A
jmp @A,DPTR movx A,@DPTR
clr C
direct, #data8, bit, rel, addr11
dvojbajtová
operand
add A,63h
mov R3,#25h
setb 31h
jz 55h
ajmp 52h
OP.KÓD
operand
operand
trojbajtová
direct,direct direct,rel bit,rel
direct,#data8 #data8,rel #data16
addr16
mov 43h,25h
cjne A,28h,13h
jnb 25h,20h
mov 55h,#17d
cjne A,#20h,40h
mov DPTR,#0521h
lcall 2410h
Skupiny inštrukcií
• Aritmetické – pracujú s ALU a vykonávajú jednoduché
matematické operácie ako sčítanie, odčítanie, násobenie
a delenie. Patria k nim inštrukcie inkrementácie ( +1) a
dekrementácie ( - 1 ).
• Register A ( akumulátor, Acc ) vždy obsahuje jeden
operand
• Výsledok operácie sa vždy zapisuje do akumulátora, takže
sa prepíše predošlý obsah akumulátora
add A,R5
subb A,@R1
inc 45h
dec A
mul AB
div AB
Skupiny inštrukcií
• Logické 1- bitové – pracujú so samostatnými bitmi v
rámci bitovo adresovateľnej časti internej dátovej pamäti
( 0020h – 002Fh ), s príznakovým bitom C ako aj s
niektorými bitmi SFR ( špeciálnych funkčných registrov )
• Umožňujú nastavenie, nulovanie a negáciu priamo
adresovaného bitu, príznakového bitu C
• Logický súčet, súčin bitu C a priamo adresovaného bitu
• Presun adresovaného bitu do príznakového bitu C a
opačne
setb 25h
mov C,51h
cpl C
anl C,35h
mov 22h,C
orl C,47h
Skupiny inštrukcií
• Presunové – prenášajú hodnotu zo zdrojového
•
•
•
•
operandu do cieľového, pričom sa zdrojový operand
nemení
Vzájomne si vymieňajú hodnoty cieľového a zdrojového
operandu
Vedia zapisovať do a čítať zo zásobníka. Po resetovaní
je automaticky zvolená banka registrov 0 a ukazateľ
zásobníka SP je nastavený na hodnotu 07h
Majú inštrukcie pre čítanie z pamäti programu ( movc ...
Majú inštrukcie pre zápis a čítanie inštrukcií a dát z
externej pamäti ( movx ...
mov A,R2 xch A,56h
push 48h
pop 55h
movc A,@A+DPTR movx @R0,A movx A,@DPTR
Skupiny inštrukcií
• Logické – vykonávajú operácie logického súčtu (OR),
súčinu (AND), výhradne logického súčtu (XOR)
s
8 - bitovými operandami
• Uskutočňujú rotácie registra A ( akumulátora ) vpravo a
vľavo bez príznaku C, aj s príznakom C
• Umožňujú nulovanie a negáciu obsahu registra A
• Je možné vykonať vzájomnú výmenu hornej a dolnej
štvorice bitov registra A
ORL A,R7
CPL A
ANL A,#45h
RL A
RRC A
XRL A,@R1 CLR A
SWAP A
Skupiny inštrukcií
• Skokové – umožňujú programátorovi rozhodovať, ktorou
cestou bude program vykonávaný
• Vykonanie nepodmieneného skoku
• Vykonanie podmieneného skoku na základe splnenia podmienky,
ktorou môže byť :
–
–
–
–
Nulový, nenulový obsah akumulátora Jump if Zero, Jump if Not Zero
Nulový, nenulový stav adresovaného bitu Jump if Bit, Jump if Not Bit
Nulový, nenulový stav príznakového bitu C Jump if C, Jump if Not C
Nenulový stav registra Rn alebo pamäťového miesta direct
Decrement & Jump if Not Zero
– Nerovnosť obsahu akumulátora s obsahom direct, #data8
Compare & Jump if Not Equal
– Nerovnosť obsahu registra s #data8
– Nerovnosť nepriamo adresovanej pamäte s #data8
ajmp addr11 sjmp 25h LJMP 2144h
jz 3F
jmp @A+DPTR jnz 52h jnb 22h,50h jb 28h,45h
djnz R6,44h cjne R4,#20h,55h
jc start
Skupiny inštrukcií
• Vetviace – umožňujú programátorovi pracovať s
podprogramami a to :
• Volanie podprogramu
• Volanie podprogramu na obsluhu prerušenia
• Návrat z podprogramu do hlavného programu
acall addr11
LCALL addr16
ret
reti
Syntax zápisu inštrukcií v programe
Adresa začiatku programu
org 0023h
mov R4,#PocZnakov
Dalsi: mov A,SBUF
mov @R0,A
inc R0
inštrukcia
clr RI
djnz R4,Pokrac
mov R4,#PocZnakov
mov R0,#Zaznam
Este: mov P1,@R0
acall Delay
návestie inc R0
djnz R4,Este
mov P1,#0ffh
reti
Pokrac: jbc RI,Dalsi
sjmp Pokrac
komentár
; obsluha prerusenia ser.kanalu
; pocet znakov prijimaneho slova
; presun prijateho znaku z bufra do Acc
; ulozenie znaku do pamate
; adresa nasledujuceho znaku
; povolenie prijmu dalsieho znaku
; skok, ak nebolo prijate cele slovo
; pocet znakov celeho slova
; adresa zaciatku slova v pamati
; zobrazenie znaku slova na P1
; podrzanie znaku na displeji 1sec
; dalsi znak
; skok, ak nebolo zobrazene cele slovo
; zhasnutie displeja
; ukoncenie obsluhy prerusenia
; skok, ak bol prijaty dalsi znak
; cakacia slucka na prijem znaku