Vissza a főoldalra    Vissza a PIC főoldalra

<< Előző oldal   Vissza a tartalomjegyzékhez   Következő oldal >>

 


11.4.8. Eltolás, forgatás


Assembly programozás tartalomjegyzék

Bájt forgatás balra C-n keresztül
Bájt forgatás jobbra C-n keresztül
Bájt forgatás balra
Bájt forgatás jobbra
Alsó és felső félbájt cseréje
Eltolás balra
Eltolás jobbra
Bájt bitsorrend felcserélése
Bitpárok felcserélése


      Bájt forgatás balra C-n keresztül:

      Tetszőleges adatregiszter tartalmának forgatása balra a STATUS regiszter C túlcsordulás jelzőbitjén keresztül egyetlen RLF utasítással elvégezhető. A C értéke jobbról belép a felszabaduló helyre, a balról kilépő bit pedig a C-be kerül. Azt, hogy a forgatás eredménye a W-be, vagy az elforgatott regiszterbe kerül-e, az utasításban elhelyezett célkijelölő bit határozza meg.

Forgatás balra C-n keresztül

11.4.8-1. Ábra

      A műveletet bemutató programrészlet:

... ...    
  rlf REG,0 ;W = a REG regiszter C-n keresztül balra forgatva
  ...    

Vissza a lap tetejére


      Bájt forgatás jobbra C-n keresztül:

      Tetszőleges adatregiszter tartalmának forgatása jobbra a STATUS regiszter C túlcsordulás jelzőbitjén keresztül egyetlen RRF utasítással elvégezhető. A C értéke balról belép a felszabaduló helyre, a jobbról kilépő bit pedig a C-be kerül. Azt, hogy a forgatás eredménye a W-be, vagy az elforgatott regiszterbe kerül-e, az utasításban elhelyezett célkijelölő bit határozza meg.

Forgatás jobbra C-n keresztül

11.4.8-2. Ábra

      A műveletet bemutató programrészlet:

... ...    
  rrf REG,0 ;W = a REG regiszter C-n keresztül jobbra forgatva
  ...    

Vissza a lap tetejére


      Bájt forgatás balra:

      Egy adatregiszter tartalmának balra forgatása a következőt jelenti:

Forgatás balra

11.4.8-3. Ábra

      Tetszőleges adatregiszter tartalmának balra forgatása két egymás utáni RLF utasítással elvégezhető. Az első utasítás hatására a REG regiszter 7. bitje a STATUS regiszter C túlcsordulás jelzőbitjébe, az eltolt érték pedig W-be kerül, így a REG értéke tulajdonképpen nem változik. A második utasítás hatására a 7. bit balra kilép, de egyúttal a C-ből jobbról be is lép, így megtörténik a helyben forgatás. Azt, hogy a forgatás eredménye a W-be, vagy a REG regiszterbe kerül-e, a második utasításban elhelyezett célkijelölő bit határozza meg.

      A műveletet bemutató programrészlet:

... ...    
  rlf REG,0 ;W = a REG regiszter C-n keresztül balra forgatva
  rlf REG,1 ;REG = a REG regiszter C-n keresztül balra forgatva
  ...    

Vissza a lap tetejére


      Bájt forgatás jobbra:

      Egy adatregiszter tartalmának jobbra forgatása a következőt jelenti:

Forgatás jobbra

11.4.8-4. Ábra

      Tetszőleges adatregiszter tartalmának jobbra forgatása két egymás utáni RRF utasítással elvégezhető. Az első utasítás hatására a REG regiszter 0. bitje a STATUS regiszter C túlcsordulás jelzőbitjébe, az eltolt érték pedig W-be kerül, így a REG értéke tulajdonképpen nem változik. A második utasítás hatására a 0. bit jobbra kilép, de egyúttal a C-ből balról be is lép, így megtörténik a helyben forgatás. Azt, hogy a forgatás eredménye a W-be, vagy a REG regiszterbe kerül-e, a második utasításban elhelyezett célkijelölő bit határozza meg.

      A műveletet bemutató programrészlet:

... ...    
  rrf REG,0 ;W = a REG regiszter C-n keresztül jobbra forgatva
  rrf REG,1 ;REG = a REG regiszter C-n keresztül jobbra forgatva
  ...    

Vissza a lap tetejére


      Alsó és felső félbájt cseréje:

      Egy adatregiszter alsó és felső félbájt cseréje a következőt jelenti:

Alsó és felső félbájt cseréje

11.4.8-5. Ábra

      Tetszőleges adatregiszter alsó és felső félbájt cseréje egyetlen SWAPF utasítással elvégezhető. A művelet a STATUS regiszter jelzőbitjeire nincs hatással.

      A műveletet bemutató programrészlet:

... ...    
  swapf REG,0 ;W = REG felcserélt alsó és felső félbájttal
  ...    

      Ez a művelet valójában négy egymás után végrehajtott forgatással egyenértékű, a forgatás irányától függetlenül.

Vissza a lap tetejére


      Eltolás balra:

      Egy adatregiszter tartalmának balra tolása a következőt jelenti:

Eltolás balra

11.4.8-6. Ábra

      Egy adatregiszter balra tolása során a legmagasabb helyiértékű bit a STATUS regiszter C jelzőbitjébe kerül. A művelet a C jelzőbit nullázása után egy RLF utasítással elvégezhető. A legalacsonyabb helyiértékű helyre jobbról, az utasításnak megfelelően, az előzőleg nullázott C értéke lép be. A művelet a STATUS regiszter egyéb jelzőbitjeire nincs hatással. Azt, hogy a művelet eredménye a W-be, vagy az adatregiszterbe kerül-e, a második utasításban elhelyezett célkijelölő bit határozza meg.

      A műveletet bemutató programrészlet:

