ASEMBLER Opis podstawowych rozkazow asemblera.TXT

(6 KB) Pobierz
                   ------------------------------------
                   Opis podstawowych rozkazow asemblera
                   ------------------------------------

Rejestry procesora 8086
AX,BX,CX,DX - 16 bitowe(1 slowo czyli 2 bajty) ogolnego przeznaczenia
              Te skladaja sie z mniejszych 8 bitowych rejestrow - starszego(h) i
              mlodszego(l):
              AH,BH,CH,DH,AL,BL,CL,DL
CS,DS,SS,ES - 16 bitowe rejestry segmentowe,przy czym:
              CS - segment kodu
              DS - segment danych
              SS - segment stosu
              ES - segment dodatkowy
DI,SI       - 16 bitowe rejestry indeksujace pamiec(D-cel,S-zrodlo)
SP          - wskaznik stosu
BP          - rejestr uzywany do adresowania pamieci
Rejestr znacznikow
S - znacznik znaku
Z - znacznik zera
C - znacznik przeniesienia
O - znacznik nadmiaru
I - znacznik dostepnosci przerwan
D - znacznik kierunku
P - znacznik parzystosci

Oto podstawowe mnemonniki:
MOV a,b   - przenies zawartosc b do a
            Przy czym "a" moze byc rejestrem, wtedy "b" moze byc takze rejestrem
            lub adresem komorki pamieci,np:
            mov ah,byte ptr ds:[100]   - przenies setny bajt z segmentu danych
                                         do rejesru ah
            W innym przypadku to "a" moze byc adresem,a "b" rejestrem
            Nalezy pamietac,ze nie mozna przenosic do siebie zawartosci reje-
            strow segmentowych,np intsrukcja:
            mov cs,ds   - w procesie kompilacji bedzie bledem
            Totez by np. przenies zawartosc rejestru ds do cs trzeba wpierw
            przenies zawartosc ds do innego rejestru ogolnego przeznaczenia i
            dopiero jego zawartosc do cs,np.
            mov ax,cs    ;ax:=cs
            mov ds,ax    ;ds:=ax
            ;    - oznacza komentarz czyli tekst programisty nie brany pod
                   uwage przez kompilator
PUSH a     - odlozenie na wierzcholek stosu "a", gdzie "a" jest rejestrem
             16 bitowym,lub konkretna wartoscia.Zwiekszenie SP o jeden,np.
             push ax    - zapisz na wierzcholek stosu zawartosc ax
POP a      - zdjecie ze stosu "a", rozkaz zdejmuje 16 bitow ze stosu,zmniejsze-
             nie SP o jeden,np.
             pop cx  - zdjecie slowa ze stosu i jego zapis do cx
ADD a,b    - dodanie do "a" wartosci "b" np.
             add ax,cx     - ax:=ax+cx
             Uwaga operacja moze byc przeprowadzona na rejestrach o tej
             samej dlugosci jak i inne np. przenoszenia!!
SUB a,b    - odjecie od "a" wartosci "b" np.
             sub ax,cx     - ax:=ax-cx
INC a      - zwiekszenie "a" o jeden
DEC a      - zmniejszenie "a" o jeden
MUL a      - mnozenie. Jesli "a" jest 8 bitowe to:
             ax:="a"*al
             czyli wtedy bedzie to iloczym "a" i rejestru al zapisany do ax
             Jesli "a" jest rejestrem 16 bitowym to:
             dx:ax:="a"*ax
             czyli w parze rejestrow dx,ax zostanie umieszczony wynik iloczynu
             ax przez "a",gdzie dx to starsza czesc wyniku ,ax  to mniej
DIV a      - dzielenie.Jesli "a" jest 8 bitowe to:
             ax:=ax / a
             wtedy al - iloraz,ah - reszta
             Jesli "a" jest 16 bitowe to
             dx:ax:=dx:ax / a
             wtedu dx - iloraz(czesc calk. wyniku),ax - reszta
ROL a,b    - przesuniecie zawartosci "a" o 1 bit w lewo gdy "b" to 1,np.
             rol al,1
             Lub jesli "b" to CL wowczas o jego zawartosc
