270 likes | 564 Views
Asembler - podstawowe instrukcje, deklarowanie zmiennych. Ariel Grzechowski. Rejestr flag.
E N D
Asembler - podstawowe instrukcje, deklarowanie zmiennych. Ariel Grzechowski
Rejestr flag Zapisane są w nim takie ustawienia, jak np. możliwość korzystania z instrukcji wejścia-wyjścia przez nasz program. Ponadto, w rejestrze tym zapisywanych jest wiele informacji na temat ostatnio przeprowadzanej operacji arytmetycznej. Rejestr EFLAGS wygląda tak (rozkład bitów):
Rejestr flag znaczniki, których wartość zależna jest jedynie od ostatniego działania arytmetycznego
Rejestr flag znaczniki, które mają wpływ na sposób działania procesora
Asembler - podstawowe instrukcje • Instrukcje dzielimy na: • Arytmetyczne • Logiczne • Skokowe • Transferowe
Asembler – instrukcje arytmetyczne add działanie: sumuje A i B; wynik przechowuje w A.A: rejestr lub adres pamięci.B: konkretna wartość, rejestr lub adres pamięci (jeśli A nie jest adresem).modyfikowane flagi: OF, CF, SF, ZF, AF i PF. Przykład: addeax, 09h
Asembler – instrukcje arytmetyczne sub działanie: odejmuje B od A; wynik przechowuje w A.A: rejestr lub adres pamięci.B: konkretna wartość, rejestr lub adres pamięci (ale tylko jeśli A również nie jest adresem pamięci).modyfikowane flagi: OF, CF, SF, ZF, AF i PF. Przykład: subedx,09h
Asembler – instrukcje arytmetyczne mul działanie: mnoży A przez odpowiedni rejestr i zapisuje wynik w odpowiednim rejestrze (zależne od rozmiaru A; patrz tabela); wszystkie działania są wykonywane na liczbach bez znaku; dla liczb ze znakiem skorzystaj z imul.A: rejestr ogólnego przeznaczenia lub adres pamięci.modyfikowane flagi: OF, SF, ZF, AF, PF i CF.modyfikowane rejestry: zależnie od rozmiaru A Przykład: muleax
Asembler – instrukcje arytmetyczne div działanie: dzieli odpowiedni rejestr przez A i przechowuje wynik w tym rejestrze (patrz niżej). Zarówno rejestr jak i A są traktowane jako liczby bez znaku. Dla liczb ze znakiem skorzystaj z idiv.A: rejestr lub adres pamięci.modyfikowane flagi: OF, CF, SF, ZF, AF i PF.modyfikowane rejestry: zależnie od rozmiaru A. Przykład: div eax
Asembler – instrukcje arytmetyczne POZOSTAŁE
Asembler – instrukcje logiczne and działanie: wykonuje operację AND (koniunkcja) na odpowiadających sobie bitach operandów A i B; wynik jest przechowywany w A (poprzednia wartość zostaje zamazana).A: rejestr lub adres pamięci.B: konkretna wartość, rejestr lub adres pamięci (jeśli A nie jest adresem).modyfikowane flagi: OF i CF są zerowane; SF, ZF i PF nabywają wartość zależną od wyniku. Przykład: andedx,ebx
Asembler – instrukcje logiczne not działanie: neguje (odwraca) wartości wszystkich bitów w A (1->0; 0->1).W literaturze instrukcja ta zwana jest także uzupełnieniem jedynkowymA: rejestr lub adres pamięci. Przykład: notedx
Asembler – instrukcje logiczne shl działanie: przesuwa wszystkie bity A w lewo o ilość bitów zdefiniowaną przez BA: rejestr lub adres pamięci.B: konkretna wartość lub rejestr CL (8-bitowa część rejestru ECX).modyfikowane flagi: CF (przyjmuje wartość ostatniego bitu "wyrzuconego" poza obręb); SF, ZF i PF (zależnie od wyniku), OF (tylko, gdy B=1; przyjmuje wartość 0, gdy dwa ostatnie bity przed przesunięciem były równe; przyjmuje 1 w przeciwnym przypadku). Przykład: shledx 02h
Asembler – instrukcje logiczne POZOSTAŁE
Asembler – instrukcje skokowe jmp działanie: polecenie wykonuje bezwarunkowy skok do etykiety. Instrukcja ta przyjmuje tylko jeden operand.A: etykieta do której ma być wykonany skok. Przykład: jmpetykieta
Asembler – instrukcje skokowe call działanie: wykonuje wywołanie procedury (funkcji). A: etykieta lub adres procedury zawarty w rejestrze lub komórce pamięci. Przykład: Call moja_procedura
Asembler – instrukcje skokowe POZOSTAŁE
Asembler – instrukcje skokowe POZOSTAŁE
Asembler – instrukcje transferowe mov działanie: kopiuje B do A. Oba parametry muszą być tego samego rozmiaru. Operand docelowy i źródłowy nie mogą być jednocześnie adresami w pamięci.A: rejestr ogólnego przeznaczenia, rejestr segmentowy (poza CS) lub adres w pamięci.B: konkretna wartość, rejestr ogólnego przeznaczenia, rejestr segmentowy lub adres w pamięci. Przykład: mov edx,09055509h
Asembler – instrukcje transferowe push działanie: umieszcza A na szczycie stosu.A:word lub double word.modyfikowane rejestry: ESP (zwiększany o rozmiar A) Przykład: pushedx
Asembler – instrukcje transferowe xchg działanie: wymienia zawartość operandów między sobą. Przykład: xchgAL, CL
Asembler – instrukcje transferowe POZOSTAŁE
Asembler – instrukcje transferowe POZOSTAŁE
Asembler – deklarowanie zmiennych NASM Aby utworzyć nową zmienną należy użyć schematu: nazwa typwartość W polu nazwa wpisujemy nazwę dla naszej zmiennej (pole to jest opcjonalne); w polu typ wpisujemy typ zmiennej (patrz: tabela), zaś w polu wartość wpisujemy startową wartość dla naszej zmiennej. PRZYKŁAD: liczba db10
Asembler – deklarowanie zmiennych GNU As Aby utworzyć nową zmienną należy użyć schematu: nazwa: .typwartość PRZYKŁAD: liczba .string"\10\18\3"