Kurs programowania w asemblerze


Przesunięcia, obroty i rozkazy logiczne

Operacje związane z tymi pojęciami są bardzo ważne, dlatego poświęciłem oddzielną stronę na ich omówienie. By sprawnie posługiwać się zawartymi tutaj opisami i instrukcjami powinieneś powtórzyć sobie lekcję systemu dwójkowego (binarnego). Każda liczba w postaci binarnej powinna być zakończona literą B.

Zacznijmy od przesunięć i obrotów. Wszystkie te operacje można wykonywać na rejestrach 8 i 16 bitowych. Drugim argumentem instrukcji jest zawsze cyfra 1 bądź zawartość rejestru CL. Trzeba tylko jeszcze przypomnieć, że kolejne pola bitowe rejestru są w następującej kolejności: 7,6,5,4,3,2,1,0 i że literka C oznacza znacznik rejestru znaczników, a dokładnie znacznik przesunięcia.

Instrukcje można używać w następujący sposób, np.:

MOV AL,15H
MOV CL,2
SHL AL,CL

Do instrukcji związanych z obrotami i przesunięciami zaliczami:

SHL rejestr lub zmienna, liczbaPrzesunięcie logiczne w lewo
SAL rejestr lub zmienna, liczbaPrzesunięcie arytmetyczne w lewo
SHR rejestr lub zmienna, liczbaPrzesunięcie logiczne w prawo
SAR rejestr lub zmienna, liczbaPrzesunięcie arytmetyczne w prawo
ROL rejestr lub zmienna, liczbaObrót w lewo
RCL rejestr lub zmienna, liczbaObrót w lewo z przeniesieniem
ROR rejestr lub zmienna, liczbaObrót w prawo
RCR rejestr lub zmienna, liczbaObrót w prawo z przeniesieniem

Oto lista instrukcji logicznych:

NOT rejestr lub zmienna Negacja logiczna
AND rejestr lub zmienna, rejestr lub zmienna Iloczyn logiczny
TEST rejestr lub zmienna, rejestr lub zmienna Iloczyn logiczny bez zmiany operandów
OR rejestr lub zmienna, rejestr lub zmienna Suma logiczna
XOR rejestr lub zmienna, rejestr lub zmienna Różnica symetryczna

Instrukcje SHL i SAL

C <-- 7 <-- 6 <-- 5 <-- 4 <-- 3 <-- 2 <-- 1 <-- 0 <-- 0

Przesunięcie logiczne w lewo (SHL) i przesunięcie arytmetyczne w lewo (SAL). Znacznik C jest wyzerowany.

Przesunięcie logiczne w lewo jest szybszą instrukcją pozwalającą na mnożenie liczby przez potęgę liczby 2. By np. pomnożyć 4*8, należy napisać ciąg instrukcji:

MOV AL,4 ; 00000100B
MOV CL,3 ; 2<sup>3</sup>=8<br>
SHL AL,CL

Po wykonaniu tych instrukcji w rejestrze AL znajdzie się wartość 32 (00100000B) czyli 4*8=32. Zajrzyj do SHR

Instrukcja SHR

0 --> 7 --> 6 --> 5 --> 4 --> 3 --> 2 --> 1 --> 0 --> C

Przesunięcie logiczne w prawo. Znacznik C zostaje ustawiony.

Przesunięcie logiczne w prawo jest często stosowane jako instrukcja do dzielenia przez potęgę liczby 2, gdyż jest dużo szybsza od innych podobnych instrukcji. By np. podzielić liczbę 32 przez 16 należy napisać ciąg instrukcji:

MOV AL,32
; 0010000B
MOV CL,4 ; 2<sup>4</sup>=16
SHR AL,CL

W rejestrze AL znajdzie się wartość 2 (00000010B) czyli 32/16. Zajrzyj do SHL

Instrukcja SAR

bit 7 --> 7 --> 6 --> 5 --> 4 --> 3 --> 2 --> 1 --> 0 --> C

Przesunięcie arytmetyczne w prawo. Znacznik C wyzerowany. Bit 7 jest powielany.

