szymon jagieła bartłomiej rupikorion.fis.agh.edu.pl/~swientek/asm/8_jagiela_rupik... ·...

Post on 12-Jun-2020

5 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Podstawowe algorytmy w asemblerze

Szymon Jagieła

Bartłomiej Rupik

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

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

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 (?)

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

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:

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

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:

Algorytmy sortowania

Insertion Sort – sortowanie przez wstawienie

Quick Sort

Insertion Sort + & -

Najprostszy algorytm sortowania

Złożoność czasowa n^2

Wydajny dla wstępnie posortowanych

Wydajny dla niewielkich zbiorów

Stabilny

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

Insertion Sort

DEMO TIME

Insertion Sort

Quick Sort

Popularny algorytm sortowania działający na zasadzie

dziel i zwyciężaj

Złożoność obliczeniowa n logn

Quick Sort - pseudokod

Quick Sort – How To

DEMO TIME

Quick Sort

Porównanie algorytmów sortowania

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

Czas wykonania 1.203s Czas wykonania 1.03s

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

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

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

LAST DEMO TIME

Lista jednokierunkowa

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

Dziękujemy za uwagę

top related