,
ASEMBLER Opis podstawowych ...ASEMBLER Opis podstawowych rozkazow asemblera, Asembler
[ Pobierz całość w formacie PDF ]
------------------------------------Opis podstawowych rozkazow asemblera------------------------------------Rejestry procesora 8086AX,BX,CX,DX - 16 bitowe(1 slowo czyli 2 bajty) ogolnego przeznaczeniaTe skladaja sie z mniejszych 8 bitowych rejestrow - starszego(h) imlodszego(l):AH,BH,CH,DH,AL,BL,CL,DLCS,DS,SS,ES - 16 bitowe rejestry segmentowe,przy czym:CS - segment koduDS - segment danychSS - segment stosuES - segment dodatkowyDI,SI - 16 bitowe rejestry indeksujace pamiec(D-cel,S-zrodlo)SP - wskaznik stosuBP - rejestr uzywany do adresowania pamieciRejestr znacznikowS - znacznik znakuZ - znacznik zeraC - znacznik przeniesieniaO - znacznik nadmiaruI - znacznik dostepnosci przerwanD - znacznik kierunkuP - znacznik parzystosciOto podstawowe mnemonniki:MOV a,b - przenies zawartosc b do aPrzy czym "a" moze byc rejestrem, wtedy "b" moze byc takze rejestremlub adresem komorki pamieci,np:mov ah,byte ptr ds:[100] - przenies setny bajt z segmentu danychdo rejesru ahW innym przypadku to "a" moze byc adresem,a "b" rejestremNalezy pamietac,ze nie mozna przenosic do siebie zawartosci reje-strow segmentowych,np intsrukcja:mov cs,ds - w procesie kompilacji bedzie bledemTotez by np. przenies zawartosc rejestru ds do cs trzeba wpierwprzenies zawartosc ds do innego rejestru ogolnego przeznaczenia idopiero jego zawartosc do cs,np.mov ax,cs ;ax:=csmov ds,ax ;ds:=ax; - oznacza komentarz czyli tekst programisty nie brany poduwage przez kompilatorPUSH a - odlozenie na wierzcholek stosu "a", gdzie "a" jest rejestrem16 bitowym,lub konkretna wartoscia.Zwiekszenie SP o jeden,np.push ax - zapisz na wierzcholek stosu zawartosc axPOP 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 cxADD a,b - dodanie do "a" wartosci "b" np.add ax,cx - ax:=ax+cxUwaga operacja moze byc przeprowadzona na rejestrach o tejsamej dlugosci jak i inne np. przenoszenia!!SUB a,b - odjecie od "a" wartosci "b" np.sub ax,cx - ax:=ax-cxINC a - zwiekszenie "a" o jedenDEC a - zmniejszenie "a" o jedenMUL a - mnozenie. Jesli "a" jest 8 bitowe to:ax:="a"*alczyli wtedy bedzie to iloczym "a" i rejestru al zapisany do axJesli "a" jest rejestrem 16 bitowym to:dx:ax:="a"*axczyli w parze rejestrow dx,ax zostanie umieszczony wynik iloczynuax przez "a",gdzie dx to starsza czesc wyniku ,ax to mniejDIV a - dzielenie.Jesli "a" jest 8 bitowe to:ax:=ax / awtedy al - iloraz,ah - resztaJesli "a" jest 16 bitowe todx:ax:=dx:ax / awtedu dx - iloraz(czesc calk. wyniku),ax - resztaROL a,b - przesuniecie zawartosci "a" o 1 bit w lewo gdy "b" to 1,np.rol al,1Lub jesli "b" to CL wowczas o jego zawartoscROR a,b - przesuniecie zawartosci "a" o 1 bit w prawo gdy "b" to 1,np.rol al,1Lub jesli "b" to CL wowczas o jego zawartoscNOT a - negacja logiczna zawartosci "a",zmiana kazdego bitu "a" naprzeciwnyNEG a - negacja logiczna ostatniego bitu "a" - bit znakuAND a,b - iloczyn logiczny "a" i "b",wynik w "a",np.and ax,bxgdy ax = 1100010b, a bx = 1011000bto ax = 10000000Iloczyn logiczny polega na tym, ze gdy wykonujemy go na dwochbitach to wynikiem jest jeden gdy oby dwa bity sa jedynkamiTEST a,b - to samo co and ale wynik nie jest nigdzie umieszczany a jedyniemodyfikowane sa znacznikiOR a,b - suma logiczna "a" i "b",wynik w "a".Gdy wykonujemy or na dwochbitach to w wyniku jeden gdy jeden z bitow jest jedynkaXOR a,b - roznica arytmetyczna "a" i "b",wynik w "a".Gdy wykonujemy xorna dwoch bitach to w wyniku zero gdy oby dwa bity to jedynkiJMP a - skok pod adres "a",gdzie "a" moze byc nazwa etykiety(nazwa:)JE/JZ a - skok pod "a" gdy Z=1JNE/JNZ a - skok pod "a" gdy Z=0JS a - skok pod "a" gdy S=1JNS a - skok pod "a" gdy S=0JC a - skok pod "a" gdy C=1JNC a - skok pod "a" gdy C=0JO a - skok pod "a" gdy O=1JNO a - skok pod "a" gdy O=0LOOP a - skok pod adres "a" jesli cx jest inne od zera,jesli zostalwykonany skok to cx jest zmniejszane o 1.Rozkaz sluzy dotworzenia petliCALL a - skok pod adres "a" z mozliwoscia powrotu rozkazem ret.Rozkazsluzy to wywolywania procedur.Rozkaz odklada na stosie odpowiedniedane dla powrotu totez trzeba zadbac by nie zostaly zniszczone bozastosowanie 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 csRET - powrot z procedury(zdjecie ze stosu odpowiednich wartosci)INT a - wywolanie przerwania o numerze "a",np.int 10hNOP - brak czynnosciIN AL,DX - przeslanie bajtu z portu o numerze w DX do ALIN AX,DX - przeslanie slowa z portu o numerze w DX do AXIN AL,a - przeslanie bajtu z portu o numerze w "a" do ALIN AX,a - przeslanie slowa z portu o numerze w "a" do AXOUT DX,AL - przeslanie slowa z AL do portu o numerze w DXOUT DX,AX - przeslanie slowa z AX do portu o numerze w DXOUT 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=0STC - C=1CLD - D=1(znacznik kierunku)STD - D=1CLI - I=0STI - I=1MOVSB - przekopiowanie bajtu spod DS:[SI] do bajtu ES:[DI] i zwiekszenielub zmniejszenie SI i DI w zaleznosci od znacznika DCMP a,b - adjecie "b" od "a" bez umieszczania nigdzie wyniku,ale ustawienieznacznikow w zaleznosci od wynikuAutor tekstu: Piotr Soko�owski,1 lutego 1998r [ Pobierz całość w formacie PDF ] |
Podobne
|