tep instrukční soubor
DESCRIPTION
TEP Instrukční soubor. č.9. TEP. Téma Assembler AVR Předmět TEP Autor Juránek Leoš Ing. AVR instrukční soubor. Nová kapitola. Instrukční soubor. Přesunové Aritmetické Logické a bitové Řízení programu. Přesunové instrukce. Registr registr MOV, MOVW Registr RAM - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/1.jpg)
TEPInstrukční soubor
č.9
![Page 2: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/2.jpg)
Téma Assembler AVR Předmět TEP Autor Juránek Leoš Ing.
TEP
![Page 3: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/3.jpg)
AVRinstrukční soubor
Nová kapitola
![Page 4: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/4.jpg)
Přesunové
Aritmetické
Logické a bitové
Řízení programu
Instrukční soubor
![Page 5: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/5.jpg)
Registr registrMOV, MOVW
Registr RAMLDI, LDS, LD, LDD
Registr RAMSTS, ST, STD
Registr Registr I/OIN, OUT
Registr paměť programuLPM
ZásobníkPUSH,POP
Přesunové instrukce
![Page 6: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/6.jpg)
MOV R1,R0
Registr -> registr
MOV Rd,Rr Rd Rr r,d=0,31 Copy register
MOVW Rd+1:Rd,Rr+1:Rr Rd+1:Rd Rr+1:Rr r,d even r,d=0,2,..30 Copy register pair
Přesuň registr R0 do R1
Přesuň registr R1 do R17 a R0 do R16
MOVW R17:R16,R1:R0
1
2
Registr registr
![Page 7: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/7.jpg)
Registr RAM
LDI R16,127Naplň registr R16 číslem 127
LDS R19,0x200Načti hodnotu adresy 0x200 do registru R19 (přímá adresace)
Registr <- RAM
LDI Re,K8 Re K8 e=16,31 Load Immediate
LDS Rd,k Rd (k) d=0,31 Load Direct from Data Space
LD Rd,P Rd (P) P=X,Y,Z Load Indirect
LD Rd,P+ Rd (P) ; P=P+1 P=X,Y,Z Load Indirect and Post-Increment
3
4
![Page 8: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/8.jpg)
Registr RAM
LDI XL,0x01LDI XH,0x03
LD R19,X
Načti hodnotu adresy (0x0301), která je v registru X, do registru R19 (nepřímá adresace)
Po načtení inkrementuj registr X
LD R19,X+
Registr <- RAM
LDI Re,K8 Re K8 e=16,31 Load Immediate
LDS Rd,k Rd (k) d=0,31 Load Direct from Data Space
LD Rd,P Rd (P) P=X,Y,Z Load Indirect
LD Rd,P+ Rd (P) ; P=P+1 P=X,Y,Z Load Indirect and Post-Increment
5
6
![Page 9: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/9.jpg)
Registr RAM
STS 0x200,R19Ulož obsah registru R19 na adresu 0x200 (přímá adresace)
Registr -> RAM
STS adr,Rr (adr) Rr r=0,31 Store Direct
ST P,Rr (P) Rr P=X,Y,Z Store Indirect
ST P+,Rr (P) Rr ; P=P+1 P=X,Y,Z Store Indirect and Post-Increment
7
![Page 10: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/10.jpg)
Registr Registr I/OObsluha SFR RAM 0x20 - 0x5F (64 adres)
IN Rd,P Rd (P) d=0,31 In Port
OUT P,Rd (P) Rd d=0,31 Out Port
OUT PORTA,R19Zapiš do registru PORTA obsah registru R19
IN R19,PINF Přečti hodnotu z registru PINF do registru R19
9
10
![Page 11: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/11.jpg)
Registr paměť programuČtení z paměti programu
LPM R0 (Z) pouze Z Load Program Memory
LPM Rd,Z Rd (Z) pouze Z Load Program Memory
LPM Rd,Z+ Rd (Z) ; Z=Z+1 pouze Z Load Program Memory and Post-Increment
LDI ZL,LOW(TAB*2)LDI
ZH,HIGH(TAB*2)
LPM R2,Z…TAB: .DB 1,2,3,4
Přečti hodnotu z tabulky, která je součástí paměti programu (na adrese TAB) do registru R2
11
![Page 12: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/12.jpg)
ZásobníkZapsání do zásobníku, čtení ze zásobníku
PUSH Rd Rd ((SP)) , (SP) (SP)-1 d=0,31 Push register on Stack
POP Rd (SP) (SP)+1 , ((SP)) Rd d=0,31 Pop register from Stack
PUSH R12POP R12
Ulož registr R12 do zásobníku;Obnov registr R12 ze zásobníku
12
![Page 13: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/13.jpg)
Kontrolní úkoly Jakou instrukci použijeme pro přesun dat mezi
registry? Jakou instrukce použijeme pro zápis do paměti SRAM
přímou adresací? Jakou instrukce použijeme pro čtení z paměti SRAM
nepřímou adresací? Jakou instrukce použijeme pro zápisu do I/O registru? Jakou instrukce použijeme pro čtení z paměti
programu?
![Page 14: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/14.jpg)
8 bitové sčítání, odčítání ADD, ADC, SUB, SUBI, SBC, SBCI
16 bitové sčítání, odčítáníADIW, SBIW
8 bitové násobeníMUL, MULS, MULSU, FMUL, FMULS, FMULSU
Nulování, nastavení, doplněkSER, CLR, COM, NEG
Aritmetické instrukce
![Page 15: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/15.jpg)
LogickéAND, ANDI, OR, ORI, EOR, SBR, CBR
BitovéLSL, LSR, ROR, ROL, ASR, SWAP…
SREGBSET, BCLR …
Bity v I/OSBI, CBI
Logické a bitové instrukce
![Page 16: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/16.jpg)
IN R16,PORTKORI
R16,0b00001000OUT PORTK,R16
Nastav bit 3 v I/O registru PORTK
12
IN R16,PORTKANDI
R16,0b11111110OUT PORTK,R16
Nuluj bit 0 v I/O registru PORTK
13
Logické instrukce
AND Rd,Rr Rd Rd & Rr r,d=0,31 Logical AND
ANDI Re,K8 Re Re & K8 e=16,31 Logical AND with Immediate
OR Rd,Rr Rd Rd | Rr r,d=0,31 Logical OR
ORI Re,K8 Re Re | K8 e=16,31 Logical OR with Immediate
EOR Rd,Rr Rd Rd EOR Rr r,d=0,31 Logical Exclusive OR
SBR Re,K8 Re Re | K8 r,d=0,31 Set Bit(s) in Register
CBR Re,K8 Re Re & (0xFF-K8) r,d=0,31 Clear Bit(s) in Register
Logické instrukce
![Page 17: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/17.jpg)
SBI PORTA,0Nastav bit 0 v I/O registru PORTA
14
Bity v I/O
SBI P,b I/O(P,b) 1 Set bit in I/O register
CBI P,b I/O(P,b) 0 Clear bit in I/O register
CBI DDRB,7Nuluj bit 7 v I/O registru DDRB
15
Bity v I/O
![Page 18: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/18.jpg)
Kontrolní úkoly Jakou instrukci použijeme pro přesun dat mezi
registry? Jakou instrukce použijeme pro zápis do paměti SRAM
přímou adresací? Jakou instrukce použijeme pro čtení z paměti SRAM
nepřímou adresací? Jakou instrukce použijeme pro zápisu do I/O registru? Jakou instrukce použijeme pro čtení z paměti
programu?
![Page 19: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/19.jpg)
Kontrolní úkoly Chceme vynulovat 3. bit v registru R20. Jakou
nastavíme masku a jakou logickou operaci toto provedeme?
![Page 20: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/20.jpg)
Instrukce řízení programu Skoky Nepodmíněné (Jump)
RJMP, JMP, IJMP Podmíněné (Branch)
BRNE, BREQ, BRxx…
Přeskoky (Skip)SBIC, SBIS, SBRC, SBRS
Podprogramy (Subroutine)RCALL, RET, RETI…
![Page 21: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/21.jpg)
Nepodmíněný skok
OPAKUJ:……RJMP OPAKUJ
Instrukce
RJMP OPAKUJ
OPAKUJ:
Program pokračuje na adrese návěští (modifikuje se čítač programu PC)
![Page 22: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/22.jpg)
Podmíněný skok
Podmínka
Instrukce
Ne
Ano
OPAKUJ:
OPAKUJ:CPI R1,25BREQ OPAKUJNOPNOP
Podmínku vyhodnotíme instrukcí CPI, která nastaví podmínkový registr SREG a volbou vhodného typu skoku program pokračuje na adrese návěští (modifikuje se čítač programu PC), jinak se provede další instrukce.
![Page 23: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/23.jpg)
Přeskok
Podmínka
Instrukce
Ne
Ano
SBRC R1,3RJMP OPAKUJNOPNOP
Podmínku vyhodnotíme instrukcí typu SKIP, pokud je podmínka vyhodnocena TRUE přeskočíme následující instrukci, jinak pokračuje další instrukcí.
![Page 24: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/24.jpg)
Podprogram
ROUT1
RET
ROUT1
RCALL ROUT1
NOP…
ROUT1:…RET
Program pokračuje na návěští ROUT1. Do zásobníku (SP) se zapíše návratová adresa. Podprogram musí končit instrukcí RET, která vyzvedne návratovou adresu ze zásobníku a modifikuje čítač programu PC.
![Page 25: TEP Instrukční soubor](https://reader036.vdocuments.site/reader036/viewer/2022081421/5681491e550346895db658df/html5/thumbnails/25.jpg)
Kontrolní úkoly Instrukce ADD R1, R0; obsah registru
R1=0b11110000, R0=0b10101111.Jaký bude obsah registrů R0, R1 a příznaku C po vykonání instrukce?
Instrukce LD R1,X+; X=0x305; SRAM(0x305)=124.Jaký bude obsah R1, X, SRAM(0x305) po vykonání instrukce?
Instrukce INC R1; R1=0xFF. Jaký bude obsah registru R1 po vykonání instrukce?