Podstawy Techniki Mikroprocesorowej Instrukcje, tryby adresowania Wydział Elektroniki Mikrosystemów i Fotoniki dr inż. Piotr Markowski Na prawach rękopisu. Na podstawie dokumentacji ATmega8535, www.atmel.com.
Lista instrukcji ATmega8535
Lista instrukcji ATmega8535 (1) Arytmetyczne i logiczne
Lista instrukcji ATmega8535 Oznaczenia Rd, Rr rejestr uniwersalny X, Y, Z rejestry uniwersalne 16-bitowe P rejestr specjalny K stała (dane) k stała (adres) b,s numer bitu w rejestrze
Lista instrukcji ATmega8535
Lista instrukcji ATmega8535 (2) Skoku/warunkowe
Lista instrukcji ATmega8535 (3) Transferu danych
Lista instrukcji ATmega8535 (4) Na bitach
Lista instrukcji ATmega8535 (5) Specjalne
Pierwsze instrukcje
LDI Load Immediate
OUT Store Register to I/O Location OUT P,Rr 0 r 31, 0 P 63
IN - Load an I/O Location to Register IN Rr,P 0 r 31, 0 P 63
Program 1 Zadanie: wysłać 1 na co drugi pin portu A
RJMP Relative Jump
RJMP Relative Jump
INC Increment
DEC Decrement
ROL Rotate Left trough Carry ROR Rotate Right trough Carry
Zadanie: biegnąca dioda
MOV Copy Register
Wysyłanie na stos / pobieranie ze stosu Rd SP (RAMEND)
PUSH Push Register on Stack POP Pop Register from Stack
1. Instrukcje skoku i warunkowe 1.1. Instrukcje skoku warunkowego
Instrukcje skoku warunkowego
BRIE Branch if Global Interrupt is Enabled
BRID Branch if Global Interrupt is Disabled
BRTS Branch if the T Flag is Set BRTC Branch if the T Flag is Cleared
BRHS Branch if Half Carry Flag is Set BRHC Branch if Half Carry Flag is Cleared
BRGE Branch if Greater or Equal (Signed) BRLT Branch if Less Than (Signed)
BRVS Branch if Overflow Set BRVC Branch if Overflow Cleared
BRPL Branch if Plus BRMI Branch if Minus
BREQ Branch if Equal BRNE Branch if Not Equal
BRSH Branch if Same or Higher (Unsigned) BRLO Branch if Lower (Unsigned)
BRSH Branch if Same or Higher (Unsigned) BRLO Branch if Lower (Unsigned) BRSH = BRCC (Branch if Carry Clear) BRLO = BRCS (Branch if Carry Set)
BRBS Branch if Bit in SREG is Set BRBC Branch if Bit in SREG is Cleared
CP Compare
* dla liczb ** dla liczb Porównywanie rejestrów CP Rd,Rr CP R0, R31 ; BRxx tam ; jeżeli RJMP tutaj ; jeżeli Rd Rr BRGE * Rd Rr BRLT * BRSH ** BRLO ** BRCC ** BRCS ** Rd Rr BREQ * Rd Rr BRNE *
Przykład Pętla opóźniająca BRNE (flaga Z)
Pętla opóźniająca 1 1 2(1) 1 + 255 (1+2) = 766 cykli 0,8 ms 1 + 255 (766+1+2) = 196 095 cykli 200 ms BRNE skocz do OP jeśli flaga Z = 0 Z = 1 0000 0001 -> 0000 0000 R20 R20
1. Instrukcje skoku i warunkowe 1.2. Instrukcje warunkowe (pominięcia)
Instrukcje pominięcia
CPSE Compare Skip if Equal
SBRS Skip if Bit in Register is Set SBRC Skip if Bit in Register is Cleared
SBIS Skip if Bit in I/O Register is Set SBIC Skip if Bit in I/O Register is Cleared
Przykład Zmiana kierunku obrotu SBRS/SBRC
Zmiana kierunku obrotu 7 6 5 4 3 2 1 0
1. Instrukcje skoku i warunkowe 1.3. Instrukcje skoku
Instrukcje skoku
IJMP Indirect Jump
RCALL Relative Call to Subroutine
ICALL Indirect Call to Subroutine
RET Return from Subroutine
RETI Return from Interrupt
Przykład - podprogramy
2. Instrukcje arytmetyczne i logiczne 2.1. Instrukcje logiczne
Operacje logiczne
AND Logical AND
ANDI Logical AND with Immediate
OR Logical OR ORI Logical OR with Immediate
EOR Exclusive OR
COM One s Complement
NEG Two s Complement
TST Test for Zero or Minus
CLR Clear Register
SER Set Register
2. Instrukcje arytmetyczne i logiczne 2.2. Instrukcje arytmetyczne
Operacje arytmetyczne
ADD Add without Carry SUB Subtract without Carry
ADC Add with Carry SBC Subtract with Carry
ADIW Add Immediate to Word SBIW Subtract Immediate from Word
SUBI Subtract Immediate
SBCI Subtract Immediate with Carry
MUL Multiply Unsigned
MULS Multiply Signed
MULS Multiply Signed 0111 1111-127 0111 1110-126... 0000 0001-1 0000 0000-0 1111 1111 - -1 1111 1110 - -2... 1000 0001 - -127 1000 0000 - -128
MULSU Multiply Signed with Unsigned
Mnożenie MUL: 1000 0110 1100 1110 R1 R0 MULS: 0000 0111 1100 1110 R1 R0 MULSU: 1111 0101 1100 1110 R1 R0
FMUL Fractional Multiply Unsigned
Mnożenie ułamków Zapis liczby zmiennoprzecinkowej: 2 0 + 2-1 + 2-2 + 2-3 + 2-4 + 2-5 +... 1000 0000 = 1100 0000 = 0110 0000 = 1111 1111 = 1.9921875 FMUL: x =
FMULS Fractional Multiply Signed
Ułamki ze znakiem 0111 1111 = 0.9921875... 0000 0001 = 0.0078125 0000 0000 = 0 1111 1111 = -0.0078125 0000 0000 + 1... 1000 000 = -1
FMULSU Fractional Multiply Signed with Unsigned
CP Compare
CPC Compare with Carry
CPI Compare with Immediate
3. Instrukcje bitowe i rejestru SREG 3.1. Instrukcje bitowe
Operacje na bitach
SBR Set Bits in Register CBR Clear Bits in Register
SBI Set Bit in I/O Register CBI Clear Bit in I/O Register
Rejestry specjalne
LSL Logical Shift Left LSR Logical Shift Right
ROL Rotate Left trough Carry ROR Rotate Right trough Carry + 1001 1100 1001 1100 C=0 ADC C=1 0011 1000
ASR Arithmetic Shift Right
SWAP Swap Nibbles
3. Instrukcje bitowe i rejestru SREG 3.2. Instrukcje rejestru SREG
Operacje na rejestrze SREG
Instrukcje CL.. CLI CLT CLH CLS CLV CLN CLZ CLC I T H S V N Z C «0 «0 «0 «0 «0 «0 «0 «0 Clear flag
Instrukcje SE.. SEI SET SEH SES SEV SEN SEZ SEC I T H S V N Z C «1 «1 «1 «1 «1 «1 «1 «1 Set flag
BSET Bit Set in SREG BCLR Bit Clear in SREG
BLD Bit Load from T Flag to Register BST Bit Store from Register to T Flag
4. Tryby adresowania, Instrukcje transferu danych
Instrukcje transferu danych
Tryby adresowania mapy pamięci 40 / 110 20 / 110 2 / 110 8 / 110 2 / 110 30 / 110 2 / 110 Pamięć programu FLASH EEPROM 8 kb (4096 x 16 bitów) 0 Pamięć danych 32 rejestry uniwersalne 64 rejestry specjalne 0 31 0 (32) 63 (95) 0 (96) rejestr Program Counter (licznik programu) SRAM 512 B 511 (607) (RAMEND) 4095
4.1. Tryby adresowania: rejestry uniwersalne bezpośrednio
Rejestry uniwersalne bezpośrednio Pamięć programu 0 Pamięć danych 32 rejestry uniwersalne 0 31 0 (32) FLASH EEPROM 8 kb (4096 x 16 bitów) 64 rejestry specjalne 63 (95) 0 (96) rejestr Program Counter (licznik programu) SRAM 512 B 511 (607) (RAMEND) 4095
Rejestry uniwersalne bezpośrednio INC R16 CLR R17 ROL R18 SWAP R19
Rejestry uniwersalne bezpośrednio ASR Rd DEC Rd ROL Rd ADD R20,R21 OR R22,R23 MUL R24,R24 CP R25,R26 MOV R27,R28 LDI R29,123
MOVW Copy RegisterWord movw R29:R28,R31:R30
4.2. Tryby adresowania: rejestry specjalne bezpośrednio
Rejestry specjalne bezpośrednio Pamięć programu 0 Pamięć danych 32 rejestry uniwersalne 0 31 0 (32) FLASH EEPROM 8 kb (4096 x 16 bitów) IN R16,PINA OUT DDRB,R18 64 rejestry specjalne 63 (95) 0 (96) SBI GICR,6 CBI ADMUX,4 rejestr Program Counter (licznik programu) SRAM 512 B SEI 511 (607) (RAMEND) 4095
Rejestry specjalne bezpośrednio
Tryby adresowania pamięć danych Pamięć programu 0 Pamięć danych 32 rejestry uniwersalne 0 31 0 (32) FLASH EEPROM 8 kb (4096 x 16 bitów) 64 rejestry specjalne 63 (95) 0 (96) rejestr Program Counter (licznik programu) SRAM 512 B 511 (607) (RAMEND) 4095
4.3. Tryby adresowania: pamięć danych bezpośrednio
Tryby adresowania pamięć danych bezpośrednio
Adresowanie bezpośrednie (LDS, STS)
LDS Load Direct from Data Space STS Store Direct to Data Space LDS R16,31 //pod STS 58,R17 //pod
Tryby adresowania pamięć danych Kod op. 0111 001001 010111 Arg. 1 (9) Arg. 2 0111 001001 010111 Kod op. Arg. 1 (9) Arg. 2 (23) Pam. danych 11010001
Tryby adresowania pamięć danych pośrednio 4.4. Pamięć danych pośrednio 4.5. Pam. d. pośrednio z pre-dekrementacją 4.6. Pam. d. pośrednio z post-inkrementacją 4.7. Pam. d. pośrednio z przesunięciem
Tryby adresowania pamięć danych pośrednio
Adresowanie pośrednie (LD, ST) LDI R31,$2a LDI R30,$c2 LDI Yl,$2a LDI Yh,$c2 LD R16, Z //do ST Y, R17 //pod
PUSH R20 //wyślij na STOS //następnie Adresowanie pośrednie (LD, ST) Pre-dekrementowany LD R16,-Z //do ST -Y, R17 //pod
POP R20 //pobierz ze //następnie Adresowanie pośrednie (LD, ST) Post-inkrementowany LD R16, Z+ //do R16 bajt ST Y+, R17 //pod adr. zapisany
Adresowanie pośrednie z przesunięciem (LDD, STD) LDD R16, Y+25 //do R16 bajt STD Z+63, R17 //pod adr. zapisany
4.8. Tryby adresowania: pamięć programu
Tryby adresowania mapy pamięci Pamięć programu 0 Pamięć danych 32 rejestry uniwersalne 0 31 0 (32) FLASH EEPROM 8 kb (4096 x 16 bitów) 64 rejestry specjalne 63 (95) 0 (96) rejestr Program Counter (licznik programu) SRAM 512 B 511 (607) (RAMEND) 4095
Tryby adresowania pamięć programu
LPM Load Program Memory SPM Store Program Memory LPM //do R0 LPM R16, Z //do R16 LPM R17,Z+ //do R17 SPM //do pary //ładuje 16
4.9. Adresowanie skoków względne 4.10. Adresowanie skoków pośrednie 4.11. Adresowanie skoków bezpośrednie
Tryby adresowania mapy pamięci Pamięć programu 0 Pamięć danych 32 rejestry uniwersalne 0 31 0 (32) FLASH EEPROM 8 kb (4096 x 16 bitów) 64 rejestry specjalne 63 (95) 0 (96) rejestr Program Counter (licznik programu) SRAM 512 B 511 (607) (RAMEND) 4095
Adresowanie skoków względne RJMP, RCALL, BRxx RJMP 753 //skocz do RCALL 753 //skocz BRNE 54 //skocz o
Adresowanie skoków pośrednie IJMP, ICALL LDI R31,$2a LDI R30,$c2 IJMP //skocz do ICALL //skocz
Adresowanie skoków bezpośrednie JMP, CALL JMP 2547 //skocz do CALL 2547 //skok
5. Instrukcje specjalne (kontrolne MCU)
Operacje specjalne MCU
NOP No Operation
SLEEP
WDR Watchdog Reset
BREAK
Przykładowe zagadnienia sprawdzające
Przykładowe zagadnienia sprawdzające 1. Zapisz liczbę 147 w 8-bitowym kodzie: binarnym, U2, szesnastkowym. 2. Wskaż błąd w zapisie instrukcji LDI: LDI R16,R17. W jakich kodach liczbowych należy zapisać R16, R17 dla instrukcji MULS R16,R17? (opanowanie wiedzy na temat wybranych instrukcji: LDI, OUT/IN, ROL/ROR, MULS, EOR, MOV, BRNE, RJMP/IJMP/RCALL, RET/RETI, SBRS/SBRC/SBIS/SBIC, PUSH/POP, SEI/CLI). 3. Zapisz liczbę -1,75 w 8-bitowym kodzie zmiennoprzecinkowym. 4. Adresowanie bezpośrednie vs. pośrednie wyjaśnij różnicę. 5. Jakich rodzajów pamięci dotyczy pojęcie adresowania? 6. Adresowanie post-inkrementowane / pre-dekrementowane wyjaśnij terminy.