100 likes | 230 Views
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.
E N D
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 jednobajtová • Prvý bajt každej inštrukcie obsahuje operačný kód inštrukcie, ktorý určuje funkciu inštrukcie, t.j. čo má inštrukcia vykonať. • Druhý, resp. tretí bajt inštrukcie obsahuje operand, ktorým môže byť: • Rn, @Ri, DPTR, @DPTR A, C ( zahrnutý v kóde inštrukcie ) • direct, #data8, bit, rel, addr11 ( zaberá ďalší jeden bajt ) • direct,direct direct,rel bit,rel direct,#data8 #data8,rel #data16 addr16( zaberajú ďalšie dva bajty ) OP.KÓD operand dvojbajtová OP.KÓD trojbajtová operand operand
Príklady inštrukcií Rn, @Ri, DPTR, @DPTR A, C mov A,R5 mov @R1,A jmp @A,DPTR movx A,@DPTR clr C jednobajtová OP.KÓD operand direct, #data8, bit, rel, addr11 add A,63h mov R3,#25h setb 31h jz 55h ajmp 52h OP.KÓD dvojbajtová operand 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 OP.KÓD trojbajtová operand operand
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 mul AB div AB inc 45h dec A
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 cpl C anl C,35h orl C,47h mov C,51h mov 22h,C
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,R2xch 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 ANL A,#45h XRL A,@R1 CLR A CPL A RL A RRC 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átoraJump 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 komentár org 0023h ; obsluha prerusenia ser.kanalu mov R4,#PocZnakov ; pocet znakov prijimaneho slova Dalsi: mov A,SBUF ; presun prijateho znaku z bufra do Acc mov @R0,A ; ulozenie znaku do pamate inc R0 ; adresa nasledujuceho znaku clr RI ; povolenie prijmu dalsieho znaku djnz R4,Pokrac ; skok, ak nebolo prijate cele slovo mov R4,#PocZnakov ; pocet znakov celeho slova mov R0,#Zaznam ; adresa zaciatku slova v pamati Este: mov P1,@R0 ; zobrazenie znaku slova na P1 acall Delay ; podrzanie znaku na displeji 1sec inc R0 ; dalsi znak djnz R4,Este ; skok, ak nebolo zobrazene cele slovo mov P1,#0ffh ; zhasnutie displeja reti ; ukoncenie obsluhy prerusenia Pokrac: jbc RI,Dalsi ; skok, ak bol prijaty dalsi znak sjmp Pokrac ; cakacia slucka na prijem znaku inštrukcia návestie