Instrukcja ROL

C <-- 7 <-- 6 <-- 5 <-- 4 <-- 3 <-- 2 <-- 1 <-- 0 <-- bit 7

Obrót w lewo. Znacznik C zostaje wyzerowany.

Instrukcja RCL

C <-- 7 <-- 6 <-- 5 <-- 4 <-- 3 <-- 2 <-- 1 <-- 0 <-- C

Obrót w lewo z przeniesieniem. Znacznik C zostaje wyzerowany.

Instrukcja ROR

bit 0 --> 7 --> 6 --> 5 --> 4 --> 3 --> 2 --> 1 --> 0 --> C

Obrót w prawo. Znacznik C ustawiony.

Instrukcja RCR

C --> 7 --> 6 --> 5 --> 4 --> 3 --> 2 --> 1 --> 0 --> C

Obrót w prawo z przeniesieniem, znacznik C zostaje ustawiony.

Instrukcja NOT

Instrukcja wykonuje negację logiczna. Jej działanie polega na negowaniu każdego bitu argumentu, czyli zmianie wartości na przeciwną np.

MOV AX, 14B5H ; 0001010010110101B
NOT AX

Wynikiem powyższych instrukcji jest wartość AX=0EB4AH (1110101101001010B)

Instrukcja AND

Instrukcja wykonuje iloczyn logiczny. Parametrami jej mogą być rejestry, zmienne lub wartości liczbowe. Iloczynowi logicznemu podlegają odpowiadające sobie bity obu parametrów. Po wykonaniu tej instrukcji znaczniki C i O zostają ustawione, a znaczniki S, P, Z są ustawione zgodnie z wynikiem operacji (dla 0,0, dla 1,0 i dla 1,1). Wynik tej instrukcji przesyłany jest do pierwszego operandu. Tabela pokazuje sposób działania instrukcji AND:

A B Wynik
0 0 0
1 0 0
0 1 0
1 1 1

Instrukcja TEST

Instrukcja działa tak samo jak AND, tylko że nie zmienia wartości argumentów, a ustawia odpowiednio znaczniki. Zobacz AND

Instrukcja OR

Instrukcja wykonuje sumę logiczną. Parametrami jej mogą być rejestry, zmienne lub wartości liczbowe. Sumie podlegają odpowiadające sobie bity obu argumentów. Po wykonaniu tej instrukcji znaczniki C i O zostają ustawione, a znaczniki S, P, Z są ustawione zgodnie z wynikiem operacji (dla 0,0, dla 1,0 i dla 1,1). Wynik tej instrukcji przesyłany jest do pierwszego operandu. Tabela pokazuje sposób działania instrukcji OR:

A B Wynik
0 0 0
1 0 1
0 1 1
1 1 1

Instrukcja XOR

Instrukcja wykonuje różnicę symetryczną. Parametrami jej mogą być rejestry, zmienne lub wartości liczbowe. Różnicy podlegają odpowiadające sobie bity obu argumentów. Po wykonaniu tej instrukcji znaczniki C i O zostają ustawione, a znaczniki S, P, Z są ustawione zgodnie z wynikiem operacji (dla 0,0, dla 1,0 i dla 1,1). Wynik tej instrukcji przesyłany jest do pierwszego operandu. Tabela pokazuje sposób działania instrukcji XOR:

A B Wynik
0 0 0
1 0 1
0 1 1
1 1 0

Autor: Karol Wierzchołowski, opracowano: 12.01.2002 r. Wszelkie prawa zastrzeżone.
Kontakt

Jeśli chcesz się z nami skontaktować napisz na adres: info(at)binboy.org lub odwiedź nasz profil na Facebooku!

O Nas

Serwis binboy.org to kopalnia wiedzy dla wszystkich z branży IT, w szczególności dla programistów i webmasterów. To duży zbiór kursów programowania, tutoriali, darmowych ebooków, setki kodów źródłowych itp.

Bądź w kontakcie

Panel użytkownika

Zaloguj się do panelu użytkownika.
Nie masz konta? Zarejestruj się!
Zapomniałeś hasła?