Skip navigation

Összeadás

Összeadás művelet

ADD: Az ADD utasítás hozzá adja a forrás operandus értékét a cél operandushoz. A két operandus mérete meg kell, hogy egyezzen. Az utasítás szintaxisa:

        ADD cél, forrás

A forrás tartalma változatlan marad, az cél operandus értéke pedig  maga az összeg lesz. A lehetséges operandusok halmaza megegyezik a MOV utasítás esetén tárgyaltakkal.

Példák:

     MOV EAX, 3h    ;    EAX = 3h

     ADD EAX, 5h    ;    EAX = EAX + 5h = 3h + 5h = 8h

     ADD EAX, EBX   ;    EAX = EAX + EBX

     ADD AX, BX     ;    AX = AX + BX

     ADD EAX, BX    ;    Helytelen! Méretbeli különbségek!


     ADAT1     DD   912, 920, 928, 936, 944 ; adatszegmens tartalma


     MOV ESI, offset ADAT1  ; ESI regisztert ráállítjuk az ADAT1-re

     MOV EAX, 5d            ; EAX = 5

     ADD EAX, [ESI]         ; EAX = EAX + [ESI] = 5 + 912 = 917


Ha egy 8 bites és egy 16 bites, vagy egy 16 bites és 32 bites számot szeretnénk összeadni előjelhelyesen, akkor assemblyben a 8 és 16 bites pár esetén a 8 bites operandust 16 bitesre, a 16 és 32 bites pár esetében pedig a 16 bites operandust 32 bitesre kell konvertálnunk.

Az ADD utasítás módosítja a Z, C, A, S, P és O flag értékét a STATUS regiszterben, viszont mi csak a C, az O és az S flag értékeivel foglalkozunk. Az összeadás során ügyelni kell a túlcsordulásokra. 8, 16 és 32 biten is különböző intervallumban tudunk tárolni előjeles számokat. Az egyszerűség kedvéért most figyeljük csak 8 biten a flag-ek viselkedését.

Ahhoz, hogy Visual Studio-ban előhozzuk a flag értékeket, Debug módban nyissuk meg a Regisztereket megjelenítő ablakot, majd az ablakon belül jobb egérgombbal kattintva, az előugró menüsorból válasszuk ki a Flags menüpontot.

Összeadás példák

  1. Példa:

53 + 18 = 71

       00110101

     + 00010010

   0 0 01000111     Rendben. Előjelhelyes és nincs se átvitel, se túlcsordulás.

Túlcsordulás(O), Átvitel(C), Előjel(S)

 

  1. Példa:

53 + 83 = 136

       00110101

     + 01010011

   1 0 10001000     Ez -120! Előjel rossz és túlcsordulás is van!

            A fenti példában az előjeles számábrázolás miatt nem a valódi értéket kapjuk vissza 8 biten. A 2-es komplemenses számábrázolásban az első bit az előjel bit, amely ha 1, akkor negatív számról van szó.

  1. Példa:

-53 + (-83) = -136

       11001011

     + 10101101

   1 1 01111000     Ez +120! Előjel is rossz, túlcsordulás és átvitel is van!