Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... ·...

24
Podstawowe algorytmy w asemblerze Szymon Jagieła Bartłomiej Rupik

Transcript of Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... ·...

Page 1: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Podstawowe algorytmy w asemblerze

Szymon Jagieła

Bartłomiej Rupik

Page 2: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Plan prezentacji

1. Wstęp

2. Proste algorytmy

1. Dane i tablice

2. Instrukcja if

3. Instrukcja while

3. Zaawansowane algorytmy

1. Linked-list

2. Algorytmy sortowania

4. Podsumowanie

Page 3: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Wstęp

Głównym celem prezentacji jest przedstawienie

algorytmów, które mogę przyspieszyć działanie programu.

Zostaną porównane rozwiązania z C przedstawione w

kodzie assemblerowym, takie jak pętle, instrukcje

warunkowe oraz bardziej zaawansowane algorytmy, jak

lista oraz różne rodzaje sortowania

Page 4: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Deklaracja

zmiennych

b – typ 8 bitowej zmiennej

w – typ 16 bitowej

zmiennej

Przykład 1:

C:

int x;

char y, z[100];

Asm (NASM):

x dw 1 dup (?)

y db 1 dup (?)

z db 100 dup (?)

Page 5: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Operowanie na

tablicach

Offset x – zwraca

przesunięcie danej, której

nazwę podamy w nawiasach

Przykład 2 :

C:

y = x[i];

Asm:

mov bx,offset x

add bx,i

mov ax,[bx]

mov y,ax

Page 6: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Instrukcje

warunkowe

cop – wszelkie operacje

warunkowe

s1,s2 – dowolny kod do

wykonania w instrukcji

warunkowej

Przykład 3 :

C:

if(a cop b) {

//s1…

} else {

//s2…

}

Asm:

mov ax,a

cmp ax,b

cop l1

s1…

jmp l2

l1:

s2…

l2:

Page 7: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Tabela operacji warunkowych dostępnych w

asemblerze

Mnemonik Znaczenie Warunek skoku

JC / JNC Jump if Carry / if Not Carry CF=1 / CF=0

JZ / JNZ Jumf if Zero / if Not Zero ZF=1 / ZF=0

JG Jump if Greater (A>B) ZF=0 oraz SF=OF

JE Jump if Equal (A=B) ZF=1

JGE Jump if Greater or Equal (A>=B) SF=OF

JL Jump if Less (A<B) SF<>OF

JLE Jump if Less or Equal (A<=B) ZF=1 lub SF<>OF

JA Jump if Above CF=0 oraz ZF=0

JAE Jump if Above or Equal CF=0

JB Jump if Below CF=1

JBE Jump if Below or Equal CF=1 lub ZF=1

Page 8: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Pętla while

cop – wszelkie operacje

warunkowe

s1 – dowolny kod do

wykonania w pętli

Przykład 4 :

C:

while(a cop b) { //s1… Asm:

l1: mov ax,a cmp ax,b cop l2 s1…

jmp l1 l2:

Page 9: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Algorytmy sortowania

Insertion Sort – sortowanie przez wstawienie

Quick Sort

Page 10: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Insertion Sort + & -

Najprostszy algorytm sortowania

Złożoność czasowa n^2

Wydajny dla wstępnie posortowanych

Wydajny dla niewielkich zbiorów

Stabilny

Page 11: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Pseudokod

0. Insert_sort(A, n)

1. for i=2 to n :

2. klucz = A[i]

3. j = i - 1

4. while j>0 and A[j]>klucz:

5. A[j + 1] = A[j]

6. j = j - 1

7. A[j+1] = klucz

Page 12: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Insertion Sort

Page 13: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

DEMO TIME

Insertion Sort

Page 14: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Quick Sort

Popularny algorytm sortowania działający na zasadzie

dziel i zwyciężaj

Złożoność obliczeniowa n logn

Page 15: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Quick Sort - pseudokod

Page 16: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Quick Sort – How To

Page 17: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

DEMO TIME

Quick Sort

Page 18: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Porównanie algorytmów sortowania

Insertion Sort w asm Insertion Sort w C/C++

Czas wykonania 1.203s Czas wykonania 1.03s

Page 19: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Porównanie algorytmów sortowania

Quick Sort w asm Quick Sort w C/C++

Czas wykonania 0.015s Korzystamy z funkcji

qsort()

Czas wykonania: 0.047s

Std:sort() wykonywał się

ponad 0.109s

Page 20: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Porównanie algorytmów sortowania

Quick Sort, a Insert Sort dla tablicy składającej się z 20000 elementów (liczby typu int)

algorytm QuickSort jest znacznie szybszym rozwiązaniem.

Czas wykonania dla algorytmu przez wstawianie to ponad 1s!

Quick Sort tę samą tablicę sortuje w czasie 0.015s

Page 21: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Lista jednokierunkowa

Struktura danych służąca do reprezentacji zbiorów

dynamicznych.

Kolejne składniki struktury posiadają sekcję danych oraz

wskaźnik, przechowujący położenie początku kolejnej sekcji

danych w pamięci

Cecha charakterystyczna – bezpośredni dostęp posiadamy

tylko do pierwszego elementu

Page 22: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

LAST DEMO TIME

Lista jednokierunkowa

Page 23: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Podsumowanie

W niniejszej przezentacji przedstawione zostały

podstawowe oraz popularne algorytmy

Dokonano ich porównania pomiędzy językami wysokiego

oraz językami poziomu maszynowego

W większości przypadków algorytmy napisane w

asemblerze wykonywały się działać szybciej niż ich

odpowiedniki w językach wyższego poziomu

Page 24: Szymon Jagieła Bartłomiej Rupikorion.fis.agh.edu.pl/~swientek/asm/8_Jagiela_Rupik... · 2013-05-22 · Szymon Jagieła Bartłomiej Rupik. Plan prezentacji 1. Wstęp 2. Proste algorytmy

Dziękujemy za uwagę