TEP Instrukční soubor

25
TEP Instrukční soubor č.9

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 Presentation

Transcript of TEP Instrukční soubor

Page 1: TEP Instrukční soubor

TEPInstrukční soubor

č.9

Page 2: TEP Instrukční soubor

Téma Assembler AVR Předmět TEP Autor Juránek Leoš Ing.

TEP

Page 3: TEP Instrukční soubor

AVRinstrukční soubor

Nová kapitola

Page 4: TEP Instrukční soubor

Přesunové

Aritmetické

Logické a bitové

Řízení programu

Instrukční soubor

Page 5: TEP Instrukční soubor

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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?