<< Előző oldal Vissza a tartalomjegyzékhez Következő oldal >>
11.4.4. Számtani műveletek
Assembly programozás tartalomjegyzék
8 bites összeadás
8 bites kivonás
Adatregiszter értékének növelése 1-gyel
Adatregiszter értékének csökkentése 1-gyel
W értékének növelése 1-gyel
W értékének csökkentése 1-gyel
8 bites összeadás:
ˇ Egy 8 bites konstans és W értékének összeadása egyetlen ADDLW utasítással elvégezhető. A STATUS regiszter C átvitel, DC 4 bites átvitel és Z zérusjelző bitje az eredménynek megfelelő értékre áll be.
... ... addlw 0x01 ;W = W + 1 ...
Néhány példa:
W | konstans | W = W + konstans | C | DC | Z | |||
---|---|---|---|---|---|---|---|---|
B'0000 0000' | 0x00 | B'0000 0000' | + 0x00 | B'0000 0000' | = 0x00 | 0 | 0 | 1 |
B'0000 0001' | 0x01 | B'0000 0001' | + 0x01 | B'0000 0010' | = 0x02 | 0 | 0 | 0 |
B'0000 0001' | 0x01 | B'0000 0100' | + 0x04 | B'0000 0101' | = 0x05 | 0 | 0 | 0 |
B'0000 0001' | 0x01 | B'0000 1111' | + 0x0F | B'0001 0000' | = 0x10 | 0 | 1 | 0 |
B'0001 0001' | 0x11 | B'0011 0010' | + 0x32 | B'0100 0011' | = 0x43 | 0 | 0 | 0 |
B'1111 1111' | 0xFF | B'0000 0001' | + 0x01 | B'0000 0000' | = 0x00 | 1 | 1 | 1 |
B'1111 1111' | 0xFF | B'0000 0010' | + 0x02 | B'0000 0001' | = 0x01 | 1 | 1 | 0 |
B'1111 0000' | 0xF0 | B'0001 0000' | + 0x10 | B'0000 0000' | = 0x00 | 1 | 0 | 1 |
B'1111 0000' | 0xF0 | B'0010 0000' | + 0x20 | B'0001 0000' | = 0x10 | 1 | 0 | 0 |
ˇ Egy tetszőleges adatmemória-regiszter és W értékének összeadása egyetlen ADDWF utasítással elvégezhető. Azt, hogy az összeadás eredménye a W-be, vagy az ADAT azonosítójú regiszterbe kerül-e, az utasításban elhelyezett célkijelölő bit határozza meg. A STATUS regiszter C átvitel, DC 4 bites átvitel és Z zérusjelző bitje az eredménynek megfelelő értékre áll be.
... ... addwf ADAT,0 ;W = ADAT + W ...
ˇ Két tetszőleges adatmemória-regiszter értékének összeadásához az egyik regiszter tartalmát W-be kell másolni és így elvégezhető az előző példa szerinti összeadás. A STATUS regiszter C átvitel, DC 4 bites átvitel és Z zérusjelző bitje az eredménynek megfelelő értékre áll be.
... ... movf ADAT1,0 ;W = ADAT1 addwf ADAT2,0 ;W = ADAT2 + W(ADAT1) ...
Azt, hogy az összeadás eredménye a W-be, vagy az ADAT2 azonosítójú regiszterbe kerül-e, az utasításban elhelyezett célkijelölő bit határozza meg.
8 bites kivonás:
ˇ W értékének kivonása egy 8 bites konstansból a SUBLW utasítással végezhető el. A negatív eredmények kettes komplemens alakban jönnek létre. (Az eredmény negatív előjele egyel való csökkentéssel és negációval eltüntethető.)
... ... sublw 0x01 ;W = 1 - W ...
Néhány példa:
konstans | W | W = konstans - W | C | DC | Z | |||
---|---|---|---|---|---|---|---|---|
B'0000 0001' | 0x01 | B'0000 0001' | - 0x01 | B'0000 0000' | = 0x00 | 1 | 1 | 1 |
B'0000 0011' | 0x03 | B'0000 0001' | - 0x01 | B'0000 0010' | = 0x02 | 1 | 1 | 0 |
B'0001 0000' | 0x10 | B'0000 0001' | - 0x01 | B'0000 1111' | = 0x0F | 1 | 0 | 0 |
B'0000 0000' | 0x00 | B'0000 0001' | - 0x01 | B'1111 1111' | = 0xFF | 0 | 0 | 0 |
B'0000 0101' | 0x05 | B'0000 1010' | - 0x0A | B'1111 1011' | = 0xFB | 0 | 0 | 0 |
B'0001 0000' | 0x10 | B'0010 0000' | - 0x20 | B'1111 0000' | = 0xF0 | 0 | 1 | 0 |
ˇ Egy 8 bites konstans kivonása W értékéből az ADDLW utasítással végezhető el. Az utasításban szereplő konstans = 256 - kivonandó konstans.
... ... ; addlw 0xFE ;W = W + 254 = W - 2 ...
Néhány példa:
W | konstans | W = W + (256 - konstans) | C | DC | Z | |||
---|---|---|---|---|---|---|---|---|
B'0000 0001' | 0x01 | B'0000 0001' | - 0x01 | B'0000 0000' | = 0x00 | 1 | 1 | 1 |
B'0000 0011' | 0x03 | B'0000 0001' | - 0x01 | B'0000 0010' | = 0x02 | 1 | 1 | 0 |
B'0001 0000' | 0x10 | B'0000 0001' | - 0x01 | B'0000 1111' | = 0x0F | 1 | 0 | 0 |
B'0000 0000' | 0x00 | B'0000 0001' | - 0x01 | B'1111 1111' | = 0xFF | 0 | 0 | 0 |
B'0000 0101' | 0x05 | B'0000 1010' | - 0x0A | B'1111 1011' | = 0xFB | 0 | 0 | 0 |
B'0001 0000' | 0x10 | B'0010 0000' | - 0x20 | B'1111 0000' | = 0xF0 | 0 | 0 | 0 |
ˇ W értékének kivonása egy tetszőleges adatmemória-regiszter értékéből egyetlen SUBWF utasítással elvégezhető. Azt, hogy a kivonás eredménye a W-be, vagy az ADAT azonosítójú regiszterbe kerül-e, az utasításban elhelyezett célkijelölő bit határozza meg. A STATUS regiszter C átvitel, DC 4 bites átvitel és Z zérusjelző bitje az eredménynek megfelelő értékre áll be.
... ... subwf ADAT,0 ;W = ADAT - W ...
ˇ Egy tetszőleges adatmemória-regiszter értékének kivonása W értékéből az ADDWF (összeadó) utasítással végezhető el, a következő összefüggés szerint: W - ADAT = -(-W + ADAT). W értékének kettes komplemense a SUBLW 0 utasítással képezhető. A művelet eredménye a W-be kerül. A STATUS regiszter C átvitel, DC 4 bites átvitel és Z zérusjelző bitje az eredménynek megfelelő értékre áll be.
... ... sublw 0x00 ;W = -W addwf ADAT,0 ;W = -W + ADAT sublw 0x00 ;W = -(-W + ADAT) = W - ADAT ...
A program működését szemléltetik a következő táblázatok:
W | ADAT |
---|---|
0x04 B'0000 0100' |
- 0x01 B'0000 0001' |
sublw 0x00 | |
0xFC B'1111 1100' |
0x01 B'0000 0001' |
addwf ADAT,0 | |
0xFD B'1111 1101' |
0x01 B'0000 0001' |
sublw 0x00 | |
= 0x03 B'0000 0011' |
0x01 B'0000 0001' |
W | ADAT |
---|---|
0x04 B'0000 0100' |
- 0x06 B'0000 0110' |
sublw 0x00 | |
0xFC B'1111 1100' |
0x06 B'0000 0110' |
addwf ADAT,0 | |
0x02 B'0000 0010' |
0x06 B'0000 0110' |
sublw 0x00 | |
= 0xFE B'1111 1110' |
0x06 B'0000 0110' |
W | ADAT | W = W - ADAT | C | DC | Z | |||
---|---|---|---|---|---|---|---|---|
B'0000 0001' | 0x01 | B'0000 0001' | - 0x01 | B'0000 0000' | = 0x00 | 0 | 0 | 1 |
B'0000 0011' | 0x03 | B'0000 0001' | - 0x01 | B'0000 0010' | = 0x02 | 0 | 0 | 0 |
B'0001 0000' | 0x10 | B'0000 0001' | - 0x01 | B'0000 1111' | = 0x0F | 0 | 0 | 0 |
B'0000 0000' | 0x00 | B'0000 0001' | - 0x01 | B'1111 1111' | = 0xFF | 0 | 0 | 0 |
B'0000 0101' | 0x05 | B'0000 1010' | - 0x0A | B'1111 1011' | = 0xFB | 0 | 0 | 0 |
B'0001 0000' | 0x10 | B'0010 0000' | - 0x20 | B'1111 0000' | = 0xF0 | 0 | 0 | 0 |
ˇ Két tetszőleges adatmemória-regiszter értékének kivonásához a kivonandó regiszter tartalmát W-be kell másolni és így elvégezhető a már bemutatott példa szerinti kivonás. Azt, hogy a kivonás eredménye a W-be, vagy az ADAT2 azonosítójú regiszterbe kerül-e, az utasításban elhelyezett célkijelölő bit határozza meg. A STATUS regiszter C átvitel, DC 4 bites átvitel és Z zérusjelző bitje az eredménynek megfelelő értékre áll be.
... ... movf ADAT1,0 ;W = ADAT1 subwf ADAT2,0 ;W = ADAT2 - W = ADAT2 - ADAT1 ...
Adatregiszter értékének növelése 1-gyel:
Egy tetszőleges adatmemória-regiszter értékének egyel való növelése egyetlen INCF utasítással elvégezhető. Azt, hogy a művelet eredménye a W-be, vagy az ADAT azonosítójú regiszterbe kerül-e, az utasításban elhelyezett célkijelölő bit határozza meg. A STATUS regiszter Z zérusjelző bitje az eredménynek megfelelő értékre áll be.
... ... incf ADAT,1 ;ADAT = ADAT + 1 ...
Adatregiszter értékének csökkentése 1-gyel:
Egy tetszőleges adatmemória-regiszter értékének egyel való csökkentése egyetlen DECF utasítással elvégezhető. Azt, hogy a művelet eredménye a W-be, vagy az ADAT azonosítójú regiszterbe kerül-e, az utasításban elhelyezett célkijelölő bit határozza meg. A STATUS regiszter Z zérusjelző bitje az eredménynek megfelelő értékre áll be.
... ... decf ADAT,1 ;ADAT = ADAT - 1 ...
W értékének növelése 1-gyel:
A W munkaregiszter értékének egyel való növelése egyetlen ADDLW 1 utasítással elvégezhető. A STATUS regiszter C átvitel, DC 4 bites átvitel és Z zérusjelző bitje az eredménynek megfelelő értékre áll be.
... ... addlw 0x01 ;W = W + 1 ...
W értékének csökkentése 1-gyel:
A W munkaregiszter értékének egyel való csökkentése egyetlen ADDLW FF utasítással elvégezhető. A STATUS regiszter C átvitel, DC 4 bites átvitel és Z zérusjelző bitje az ADDLW utasítás működésének megfelelő értékre áll be.
... ... addlw 0xFF ;W = W + 255 = W - 1 ...
Tudomány és Technika (test@t-es-t.hu)
<< Előző oldal Vissza a tartalomjegyzékhez Vissza a lap tetejére Következő oldal >>