ROR a,b    - przesuniecie zawartosci "a" o 1 bit w prawo gdy "b" to 1,np.
             rol al,1
             Lub jesli "b" to CL wowczas o jego zawartosc
NOT a      - negacja logiczna zawartosci "a",zmiana kazdego bitu "a" na
             przeciwny
NEG a      - negacja logiczna ostatniego bitu "a" - bit znaku
AND a,b    - iloczyn logiczny "a" i "b",wynik w "a",np.
             and ax,bx
             gdy ax = 1100010b, a bx = 1011000b
             to ax = 10000000
             Iloczyn logiczny polega na tym, ze gdy wykonujemy go na dwoch
             bitach to wynikiem jest jeden gdy oby dwa bity sa jedynkami
TEST a,b   - to samo co and ale wynik nie jest nigdzie umieszczany a jedynie
             modyfikowane sa znaczniki
OR a,b     - suma logiczna "a" i "b",wynik w "a".Gdy wykonujemy or na dwoch
             bitach to w wyniku jeden gdy jeden z bitow jest jedynka
XOR a,b    - roznica arytmetyczna "a" i "b",wynik w "a".Gdy wykonujemy xor
             na dwoch bitach to w wyniku zero gdy oby dwa bity to jedynki
JMP a      - skok pod adres "a",gdzie "a" moze byc nazwa etykiety(nazwa:)
JE/JZ   a  - skok pod "a" gdy Z=1
JNE/JNZ a  - skok pod "a" gdy Z=0
JS      a  - skok pod "a" gdy S=1
JNS     a  - skok pod "a" gdy S=0
JC      a  - skok pod "a" gdy C=1
JNC     a  - skok pod "a" gdy C=0
JO      a  - skok pod "a" gdy O=1
JNO     a  - skok pod "a" gdy O=0
LOOP a     - skok pod adres "a" jesli cx jest inne od zera,jesli zostal
             wykonany skok to cx jest zmniejszane o 1.Rozkaz sluzy do
             tworzenia petli
CALL a     - skok pod adres "a" z mozliwoscia powrotu rozkazem ret.Rozkaz
             sluzy to wywolywania procedur.Rozkaz odklada na stosie odpowiednie
             dane dla powrotu totez trzeba zadbac by nie zostaly zniszczone bo
             zastosowanie rozkazu ret mozne doprowadzic do zawieszenie kompute-
             ra
             "a" moze byc tez konkretnym adresem np. segment danych i offset - 
             czyli numer bajtu w tym segmencie do ktorego skaczemy,np.
             call cs:[bx]   - skocz pod bajt o numerze bx w segmencie cs
RET        - powrot z procedury(zdjecie ze stosu odpowiednich wartosci)
INT a      - wywolanie przerwania o numerze "a",np.
             int 10h
NOP        - brak czynnosci
IN AL,DX   - przeslanie bajtu z portu o numerze w DX do AL
IN AX,DX   - przeslanie slowa z portu o numerze w DX do AX
IN AL,a    - przeslanie bajtu z portu o numerze w "a" do AL
IN AX,a    - przeslanie slowa z portu o numerze w "a" do AX
OUT DX,AL  - przeslanie slowa z AL do portu o numerze w DX
OUT DX,AX  - przeslanie slowa z AX do portu o numerze w DX
OUT a,AL   - przeslanie slowa z AL do portu o numerze w "a"(0-255)
OUT a,AX   - przeslanie slowa z AX do portu o numerze w "a"(0-255)
CLC        - C=0
STC        - C=1
CLD        - D=1(znacznik kierunku)
STD        - D=1
CLI        - I=0
STI        - I=1
MOVSB      - przekopiowanie bajtu spod DS:[SI] do bajtu ES:[DI] i zwiekszenie
             lub zmniejszenie SI i DI w zaleznosci od znacznika D
CMP a,b    - adjecie "b" od "a" bez umieszczania nigdzie wyniku,ale ustawienie
             znacznikow w zaleznosci od wyniku


Autor tekstu: Piotr Soko�owski,1 lutego 1998r
Zgłoś jeśli naruszono regulamin