CATEGORII DOCUMENTE |
Operatii logice, deplasari si rotatii
1. Operatii logice
Operanzii in modul real sunt aceiasi ca la operatiile aritmetice obisnuite:
dst:r8,r16,r32,m8,m16,m32;
src:r8,r16,r32,m8,m16,m32,n,nn,nnnn.
NOT dst - Complementare fata de 1 a fiecarui bit din Operandul destinatie, dstn .
Actiune: dstn ←1-dstn .
Operanzi: dst.
Descriere: Instructiunea NOT inverseaza bitii Operandului; orice 1 devine 0 si viceversa. S-a notat dstn bitul n al operandului destinatie.
AND dst,src -SI logic pe bit.
Actiune: dstn ←(srcn)SI (dstn).
Operanzi: dst,src.
Descriere: Un bit al rezultatului instructiunii AND este un 1 daca ambii biti corespunzatori ai operanzilor sunt 1; altminteri, bitul devine 0. S-a notat cu srcn si dstn bitul n al operandului sursa, respectiv destinatie. Rezultatul inlocuieste primul operand.
TEST dst,src -Testare (SI fara generare de rezultat).
Actiune: (srcn)SI (dstn).
Operanzi: dst,src.
Descriere: Instructiunea TEST calculeaza "SI logic pe bit" intre cei doi operanzi. Un bit al rezultatului este 1 daca ambii biti corespunzatori ai operanzilor sunt 1; altminteri, bitul este 0. Rezultatul operatiei este sters si doar flagurile sunt modificate. S-a notat cu srcn si dstn bitul n al operandului sursa, respectiv destinatie.
OR dst,src -SAU logic pe bit.
Actiune: dstn ←(srcn)SAU (dstn).
Operanzi: dst,src.
Descriere: Instructiunea OR calculeaza SAU pe bit intre cei doi operanzi si rezultatul este plasat in primul operand. Un bit al rezultatului este 0 daca ambii biti corespunzatori ai operanzilor sunt 0; altminteri, bitul este 1. Rezultatul inlocuieste primul operand.
XOR dst src -SAU EXCLUSIV logic pe bit.
Actiune: dstn ←(srcn) XOR (dstn).
Operanzi: dst,src.
Descriere: Instructiunea XOR calculeaza SAU EXCLUSIV pe bit intre cei doi operanzi. Un bit al rezultatului este 1 daca bitii corespunzatori ai operanzilor sunt diferiti; bitul rezultatului este 0 daca bitii corespunzatori sunt identici. Rezultatul inlocuieste primul operand.
2. Deplasari si rotatii
SHL dst,[nr] -Deplasare logica spre stanga cu nr pozitii (numere fara semn).
Actiune:
C MSB LSB
Operanzi: -dst;
-[nr]: 1, CL,imm8.
Descriere: Operandul src este inmultit cu 2 de [nr] ori.
Exempe:
SHL al,1 -deplaseaza spre stanga AL cu 1 bit;
SHL al,cl -deplaseaza spre stanga AL cu un numar de biti egal cu continutul lui CL.
SHR dst,[nr] -Deplasare logica spre dreapta cu nr pozitii (numere fara semn).
Actiune:
MSB LSB C
Operanzi: -dst;
-[nr]: 1, CL,imm8.
Descriere: Operandul src este impartit cu 2 de [nr] ori.
SAL src,[nr] -Deplasare aritmetica spre stanga cu nr pozitii (numere cu semn).
Actiune:
C MSB LSB
Operanzi: -dst;
-[nr]: 1, CL,imm8.
Descriere: Operandul src cu semn este inmultit cu 2 de [nr] ori.
SAR src,[nr] -Deplasare aritmetica spre dreapta cu nr pozitii (numere cu semn)
Actiune:
MSB LSB C
Operanzi: -dst.
-[nr]: 1, CL,imm8.
Descriere: Operandul src cu semn este impartit cu 2 de [nr] ori.
ROL src,[nr]-Rotatie prin Carry spre stanga cu [nr] pozitii
Actiune:
C MSB LSB
Operanzi: -dst;
-[nr]: 1, CL,imm8.
ROR src,[nr]-Rotatie prin carry spre dreapta cu [nr] pozitii
Actiune:
MSB LSB C
Operanzi: -dst;
-[nr]: 1, CL,imm8.
RCL src,[nr]-Rotatie cu carry spre stanga cu [nr] pozitii
Actiune:
C MSB LSB
Operanzi: -dst;
-[nr]: 1, CL,imm8.
RCR src,[nr]-Rotatie cu carry spre dreapta cu [nr] pozitii
Actiune:
MSB LSB C
Operanzi: -dst;
-[nr]: 1, CL,imm8.
Descriere: Fiecare instructiune de rotatie deplaseaza bitii operandului de registru sau memorie dat. Instructiunile de rotatie spre stanga deplaseaza toti bitii catre pozitia cea mai semnificativa (catre MSB) ,exceptand bitul din pozitia cea mai semnificativa, care este mutat in pozitia cea mai putin semnificativa (LSB). Instructiunile de rotatie spre dreapta actioneaza invers: bitti sunt deplasati catre pozitia cea mai putin semnificativa iar bitul din pozitia cea mai putin semnificativa ajunge in pozitia cea mai semnificativa.
Pentru instructiunile RCL si RCR, flagul CF este o parte a cantitatii rotite. Instructiunea RCL deplaseaza flagul CF in bitul cel mai putin semnificativ si cel mai semnificativ bit in flagul CF; instructiunea RCR deplaseaza flagul CF in bitul cel mai semnificativ si bitul cel mai putin semnificativ in flagul CF. La instructiunile ROL si ROR, valoarea flagului CF nu este parte a rezultatului, dar flagul CF receptioneaza o copie a bitului care a fost deplasat de la un capat la altul.
In modul real sau virtual 8086, rotatia este repetata de un numar de ori indicat de al doilea operand, care este unu sau continutul registrului CL.De la procesoare I-386 in sus, operandul al doilea poate fi si o constanta imediata.
Flagul OF este definit numai pentru forme cu o singura rotatie ale instructiunilor (al doilea operand este un 1). Este nedefinit in toate celelalte cazuri. Pentru deplasari/rotiri spre stanga, bitul CF de dupa deplasare este "sau-exclusivat" cu bitul rezultat de cel mai inalt ordin. Pentru deplasari/rotiri spre dreapta, cei doi biti cu cel mai inalt ordin ai rezultatului sunt "sau-exclusivati" spre a rezulta flagul OF.
Observatie: Desi microprocesoarele sub I-386 admit deplasarea numai cu un bit sau cu numarul contiinut de CL, unele asambloare admit si un operand numeric mai mare de 1 ca al doilea operand. Astfel, in TASM sunt admise forme ca:
SHL DX,6
SHR AL,2
.
.
.
Dupa asamblare si linkeditare, in programul obiect apar insa in mod corect 8 instructiuni SHL BP,1 sau 6 instructiuni SHL DX,1 s.a.m.d.
Cu directiva .386 sunt admise direct si deplasari cu imm8.
3. Operatii aritmetice BCD (optional, vezi Anexa 1)
AAA -Ajustare AL dupa adunare (BCD despachetat).
AAS -Ajustare AL dupa scadere (BCD despachetat).
DAA -Ajustare AL dupa adunare (BCD inpachetat).
DAS -Ajustare AL dupa scadere (BCD impachetat).
AAM -Ajustare AL dupa inmultire.
AAD -Ajustare AL inainte de impartire.
4.Modul de lucru
Initial, in partea de inceput a programelor urmatoare, registrele si memoria vor fi incarcate astfel: AX=1122h, Bx=10h, CX=3344h, DX=5566, [BX]=99AAh, BP= 77h.
P 1 Sa se scrie un program care sa transforme in 0 bitii lui AX=0EEEEh cu exceptia bitilor 0..3. Aceasta operatie va fi denumita in continuare "Mascare" a bitilor 4..15. Rezultatul mascarii va fi memorat in DX iar AX va trebui sa ramana la valoarea initiala.
P 2 Sa se scrie un program care sa transforme in 1 bitii lui AX=0EEEEh cu exceptia bitior 47. Rezultatul acestei mascari va fi memorat in DX iar AX va trebui sa ramana la valoarea initiala.
P 3 Sa se scrie un program care sa copieze bitii 2 si 3 ai lui BL=0A6h in aceleasi pozitii din CL=1Fh, lasind restul bitilor lui CL neschimbati.
P 4 Sa se scrie un program care sa incarce in 4 locatii consecutive din memorie, incepand de la adresa 10h , cei 4 biti inferiori ai lui DL=05 (bitul 0 in prima locatie, bitul 1 in a doua locatie, s.a.m.d.).
P 5 Sa se scrie un program care sa inverseze semioctetul superior al lui BL=12h cu cel inferior al lui CH=56h, pastrand ordinea bitilor.
P 6 Sa se scrie un program care sa anuleze in CL=25h bitii care sunt identici cu cei omologi din DH=55h.
P 7 Sa se scrie un program care sa seteze in CL=25h bitii care sunt identici cu cei omologi din DH=55h.
P 8 Sa se scrie un program care sa inmulteasca cu 320 continutul registrului BP, folosind deplasari spre stanga. Aceasta operatie este necesara pentru calculul adresei unui punct din memoria ecran in modul grafic 320 x 200 si va fi folosit frecvent in programele de afisare grafica. Rezultatul pentru BP=77h va trebui sa fie 94C0h.
Indicatii: Se va tine seama ca 320=256+64 adica 320 = 28 + 26 . Prin urmare, se va face o copie a lui BP in alt registru apoi se vor deplasa spre stanga cele doua registre cu 8 respectiv cu 6 pozitii si se vor aduna.
P 9 Se va scrie un program care sa faca inmultirea cu 640 a continutului registrului BP folosind deplasari spre stanga. Aceasta operatie este necesara pentru calculul adresei unui punct din memoria ecran in modul grafic 640 x 480 si se foloseste frecvent in programele de afisare grafica. Rezultatul pentru BP=33h va trebui sa fie 7F80h.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 2057
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved