<< 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.
A műveletet bemutató programrészlet:
... ... rlf REG,0 ;W = a REG regiszter C-n keresztül balra forgatva ...
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.
A műveletet bemutató programrészlet:
... ... rrf REG,0 ;W = a REG regiszter C-n keresztül jobbra forgatva ...
Bájt forgatás balra:
Egy adatregiszter tartalmának balra forgatása a következőt jelenti:
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 ...
Bájt forgatás jobbra:
Egy adatregiszter tartalmának jobbra forgatása a következőt jelenti:
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 ...
Alsó és felső félbájt cseréje:
Egy adatregiszter alsó és felső félbájt cseréje a következőt jelenti:
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.
Eltolás balra:
Egy adatregiszter tartalmának balra tolása a következőt jelenti:
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ő:
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 ...
Eltolás jobbra:
Egy adatregiszter tartalmának jobbra tolása a következőt jelenti:
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ő:
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 ...
Bájt bitsorrend felcserélése:
Egy adatregiszteren belüli bitsorrend felcserélése a következőt jelenti:
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" ...
Bitpárok felcserélése:
Egy adatregiszteren belüli bitpárok felcserélése a következőt jelenti:
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 >>