Skip navigation

Adatok kiterjesztése

Áttekintés

Az aritmetikai műveleteknél sokszor szükség van az adatok kiterjesztésére. Ezekre több lehetőségünk is van.

  • Előjel nélküli adatoknál a felső bitek kinullázása is célravezető lehet,
  • Előjeles számoknál használhatjuk az adat konvertáló utasításokat,
  • vagy használhatjuk a mov utasítás kiterjesztéssel egybekötött változatait.

Ügyelnünk kell viszont a kiterjesztésnél, hogy az előjeles, és előjel nélküli számok kiterjesztése különbözik!!! A nem megfelelően választott módszer használata az értéket megváltoztathatja.

CBW

A CBW (Convert Byte to Word) utasítás az AL 8 bites regiszterben tárolt értéket 16 bitesre konvertálja (előjelhelyesen). Azaz kiterjeszti az AL regiszter előjel bitjét az AH regiszterbe, megőrizve az előjel értékét.

Példa:

    MOV AL, -10d   ;    AL = 0F6h
    MOV BX, 2525d  ;    BX = 09DDh
    CBW            ;    AX = FFF6h
    ADD AX, BX     ;    AX = 09D3h

CWD

A CWD (Convert Word to Doubleword) utasítás az AX 16 bites regiszterben tárolt értéket 32 bitesre konvertálja (előjelhelyesen). Azaz kiterjeszti az AX regiszter előjel bitjét a DX regiszterbe.

Példa:

    MOV AX, -101d   ;    AX = FF9Bh
    CWD             ;    DX:AX = FFFFFF9Bh

     Tehát felhívnánk még egyszer a figyelmet, hogy, míg a CBW esetében az AL 8 bites regiszter 16 bitesre konvertálása után a 16 bites előjeles érték elérhetővé vált az AX regiszterben, a CWD esetében az AX 16 bites regiszter 32 bitesre konvertálása után a 32 bites előjeles érték nem az EAX regiszterben érhető el, hanem a DX:AX-ben.

CWDE

A CWDE (Convert Word to Extended Doubleword) utasítás is az AX 16 bites regiszterben tárol értéket konvertálja 32 bitesre, viszont a CWD utasítással ellentétben az EAX regiszterre egészíti ki előjelhelyesen, nem pedig a DX-re.

Példa:

     MOV AX, -101d   ;    AX = FF9Bh
     CWDE            ;    EAX = FFFFFF9Bh

CDQ

A CDQ (Convert Doubleword to Quadword) utasítás is az EAX 32 bites regiszterben tárol értéket konvertálja 64 bitesre az EDX:EAX regiszterpárba. Tehát az EAX regiszter felső bitjével lesz kitöltve az EDX regiszter.

Hasznos osztások előtt az EAX regiszter kiterjesztésére 32 bites osztásnál, mivel ekkor az osztandó az EDX:EAX regiszterpár.

Példa:

     MOV EAX, -123456789159   ;    EAX = -123456789159
     CDQ                      ;    EDX:EAX = -123456789159
     MOV EBX, 1000000         ;    EBX = 10000000
     IDIV EBX