Vissza a főoldalra    Vissza a PIC főoldalra

<< 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:

11.4.3-1. Táblázat
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.

Vissza a lap tetejére


      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:

11.4.3-2. Táblázat
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:

11.4.3-3. Táblázat
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
  ...    

Vissza a lap tetejére

     ˇ 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:

11.4.2-4. Táblázat
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'

11.4.2-5. Táblázat
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'

11.4.3-6. Táblázat
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
  ...    

Vissza a lap tetejére


      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
  ...    

Vissza a lap tetejére


      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
  ...    

Vissza a lap tetejére


      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
  ...    

Vissza a lap tetejére


      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 >>

Vissza a főoldalra    Vissza a PIC főoldalra