<< Előző oldal Vissza a tartalomjegyzékhez Következő oldal >>
11.4.2. Adatmozgatás
Assembly programozás tartalomjegyzék
A W értékének átírása egy adatregiszterbe
Adatregiszter értékének átírása W-be
Adatregiszter értékének átírása egy másik adatregiszterbe
Adatregiszter és W értékének cseréje
Két adatregiszter értékének cseréje
Adatregiszter alsó és felső 4 bitjének cseréje
A W értékének átírása egy adatregiszterbe:
A 8 bites W munkaregiszter értéke egyetlen, erre a célra hivatott, MOVWF utasítással tetszőleges fájlregiszterbe másolható. A W értéke és a STATUS regiszter Z zérusjelző bitje változatlan marad.
... ... movwf ADAT ;a W regiszter értékének átvitele az ADAT azonosítójú regiszterbe ...
Adatregiszter értékének átírása W-be:
Bármely 8 bites adatregiszter értéke egyetlen, erre a célra hivatott, MOVF utasítással a W munkaregiszterbe másolható. Az adatregiszter értéke változatlan marad, a STATUS regiszter Z zérusjelző bitje az átvitt adatnak megfelelő értékre áll be.
... ... movf ADAT,0 ;az ADAT regiszter értékének átvitele a W munkaregiszterbe ...
A MOVF utasításban szereplő célkijelölő bit "0" értéke esetén az ADAT regiszter értéke a W munkaregiszterbe kerül. Az "1" érték esetén viszont az ADAT regiszter értéke magába íródik vissza, vagyis csak tesztelés céljából olvasódik ki, aminek hatására a STATUS regiszter Z zérusjelző bitje a megfelelő értékre áll be.
Adatregiszter értékének átírása egy másik adatregiszterbe:
Egy tetszőleges adatmemória-regiszter értéke két utasítással átmásolható bármelyik másik adatregiszterbe a fent bemutatott alapeljárások segítségével.
... ... movf ADAT1,0 ;az ADAT1 azonosítójú regiszter értékének átvitele a W munkaregiszterbe movwf ADAT2 ;a W regiszter értékének átvitele az ADAT2 azonosítójú regiszterbe ...
Adatregiszter és W értékének cseréje:
Egy tetszőleges adatmemória-regiszter és a W munkaregiszter értékének cseréje megoldható két segédregiszterrel (REKESZ1, REKESZ2), amelyekben az áthelyezendő adatok ideiglenesen tárolhatók.
... ... movwf REKESZ1 ;a W munkaregiszter másolása a REKESZ1 regiszterbe movf ADAT,0 ;az ADAT regiszter másolása a W-be movwf REKESZ2 ;a W másolása a REKESZ2-be movf REKESZ1,0 ;a REKESZ1 másolása a W-be movwf ADAT ;a W másolása az ADAT regiszterbe movf REKESZ2,0 ;a REKESZ2 másolása a W-be ...
A program működését szemlélteti a következő táblázat:
W | ADAT | REKESZ1 | REKESZ2 |
---|---|---|---|
1111 0000 | 1000 0001 | xxxx xxxx | xxxx xxxx |
movwf REKESZ1 | |||
1111 0000 | 1000 0001 | 1111 0000 | xxxx xxxx |
movf ADAT,0 | |||
1000 0001 | 1000 0001 | 1111 0000 | xxxx xxxx |
movwf REKESZ2 | |||
1000 0001 | 1000 0001 | 1111 0000 | 1000 0001 |
movf REKESZ1,0 | |||
1111 0000 | 1000 0001 | 1111 0000 | 1000 0001 |
movwf ADAT | |||
1111 0000 | 1111 0000 | 1111 0000 | 1000 0001 |
movf REKESZ2,0 | |||
1000 0001 | 1111 0000 | 1111 0000 | 1000 0001 |
Ugyanez a feladat sokkal egyszerűbben, segédregiszter nélkül, megoldható a következő, XORWF utasításon alapuló, három soros programrészlettel is (Dr. Kónya László: PIC mikrovezérlők alkalmazástechnikája).
... ... xorwf ADAT,1 ;W = W, ADAT = (W xor ADAT) xorwf ADAT,0 ;W = W xor (W xor ADAT) = ADAT xorwf ADAT,1 ;ADAT = ADAT xor (W xor ADAT) = W ...
A program működését szemlélteti a következő táblázat:
W | ADAT |
---|---|
1111 0000 | 1000 0001 |
xorwf ADAT,1 | |
1111 0000 | 0111 0001 |
xorwf ADAT,0 | |
1000 0001 | 0111 0001 |
xorwf ADAT,1 | |
1000 0001 | 1111 0000 |
Két adatregiszter értékének cseréje:
Két tetszőleges adatmemória-regiszter értékének cseréje egyszerűen megoldható egy segédregiszter (REKESZ) felhasználásával, amelyben az áthelyezendő adatok ideiglenesen tárolhatók.
... ... movf ADAT1,0 ;az ADAT1 regiszter másolása a W munkaregiszterbe movwf REKESZ ;a W másolása a REKESZ-be movf ADAT2,0 ;az ADAT2 másolása a W-be movwf ADAT1 ;a W másolása az ADAT1-be movf REKESZ,0 ;a REKESZ másolása a W-be movwf ADAT2 ;a W másolása az ADAT2-be ...
A csere megoldható a fentiekben bemutatott XORWF utasítás segítségével is.
... ... movf ADAT1,0 ;az ADAT1 regiszter másolása a W munkaregiszterbe xorwf ADAT2,1 ;W = W, ADAT2 = (W xor ADAT2) xorwf ADAT2,0 ;W = W xor (W xor ADAT2) = ADAT2 xorwf ADAT2,1 ;ADAT2 = ADAT2 xor (W xor ADAT2) = W movwf ADAT1 ;a W másolása az ADAT1-be ...
A csere legegyszerűbben a következő, négy soros programrészlettel oldható meg az ADDWF és SUBWF utasítások segítségével (Dr. Kónya László: PIC mikrovezérlők alkalmazástechnikája).
... ... movf ADAT1,0 ;az ADAT1 regiszter másolása a W munkaregiszterbe subwf ADAT2,0 ;W = (ADAT2 - ADAT1) addwf ADAT1,1 ;ADAT1 = ADAT1 + (ADAT2 - ADAT1) subwf ADAT2,1 ;ADAT2 = ADAT2 - (ADAT2 - ADAT1) ...
A program működését szemlélteti a következő táblázat:
ADAT1 | ADAT2 | W |
---|---|---|
1111 0000 | 1000 0001 | xxxx xxxx |
movf ADAT1,0 | ||
1111 0000 | 1000 0001 | 1111 0000 |
subwf ADAT2,0 | ||
1111 0000 | 1000 0001 | 1001 0001 |
addwf ADAT1,1 | ||
1000 0001 | 1000 0001 | 1001 0001 |
subwf ADAT2,1 | ||
1000 0001 | 1111 0000 | 1001 0001 |
Adatregiszter alsó és felső 4 bitjének cseréje:
Bármely 8 bites adatregiszter alsó és felső 4 bitje egyetlen, erre a célra hivatott, SWAPF utasítással felcserélhető. Az utasításban szereplő célkijelölő bit "0" értéke esetén az eredmény a W munkaregiszterbe kerül, "1" érték esetén viszont az adatregiszterbe íródik vissza. Az utasítás eredménye a STATUS regiszter jelzőbitjeire nincs hatással.
... ... swapf ADAT,0 ;ha ADAT = aaaabbbb, akkor W = bbbbaaaa/TD> ...
Tudomány és Technika (test@t-es-t.hu)
<< Előző oldal Vissza a tartalomjegyzékhez Vissza a lap tetejére Következő oldal >>