Fórum témák

» Több friss téma
Cikkek » AVR Assembly kezdőknek
AVR Assembly kezdőknek
Szerző: sgt, idő: Nov 23, 2011, Olvasva: 33130, Oldal olvasási idő: kb. 2 perc
Lapozás: OK   7 / 12

Utasítások: 5 csoportba tudjuk osztani. Aritmerikai és logikai utasítások, elágazó utasítások, adat mozgató utasítások, bit és bittesztelő, uC vezérlő utasítások. Ezeket az adott uC adatlapjában lehet megtalálni az Instruction Set Summary könyvjelzőnél.

  • Mnemonics: az utasítás rövidített neve
  • Operands: az adott utasítás operandusai, ha van egyáltalán.
  • Description: mit is csinál az utasítás
  • Operation: ami a Description-ben van leírva az itt lerajzolva.
  • Flags: az itt felsorolt SREG-ben lévő flageket állíthatja! Nem feltétlenül fogja ezt tenni, csak amikor a regiszter tartalma azt kívánja.
  • #Clocks: a lefutási idő órajelben. A perjeleseknél a felhasználástól, vagy pedig arról hogy elágazik-e vagy sem.

Aritmetika és logikai utasítások: egy vagy két operandusa van, ha két operandusú, akkor lehet mindkettő regiszter avagy egyik regiszter másik egy K állandó, amit mi adhatunk meg.

  1. inc r22 – inkrementáljuk az r22 regiszter tartalmát.
  2. add r14, r15 – összeadjuk az r14, és r15 regisztert majd az eredmény bele kerül az r14 regiszterbe.
  3. ori r19, 0xF0 – bitenkénti vagy kapcsolat az r19 és 0xF0 között, ahol az eredmény az r19-be kerül.

Elágazó utasítások: itt található meg minden olyan utasítások, amelyek ugranak, szubrutint hívnak/visszatérnek, SREG bit tesztelői stb…

pl.:

  1. loop:
  2.      dec r19
  3.      brne loop ; elágaz, ha nem nulla

Jobbak már észrevehetik, hogy ezzel egy do-while ciklust lehet megvalósítani.

Nem nulla kifejezést úgy kell érteni, hogy ahogy fut a program akkor a brne-t megelőző utasítás beállítja az SREG-t, és az alapján dönti el, hogy elágazik, vagy engedi tovább futni a programot. Addig fog elágazni, amíg az r19 értéke nulla nem lesz.

  1. loop:
  2.      ; program kód
  3.      jmp loop

Itt a program semmi mást nem csinál, csak a loop címke és az ugró utasítás között „bolyong”.

Van itt egy olyan utasítás is, aminek az a lényege, mint pl. a brne-nek. Viszont mivel az argumentumában két operandus van, ezért nem tudták, hogy megoldani, hogy el lehessen ágaztatni, ezért az alábbit találták ki

  1. loop:
  2.      sbis PINC, 3 ; a C port 3. bitje magas szinten van?
  3.      jmp loop ; ha nem, vagyis a C port 3 bitje alacsony szinten van, akkor ez fut le
  4.      ldi r12, 0xF0 ; ez pedig akkor fog, ha igen, vagyis a C port 3. bitje magas szinten van

Adat mozgató utasítások: általános regiszterek közötti, általános és speciális regiszterek közötti adat mozgatásra van lehetőség, továbbá ezekkel lehet a memória táblába írni, és onnan olvasni és végül stackbe tenni a regiszter tartalmát vagy éppen kiszedni azt.

  1. mov r18, r20 ; az r20 tartalma átmásolódik az r18-ba.
  2. ld r19, X+ ; r19-be másoljuk az X pointer által mutatott értéket az SRAM-ból majd ezután automatikusan inkrementálódik az X pointer
  3. out DDRA, 0xFF ; DDRA speciális regiszterbe betöltjük a 0xFF-t

Bit és bittesztelő utasítások: ide jönnek az SREG-ben valamelyik bitet állító, vagy éppen törlő utasítások, vagy éppen a shiftelők, és lehetőségünk van a speciális regisztereknél a biteket külön-külön állítani vagy éppen törölni.

  1. sbi ADMUX, 5 ; az ADMUX speciális regiszterének az 5. bitjét állítja 1-be.
  2. sei ; ezzel tudjuk engedélyezni a globális megszakítást
  3. ror r19 ; r19-es regiszter tartalmát jobbra shifteljül eggyel.

uC vezérlő utasítások: ide tartozik minden (az a 4), ami nem konkrétan az adat manipulálásra, meg ilyenekre valók.

  1. nop ; egy utasításig nem csinál semmit


A cikk még nem ért véget, lapozz!
Következő: »»   7 / 12
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem