Instrukcje
Poniżesz znajdziesz opis kilku instrukcji assemblera, które według mnie powinieneś znać, aby stworzyć coś w tym języku.

mov - przesyłanie danych, może odbywać się pomiędzy pamięcią i rejestrem, bądź też między dwoma rejestrami, podawane są dwa argumenty, zawartość drugiego przesyłana jest do pierwszego
mov ax,[_shitka] - zawartość pamięci z miejsca oznaczonego etykietą _shitka zostanie przesłana do rejestru ax

add, sub - dodawanie lub odejmowanie, od argumentu pierwszego odejmowany jest drugi, wynik zapisywany jest w pierwszym
sub ax,5 - odjęcie od wartości w ax pięciu i zapisanie wyniku w ax

inc, dec - zwiększenie lub zmniejszenie o jeden wartości pierwszego (i jedynego) argumentu
inc ecx - zwiększenie o jeden wartości w ecx

push, pop - położenie lub zdjęcie elementu ze stosu, nie można położyć jednego bajtu, można jedynie słowo lub podwójne słowo
push bx - położenie na stosie zawartości rejestru bx

call, ret - dzięki tym rozkazom możesz tworzyć procedury, call oznacza wywołanie procedury, ret - powrót do programu

TekknoSux:
add ax,bx
dec cx
ret
...
call TekknoSux


rozkaz call każe procesorowi skoczyć do etykiety TekknoSux, wykonane zostaną rozkazy add i dec, a potem procesor powróci do programu, czyli wykona instrukcje znajdujące się za call, adres powrotu z procedury przechowywany jest na stosie

cmp - porównanie dwóch argumentów ze sobą i ustawianie na podstawie tego porównania znaczników procesora, tak naprawdę wykonywane jest odejmowanie, od pierwszego argumentu jest odejmowany drugi, wynik nie jest jednak nigdzie zapisywany, najczęściej po instrukcji porównania znajdują się instrukcje skoku warunkowego
cmp al,bl - porównanie wartości al i bl

jmp - skok bezwarunkowy, czyli goto
jmp BlackSabbathRulez - skok do etykiety BlackSabbathRulez

jz, je - skok jeżeli zero, skok jeżeli równe (czyli jedno i to samo), gdy porównywane instrukcją cmp dane są równe, to wynik odejmowania daje 0, co ustawia znacznik ZF, skok zostanie wykonany tylko, gdy ten znacznik jest ustawiony (może go ustawić także instrukcja arytmetyczna)

jb - skok, gdy mniejszy
ja - skok, gdy większy
jl - skok, gdy mniejszy, ale z uwzględnieniem znaku liczby
jg - skok, gdy większy, liczby ze znakiem
js - skok, gdy wynik jest ujemny (sign=znak)
jc - skok przy przeniesieniu (znacznik CF)
jo - skok przy nadmiarze (znacznik OF)

(więcej instrukcji skoków powinieneś znaleźć w dodatkach)

out - wysłanie danej do portu, numer portu można podać bezpośrednio, (liczba 8 bitowa), lub skorzystać z rejestru dx
out dx,al - wysłanie bajtu z al to portu dx

in - odebranie danej z portu, numer portu można podać bezpośrednio, (liczba 8 bitowa), lub skorzystać z rejestru dx
in al,dx - odczytanie bajtu z portu dx i umieszczenie go w al

int - wywołanie przerwania, numer przerwania podawany jest jako jedyny argument
int 21h - wywołanie przerwania 21h


Autorem tekstu jest: Jacek Popławski
Materiał dodany przez użytkownika: alphan