INC
Az INC (INCrement) utasításnak egy operandusa van. Az operandusában megadott értéket 1-gyel növeli. Nincs hatással az átvitelre.
Példa:
MOV AX, 5h ; AX = 5h
INC AX ; AX = 6h
Az INC (INCrement) utasításnak egy operandusa van. Az operandusában megadott értéket 1-gyel növeli. Nincs hatással az átvitelre.
Példa:
MOV AX, 5h ; AX = 5h
INC AX ; AX = 6h
A DEC (DECrement) utasításnak egy operandusa van. Az operandusában megadott értéket 1-gyel csökkenti. Nincs hatással az átvitelre.
Példa:
MOV AX, 5h ; AX = 5h
DEC AX ; AX = 4h
A NEG (NEGate) utasításnak egy operandusa van. Az operandusában megadott érték előjelét megfordítja, azzal, hogy az adott számot átkonvertálja a kettes komplemensére.
Példa:
MOV AX, 5h ; AX = 5h
NEG AX ; AX = FFFFFFFBh
Az ADC (ADd with Carry) utasítás hozzáadja a forrás operandust és a Carry flag tartalmát is a cél operandushoz. Az utasítás formátuma megegyezik az ADD utasításéval és mind két operandus méretének meg kell egyeznie. 64 bites összeadás esetén a következő módon használható fel az ADC parancs.
Példa:
MOV EAX, 0FFFFFFFFh ; EAX = 0FFFFFFFFh
MOV EBX, 0FFFFFFFFh ; EBX = 0FFFFFFFFh
MOV ECX, 11h ; ECX = 11h
MOV EDX, 11h ; EDX = 11h
ADD EAX, EBX ; EAX = EAX + EBX = FFFFFFFEh, C = 1
ADC ECX, EDX ; ECX = ECX + EDX + C = 23h
Az SBB (SuBtract with Borrow) utasítás kivonja a cél operandusból a forrás operandust és a Carry flag tartalmát is. A lehetséges operandusok listája megegyezik az ADC utasításéval. A következő példa 64 bites kivonás használatának lehetőségét mutatja be 32 bites regiszterek segítségével. Először beállítjuk az EDX:EAX regiszter tartalmát a 0000000700000001h értékre, majd kivonunk belőle 5-öt. Az alsó 32 bitek kerülnek kivonásra először, beállítódik a Carry flag értéke 1-re, majd a felső 32 bitből kivonódik a Carry flag értéke (és az SBB második operandusának tartalma):
Példa:
MOV EDX, 7 ; EDX = 00000007h
MOV EAX, 1 ; EAX = 00000001h
SUB EAX, 5 ; EAX = EAX - 5 = FFFFFFFCh, C = 1
SBB EDX, 0 ; EDX = EDX - C = 00000006h
A CMP (CoMPare) utasítás két operandusú művelet. Szintaxisa:
CMP op1, op2
A megadott két operandus értékét hasonlítja össze oly módon, hogy veszi az op1-op2 művelet eredményét, és az eredménynek megfelelően állítja be a flag-eket. A későbbiekben feltételes vezérlésátadáshoz nagyon jó felhasználható lesz.
Az SHL (SHift Left) utasítás logikai léptetést végez balra a cél operanduson belül, az alsó biteket feltöltve nullával. A legmagasabb helyiértéken lévő bit bekerül a Carry flag-be, és ami addig a Carry flag-ben volt eldobódik. A forrás operandusban adhatjuk meg, hogy hány bittel szeretnénk arrább léptetni.
Példa:
MOV AL, 8Fh ; AL = 10001111b
SHL AL, 1 ; AL = 00011110b mivel 1 bittel balra tolódott
; C = 1
Az SHR (SHift Right) utasítás logikai léptetést végez jobbra a cél operanduson belül, a felső biteket feltöltve nullával. A legalacsonyabb helyiértéken lévő bit bekerül a Carry flag-be, és ami addig a Carry flag-ben volt eldobódik. A forrás operandusban adhatjuk meg, hogy hány bittel szeretnénk arrább léptetni.
Példa:
MOV AL, 0D0h ; AL = 11010000b
SHR AL, 1 ; AL = 01101000b mivel 1 bittel jobbra tolódott
; C = 0
A ROL utasítás hasonlít az SHL utasításhoz, azzal a különbséggel, hogy itt körkörösen mozognak a bitek balra. A legmagasabb helyiértéken lévő bit beleíródik a Carry flag-be is és a legalacsonyabb helyiértékű bit helyére is.
Példa:
MOV AL, 8Fh ; AL = 10001111b
ROL AL, 1 ; AL = 00011111b mivel 1 bittel balra tolódott
; körbe. C = 1
A ROR utasítás hasonlít az SHR utasításhoz, azzal a különbséggel, hogy itt körkörösen mozognak a bitek jobbra. A legalacsonyabb helyiértéken lévő bit beleíródik a Carry flag-be is és a legmagasabb helyiértékű bit helyére is.
Példa:
MOV AL, 0D1h ; AL = 11010001b
ROR AL, 1 ; AL = 11101000b mivel 1 bittel jobbra tolódott
; körbe. C = 1
Egy gyakorlatiasabb példa az SHL és a ROL utasítás használatára:
MOV AL, -80h ; AL = 80h
CBW ; AX = FF80h
MOV BX, 1234h ; BX = 1234h
IMUL BX ; DX:AX = FFF6 E600h
A szorzás elvégzése után a szorzat a DX:AX regiszterpárosba kerül. Ha kiszeretnénk íratni a szorzatot, akkor mindenképp jó lenne elhelyezni előbb az EAX regiszterben. Erre több lehetőség is van. A következő példa az SHL utasítás használatát mutatja be erre a célra:
PUSH AX ; AX tartalma a verembe
MOV AX, DX ; AX = FFF6h
SHL EAX, 16 ; EAX = FFF6 0000h
POP AX ; EAX = FFF6 E600h
Majd ugyancsak a DX:AX tartalmának EAX-be való áthelyezése a ROL utasítás segítségével:
ROL EAX, 16 ; EAX = E600 0000h
MOV AX, DX ; EAX = E600 FFF6h
ROL EAX, 16 ; EAX = FFF6 E600h