Ćwiczenie nr 11: Assembler
Transkrypt
Ćwiczenie nr 11: Assembler
Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego Barbara Łukawska, Adam Krechowicz, Tomasz Michno Ćwiczenie nr 11: Assembler Procesory rodziny x86 są najczęściej uŜywanymi procesorami w komputerach PC. NajwaŜniejsze elementy architektury procesora x86 zostały przedstawione na rysunku poniŜej: ALU Układ adresowania Rejestry Znaczniki Układ sterujący Jednym z najwaŜniejszych elementów procesora jest jednostka arytmetyczno – logiczna (ALU). Odpowiada ona za realizowanie operacji takich jak dodawanie czy odejmowanie. Znaczniki odpowiadają za przechowywanie aktualnego stanu procesora i wykorzystywane są np. do sterowania przebiegiem programu. Rejestry zawierają komórki pamięci, na których wykonywane są operacje. Do najwaŜniejszych rejestrów naleŜą: • AX – akumulator. Wykorzystywany najczęściej do operacji arytmetycznych. Jest to rejestr 16 bitowy składający się z dwóch rejestrów 8 bitowych AH i AL. • BX – rejestr bazowy. Jest to rejestr 16 bitowy składający się z dwóch rejestrów 8 bitowych BH i BL. • CX – rejestr licznikowy. Jest to rejestr 16 bitowy składający się z dwóch rejestrów 8 bitowych CH i CL. • DX – rejestr danych. Jest to rejestr 16 bitowy składający się z dwóch rejestrów 8 bitowych DH i DL. KaŜdy program, napisany w języku wysokiego poziomu, aby mógł być wykonany, musi zostać przetworzony na ciąg instrukcji procesora. Proces ten nazwany jest kompilacją. KaŜdy procesor posiada swój zestaw instrukcji, które są wykorzystywane do tworzenia programów. Instrukcje te moŜna takŜe wykorzystać do samodzielnego pisania programów na niskim poziomie. SłuŜy do tego język zwany asemblerem i zawiera instrukcje, które są bezpośrednio odwzorowane na instrukcje procesora. Projekt ,,Absolwent Politechniki Świętokrzyskiej – inŜynier na miarę potrzeb współczesnej gospodarki’’ Program Operacyjny Kapitał Ludzki Priorytet IV Działanie 4.1, Poddziałanie 4.1.2 umowa UDA – POKL.04.01.02-00-213/12-00 Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego Do umieszczenia fragmentów programów asemblerowych w Turbo Pascalu wykorzystuje się blok: asm end; PoniŜej znajduje się wykaz niektórych instrukcji asemblera procesora x86, które moŜna uŜyć w swoich programach: • mov a, b – ustawienie rejestrowi, zmiennej, lub komórce pamięci określonej przez pierwszy argument wartości z drugiego argumentu. Np. mov ah, 5 spowoduje przypisanie do rejestru ah wartości 5 • add a, b – dodanie podanych wartości, wynik zostanie zapisany w argumencie a • sub a, b – odejmowanie podanych wartości • and a, b – wykonanie logicznego AND • or a, b – wykonanie logicznego OR • not a – wykonanie logicznego NOT • inc a – zwiększenie o 1 • dec a – zmniejszenie o 1 • jmp @miejsce – bezwarunkowy skok w podane miejsce • cmp a, b – porównanie dwóch liczb. Po tej instrukcji moŜe występować instrukcja skoku realizowana w zaleŜności od wyniku operacji: o ja @miejsce – skok w podane miejsce, jeśli większe o jae @ miejsce – skok w podane miejsce, jeśli większe lub równe o jb @miejsce – skok w podane miejsce, jeśli mniejsze o jbe @miejsce – skok w podane miejsce, jeśli mniejsze lub równe o jz @ miejsce – skok w podane miejsce, jeśli poprzednia operacja zwróciła 0 o jnz @miejsce – skok w podane miejsce, jeśli poprzednia operacja zwróciła liczbę róŜną od 0 o js @ miejsce – skok w podane miejsce, jeśli poprzednia operacja zwróciła liczbę ujemną Projekt ,,Absolwent Politechniki Świętokrzyskiej – inŜynier na miarę potrzeb współczesnej gospodarki’’ Program Operacyjny Kapitał Ludzki Priorytet IV Działanie 4.1, Poddziałanie 4.1.2 umowa UDA – POKL.04.01.02-00-213/12-00 Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego o jns @miejsce – skok w podane miejsce, jeśli poprzednia operacja zwróciła liczbę dodatnią Przykład: program asmtest; var x: byte; y: byte; begin Readln(x); Readln(y); asm mov ah, y add x, ah cmp x, 10 jbe @koniec mov x, 10 @koniec: end; Writeln(x); Readln; end. PowyŜszy program zapisuje do rejestru ah wartość przechowywaną w zmiennej y. Następnie wykonywane jest dodawanie wartości ah do zmiennej x. Kolejne instrukcje odpowiadają za warunek. Jeśli wartość sumy (znajdującej się w x) jest mniejsza od 10 następuje skok na koniec programu zaznaczonego etykietą @koniec. W przeciwnym wypadku do zmiennej x zapisywana jest wartość 10. Projekt ,,Absolwent Politechniki Świętokrzyskiej – inŜynier na miarę potrzeb współczesnej gospodarki’’ Program Operacyjny Kapitał Ludzki Priorytet IV Działanie 4.1, Poddziałanie 4.1.2 umowa UDA – POKL.04.01.02-00-213/12-00 Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego Zadania do wykonania: 1. Napisz program realizujący obliczenia w formie wstawki języka asembler: a) Sumujący trzy podane liczby b) Obliczający x*4 wykorzystując dodawanie c) Wykonujący obliczenia (x – 2) + y d) Jeśli x > 5 to (x+10)-(x+2) w przeciwnym wypadku x+(x-1) e) Jeśli w x jest ustawiony czwarty bit oblicz x + 2 w przeciwnym wypadku x + 3 f) Ustaw w x piąty bit na 1 następnie wyzeruj bity 7 i 8 g) Jeśli x > 4 i y < 5 oblicz x+y w przeciwnym wypadku przypisz x = y = 0 h) Dopóki x > 0 wykonaj x = x-1 i) Oblicz resztę z dzielenia dwóch liczb wykorzystując odejmowanie j) Oblicz x*y wykorzystując dodawanie Projekt ,,Absolwent Politechniki Świętokrzyskiej – inŜynier na miarę potrzeb współczesnej gospodarki’’ Program Operacyjny Kapitał Ludzki Priorytet IV Działanie 4.1, Poddziałanie 4.1.2 umowa UDA – POKL.04.01.02-00-213/12-00