... ...    
  bcf STATUS,0 ;a C jelzőbit nullázása
  rlf REG,1 ;REG = REG eggyel balra tolva
  ...    

      Egy adatregiszter tartalmának balra tolása valójában egy 2-vel való szorzást jelent.

      Kihasználva azt, hogy a balra tolt érték legmagasabb helyiértékű bitje a C jelzőbitbe kerül, többször nyolc bites számadatok eltolása is elvégezhető:

24 bites adat eltolása balra

11.4.8-7. Ábra

      A műveletet bemutató programrészlet:

... ...    
  bcf STATUS,0 ;a C jelzőbit nullázása
  rlf ADAT1,1 ;ADAT1 = ADAT1 eggyel balra tolva
  rlf ADAT2,1 ;ADAT2 = ADAT2 eggyel balra tolva
  rlf ADAT3,1 ;ADAT3 = ADAT3 eggyel balra tolva
  ...    

Vissza a lap tetejére


      Eltolás jobbra:

      Egy adatregiszter tartalmának jobbra tolása a következőt jelenti:

Eltolás jobbra

11.4.8-8. Ábra

      Egy adatregiszter jobbra tolása során a legalacsonyabb helyiértékű bit a STATUS regiszter C jelzőbitjébe kerül. A művelet a C jelzőbit nullázása után egy RRF utasítással elvégezhető. A legmagasabb helyiértékű helyre balról, az utasításnak megfelelően, az előzőleg nullázott C értéke lép be. A művelet a STATUS regiszter egyéb jelzőbitjeire nincs hatással. Azt, hogy a művelet eredménye a W-be, vagy az adatregiszterbe kerül-e, a második utasításban elhelyezett célkijelölő bit határozza meg.

      A műveletet bemutató programrészlet:

... ...    
  bcf STATUS,0 ;a C jelzőbit nullázása
  rrf REG,1 ;REG = REG eggyel jobbra tolva
  ...    

      Egy adatregiszter tartalmának jobbra tolása valójában egy 2-vel való osztást jelent.

      Kihasználva azt, hogy a balra tolt érték legalacsonyabb helyiértékű bitje a C jelzőbitbe kerül, többször nyolc bites számadatok eltolása is elvégezhető:

24 bites adat eltolása jobbra

11.4.8-9. Ábra

      A műveletet bemutató programrészlet:

... ...    
  bcf STATUS,0 ;a C jelzőbit nullázása
  rrf ADAT3,1 ;ADAT3 = ADAT3 eggyel jobbra tolva
  rrf ADAT2,1 ;ADAT2 = ADAT2 eggyel jobbra tolva
  rrf ADAT1,1 ;ADAT1 = ADAT1 eggyel jobbra tolva
  ...    

Vissza a lap tetejére


      Bájt bitsorrend felcserélése:

      Egy adatregiszteren belüli bitsorrend felcserélése a következőt jelenti:

Bitsorrend csere

11.4.8-10. Ábra

      A műveletet megvalósító programrészlet (Dr. Kónya László: PIC mikrovezérlők alkalmazástechnikája) az ADAT regiszter felcserélt bitsorrendű megfelelőjét a W munkaregiszterbe hozza létre, miközben az ADAT regiszterben levő kiinduló érték nem változik:

... ...    
  clrw   ;W = 0
  btfsc ADAT,7 ;a 7. bit vizsgálata
  iorlw B'0000 0001' ;ha ADAT,7 = "1", akkor W,0 = "1"
  btfsc ADAT,6 ;a 6. bit vizsgálata
  iorlw B'0000 0010' ;ha ADAT,6 = "1", akkor W,1 = "1"
  btfsc ADAT,5 ;az 5. bit vizsgálata
  iorlw B'0000 0100' ;ha ADAT,5 = "1", akkor W,2 = "1"
  btfsc ADAT,4 ;a 4. bit vizsgálata
  iorlw B'0000 1000' ;ha ADAT,4 = "1", akkor W,3 = "1"
  btfsc ADAT,3 ;a 3. bit vizsgálata
  iorlw B'0001 0000' ;ha ADAT,3 = "1", akkor W,4 = "1"
  btfsc ADAT,2 ;a 2. bit vizsgálata
  iorlw B'0010 0000' ;ha ADAT,2 = "1", akkor W,5 = "1"
  btfsc ADAT,1 ;az 1. bit vizsgálata
  iorlw B'0100 0000' ;ha ADAT,1 = "1", akkor W,6 = "1"
  btfsc ADAT,0 ;a 0. bit vizsgálata
  iorlw B'1000 0000' ;ha ADAT,0 = "1", akkor W,7 = "1"
  ...    

Vissza a lap tetejére


      Bitpárok felcserélése:

      Egy adatregiszteren belüli bitpárok felcserélése a következőt jelenti:

Bitpárok cseréje

11.4.8-11. Ábra

      A műveletet megvalósító programrészlet (Dmitry Kirashov) az ADAT regiszter felcserélt bitpárú megfelelőjét a W munkaregiszterbe hozza létre, miközben az ADAT regiszterben levő kiinduló érték elveszik:

... ...    
  movf ADAT,0 ;W = ADAT
  andlw 0x55 ;W = W "és" B'01010101': a páratlan bitek törlése
  addwf ADAT,1 ;ADAT = ADAT + W
  rrf ADAT,1 ;az ADAT jobbra tolása
  addwf ADAT,0 ;W = ADAT felcserélt bitpárokkal
  ...    

  Tudomány és Technika (test@t-es-t.hu)


 

<< Előző oldal   Vissza a tartalomjegyzékhez   Vissza a lap tetejére   Következő oldal >>

Vissza a főoldalra    Vissza a PIC főoldalra