Most már eljutottatok arra a szintre, mikor már ki kellene használni a 386-os képességeit. Az az igazság, hogy a 386-os és a 486-os között nem sok különbség van utasítások szempontjából, azt hiszem csak kb. 3 plusz utasítás van, amit ki is tudsz használni.

A számítógépek piacán a váltást a 386-os okozta, melynek már 32bites regiszterei is vannak, valamint a védett mód is meg van rendesen csinálva, azaz egybe tudsz kezelni 4gigabyte memóriát. Azt hiszem, ennyi elég is lesz ... :)

Ebben a fejezetben NEM irok a védett módról, és a hozzá kapcsolódó megkötésekről, erről esetleg majd később.

Tehát 32bites regiszterei vannak. De hogy lehet őket kihasználni ?
Vegyük az AX példáját :

     EAX felső 16 bitje                 EAX alsó 16 bitje=AX [][][][][][][][][][][][][][][][]  [][][][][][][][][][][][][][][][]                                           AH               AL
Tehát az EAX alsó 16bitjét látjuk az AX regiszterben. De hogy tudjuk a felsőt látni ? A varázsszó : ROR esetleg ROL. Azaz : Rotate Left vagy Rotate Right. Ha meg akarjuk a felső részt cserélni, akkor :
  ROR EAX,16 vagy ROL EAX,16
Úgy gondolom, hogy egy kicsit jobban el kellene magyarázni a pozitív és a negatív számok tárolását és használatát. Az addig mindenkinek világos, hogy a legfelső bit tárolja az előjelet. Magas szintü nyelvek használata esetén nincs gond az előjel figyelésére, mert különböző típusú változók vannak (Pascal esetén word és integer), míg assembly esetén az előjeles és az előjel nélküli számot ugyanúgy definiáljuk (pl.word esetén dw)
Példa:
     xor           eax,eax      xor           ebx,ebx      mov           bx,-3      mov           ax,bx
Ekkor egyértelmű, hogy eax-ben nem -3 lesz, hanem 65536-3 = 65533 = 0FFFDhMi ilyenkor a teendő?Hát az előjelbitet is át kell bűvészkednünk.Itt jelenik meg a "movsx" utasítás:
     xor           ebx,ebx      mov           bx,-3      MOVSX         eax,bx
Osztásnál hasonló problémáink lehetnek, mivel itt sem tudja a processzor, hogy előjel nélküli vagy előjeles számot akarunk-e osztani...
     mov           bx,2      mov           ax,-6      cwd                                ; !!! Ez nagyon fontos      idiv          bx
ax-ben -2 lesz (65534) c?? használata:
      al        ->       cbw       ax        ->       cwd      eax        ->       cdq
De nincs rá szükség, ha volt előtte egy "imul":
     mov           ax,-2      mov           bx,3      imul          bx      mov           bx,6      idiv          bx
ax-ben -1 lesz (65535)

Természetesen az imul és az idiv között nem lehet olyan utasítás, ami elrontja a ah/dx/edx-et, lsd. "MŰVELETEK" fejezet.