Skip navigation

Aritmetikai utasítások

Keret a gyakorláshoz

A parancsok kipróbálásához használható keret elérhető az alábbi linken:

gy_aritm.asm

Áttekintés

Az x86 processzor aritmetikai utasításai szoros kapcsolatban állnak az adatmozgató utasításokkal.

  • A műveletek általában megadott méretű adatok között értelmezettek, és ügyelni kell az operandusok méreteire.
  • A többoperandusú műveleteknél a művelet eredménye általában az első regiszterben keletkezik.
  • A szorzás és osztás esetében EAX, és EDX regisztereknek speciális szerepe van.

Fontos továbbá tudni, hogy:

  • Az x86-os processzor memóriája és regiszterei a little endian tárolást követik, vagyis az alacsonyabb címen az alacsonyabb helyiértékű bájt helyezkedik el.
  • Az assembly nyelvben a negatív számok ábrázolására a kettes komplemens számábrázolást használják.
  • Az adatmozgató és aritmetikai utasítások változtathatják a FLAGS regiszter egyes bitjeit is.

Műveletek hatása a FLAGS regisztererre

A FLAGS regiszter bitjeinek speciális célja van. Egyes bitek a processzor viselkedését befolyásolják, míg másik bitek az előző műveletekről tárolnak információt.

 

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
| | | | | | | | | | | | | | | |
- - - - O D I T S Z - A - P - C

 

Az STATUS regiszter alábbi bitjei nem változnak az aritmetikai utasítások végrehajtása során:

  • Direction: A sztring műveletek iránya, 0: növekvő, 1: csökkenő.
  • Interrupt: 1: megszakítás engedélyezése, 0: tiltása.
  • Trap: 1: "single step", azaz lépésenkénti végrehajtás engedélyezve van.

Az alábbi bitek változhatnak:

  • Overflow: Előjeles túrcsordulás: 1, ha az eredmény nem fért el az adott típus értéktartományán, 0 különben.
  • Sign: Előjel, az eredmény legmagasabb helyiértékű bitje.
  • Zero: Jelzi, hogy nulla-e az eredmény (1 - igen, 0 - nem).
  • Auxiliary Carry: Másodlagos átvitel, jelzi ha volt átvitel az eredmény 3. és 4. bitje között.
  • Parity: Az eredmény alsó 8 bitjének paritása (a paritás akkor 1, ha az alsó 8 biten az 1-esek száma páros, különben a paritás 0.
    Pl. 01011101 esetén a parity értéke 0, 01011001 esetén a parity értéke 1).
  • Carry: Átvitel előjel nélküli műveletekhez. Akkor 1, ha volt aritmetikai átvitel az eredmény legfelső bitjénél (előjeltelen aritmetikai túlcsordulás), 0, ha nem.