LOGICKE INSTRUKCIE

   Do tejto funkcnej skupiny zaradujeme dve podskupiny instrukcii:

   Podobne ako aritmeticke instrukcie, aj tu plati ze pri instrukciach, ktore maju dva operandy, zdrojovy aj cielovy operand musia mat rovnaku sirku v bitoch - mozu byt 8 alebo 16 bitove. Ako zdroj moze byt pouzity aj priamy operand. Ako operand 'src' moze byt pouzity aj priamy udaj. Ak ma instrukcia iba jeden operand, moze tu byt pouzity register alebo pamet (adresovana pomocou EA). Segmentove registre sa ako operandy nedaju pouzivat.

   Pri vsetkych logickych instrukciach okrem NOT sa priznaky SF, PF a ZF nastavuju podla vlastnosti vysledku operacie presne tak isto ako pri aritmetickych instrukciach.

INSTRUKCIE PRE LOGICKE OPERACIE

   Sem patria instrukcie, ktorych cielom je vykonavat zakladne operacie boolovej algebry (not,or,and,xor) nad jednotlivymi bitmi operandov. Kedze ale operandy su viacbitove, operacie boolovej algebry sa vykonavaju pre kazdy bit zvlast. To znamena, ze ak mame napr. instrukciu 'OR dest,src' tak sa vykona operacia OR na nultych bitoch operandov a zapise sa do nulteho bitu vysledku - a takto sa to nezavisle robi pre kazdy bit zvlast.

   Prehlad instrukcii pre logicke operacie je v nasledujucej tabulke:

Instrukciaoperaciapopis
NOT destdest = max - destjednotkovy komplement
XOR dest,srcdest = dest xor srcnonekvivalencia
OR dest,srcdest = dest or srclogicky sucet
AND dest,srcdest = dest and srclogicky sucin
TEST dest,srcdest and srclogicky sucin

   NOT je logicka negacia, to znamena, ze ak bol v operande nejaky bit nulovy, po operacii bude jednotkovy, a ak bol jednotkovy, bude nulovy. Vsimnime si ze instrukcia TEST nikam nezapisuje vysledok operacie a nastavuje iba priznaky, podobne ako CMP pri aritmetickych instrukciach. Je preto tak, lebo TEST sluzi na testovanie nulovosti niektorych bitov operandu 'dest'. Operand 'src' sluzi ako maska na maskovanie nezaujimavych bitov pomocou boolovskej operacie and. Kludne by sme na tento ucel mohli pouzit aj instrukciu AND, ale tato instrukcia nam meni obsah operandu 'dest' a preto je niekedy vyhodnejsie pouzit prave TEST.

   Priznaky CF a OF sa vykonanim instrukcii AND,XOR,OR,TEST vzdy nuluju. Operacia NOT ziadne priznaky nemeni.

BITOVE POSUVY A ROTACIE

   Predstavme si nejaky register (objekt) ako ramcek a hodnotu v nom napisanu v dvojkovej sustave, tak ako je to bezne - navyssi rad vlavo, najnizi vpravo. Teraz toto cislo vezmime a posunme o jeden bit dolava. Napriklad v registri AL majme cislo 86h:

Pred posuvom Po posuve
10000110
            1
0000110 

   Vlavo nam vypadol von jeden bit a vpravo sa nam zase uvolnilo jedno miesto. Mame viacero moznosti ako to riesit. instrukcie SAL a SHL to riesia tak, ze vypadnyty bit vlozia do priznaku CF a na prazdne miesto zapisu nulu. Naproti tomu zase take ROL na prazdne miesto zapise ten bit, ktory vypadol vlavo.

   Vsetky posuvy a rotacie je najlepsie si znazornit graficky. Posledne tretie pismenko v mnemotechnickom nazve instrukcie znamena smer posuvu - 'L' je posuvanie k vyssim bitom a 'R' k nizsim.

SAL
SHL
  
CF
<<==
REGISTER
<<== 0
SHR  
0 ==>>
REGISTER
==>>
CF
SAR  
SF
==>>
REGISTER
==>>
CF
RCL  
===
||
===
>> ======= >> ======= >> ===
||
===
CF
<< ==
REGISTER
RCR  
===
||
===
<< ======= << ======= << ===
||
===
REGISTER
== >>
CF
RCL  
====
||
<< === <<
>> ===== >> ===
||
===
CF
REGISTER
ROR  
====
||
====
<< ===== << ====
||
>> === >>
REGISTER
CF

   Vsetky instrukcie pre bitovy posuv a rotacie maju dva operandy. Prvy operand predstavuje objekt, nad ktorym chceme vykonavat operaciu. Platia pren presne tie iste pravidla ako pre operand 'dest' pri aritmetickych instrukciach a instrukciach pre logicke operacie. Druhy operand ma zvlastny vyznam - je to pocitadlo posunov. Moze byt dvojakeho druhu: konstanta 1 alebo premenna - register CL. Napriklad 'ROR AX,1' znamena rotaciu registra AX o jeden bit vpravo. Alebo napriklad ak je v registri CL hodnota 5, potom 'RCL SI,CL' znamena rotaciu registra SI o 5 bitov vlavo.

   Nastavovanie priznaku CF pri rotaciach a posunoch je zrejmy z grafickeho znazornenia tychto rotacii a posunov. Priznak OF je definovany iba v pripade posunu o 1 bit a to tak ze je nastaveny prave vtedy, ak znamienkovy (najvyssi) bit objektu ma po posune inu hodnotu ako pred posunom.

Nazad na obsah , predchadzajuca a dalsia lekcia