architektura komputerów - jan kazimirskijankazimirski.pl/files/5akw.08.pdfarchitektura komputerów...

35
1 Architektura komputerów Jan Kazimirski Architektura Architektura komputerów komputerów Wykład 8 Wykład 8 Jan Kazimirski

Upload: others

Post on 22-Mar-2020

8 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

1

Architektura komputerów Jan Kazimirski

Architektura Architektura komputerówkomputerów

Wykład 8Wykład 8

Jan Kazimirski

Page 2: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

2

Architektura komputerów Jan Kazimirski

Assembler Assembler x86x86

Page 3: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

3

Architektura komputerów Jan Kazimirski

Podstawowe instrukcje x86Podstawowe instrukcje x86

● Instrukcje transferu danych● Arytmetyka binarna i dziesiętna● Instrukcje logiczne● Instrukcje sterujące wykonaniem programu● Operacje blokowe● Inne

Page 4: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

Instrukcje transferu danychInstrukcje transferu danych

● Prześlij dane - MOV– Realizuje przesłania: rejestr-rejestr, rejestr-

pamięć, pamięć-rejestr, oraz załadowanie danej natychmiastowej do rejestru

● Prześlij dane warunkowo– Zbiór instrukcji realizujących przesłanie jeżeli

spełniony jest warunek– Przykład: CMOVC – przenieś jeśli nastąpiło

przeniesienie

Page 5: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

Instrukcje transferu danychInstrukcje transferu danych

● Zamień zawartość operandów - XCHG– Zamienia miejscami zawartości rejestrów lub

rejestru i pamięci● „Porównaj i zamień” - CMPXCHG

– Może być stosowana jako atomowa instrukcja typu „test and set” (z przedrostkiem LOCK)

Page 6: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

Instrukcje transferu danychInstrukcje transferu danych

● Umieść operand na stosie – PUSH.– Umieszcza na stosie operand – rejestr, daną z

pamięci lub natychmiastową.● Zdejmij ze stosu – POP.

– Zdejmuje wartość ze stosu i umieszcza ją w rejestrze lub pamięci.

● Umieszczanie lub zdejmowanie ze stosu zawartości wszystkich rejestrów – instrukcje PUSHA i POPA.

Page 7: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

Instrukcje transferu danychInstrukcje transferu danych

● Instrukcje konwersji– Dokonują konwersji rozszerzającej bajt->słowo,

słowo->podwójne słowo itd.– Prawidłowo obsługują liczby ujemne (kod U2)– Przykład: CWD – konwertuj słowo na podwójne

słowo

Page 8: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

Arytmetyka binarna Arytmetyka binarna

● Dodawanie i odejmowanie– ADD – dodaj operand źródłowy do docelowego– ADC – dodaj z przeniesieniem– INC – zwiększ o jeden wartość operandu– SUB – odejmij operand źródłowy od docelowego – SBB – odejmij z przeniesieniem– DEC – zmniejsz o jeden wartość operandu

Page 9: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

Arytmetyka binarna Arytmetyka binarna

● Porównanie i negacja– CMP – porównaj operandy i ustaw flagi.– NEG – zmień znak operandu na przeciwny.

● Mnożenie– MUL – mnożenie liczb bez znaku.– IMUL – mnożenie liczb ze znakiem.– Używa akumulatora.

Page 10: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

Arytmetyka binarna Arytmetyka binarna

● Dzielenie– DIV – dzielenie liczb bez znaku– IDIV – dzielenie liczb ze znakiem– Zwraca osobno wynik dzielenia i resztę z dzielenia– Dzielenie przez zero powoduje wygenerowanie

wyjątku

Page 11: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

Arytmetyka dziesiętna Arytmetyka dziesiętna

● Arytmetyka na liczbach zapisanych w kodzie BCD.

● Wykonywana za pomocą instrukcji operacji binarnych połączonych z dodatkowymi instrukcjami konwertującymi dane między reprezentacją binarną a kodem BCD.

Page 12: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

Instrukcje logiczneInstrukcje logiczne

● Operatory logiczne – AND, OR, XOR– Dopuszczalne kombinacje operandów: rejestr -

rejestr, rejestr - pamięć, rejestr - dana natychmiastowa, pamięć – dana natychmiastowa

● Negacja logiczna – NOT– Operandem może być rejestr lub pamięć

Page 13: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

Przesunięcia i rotacjePrzesunięcia i rotacje

● Przesunięcia bitowe– SHR – przesunięcie logiczne w prawo– SHL – przesunięcie logiczne w lewo

● Rotacje bitowe– ROR – rotacja w prawo– ROL – rotacja w lewo

Page 14: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

Operacje na bitachOperacje na bitach

● Zestaw instrukcji operujących na poszczególnych bitach danych

– Ustawianie poszczególnych bitów– Zerowanie poszczególnych bitów– Wyszukiwanie ustawionego bitu– Warunkowe ustawianie bitów– Testowanie poszczególnych bitów

Page 15: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

Instrukcje sterujące wykonaniem Instrukcje sterujące wykonaniem programuprogramu

● Instrukcja skoku bezwarunkowego – JMP– Przenosi sterowanie do nowej pozycji w pamięci– Operandem może być dana natychmiastowa,

rejestr lub adres w pamięci– Adres skoku może być względny (wyliczany na

podstawie aktualnej pozycji) lub bezwzględny.

Page 16: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

Instrukcje sterujące wykonaniem Instrukcje sterujące wykonaniem programuprogramu

● Wywołanie procedury – CALL– Tzw. „skok ze śladem” - instrukcja skoku z

zachowaniem na stosie adresu następnej instrukcji

– Sposoby wywołania są takie same jak JMP● Powrót z procedury – RET

– Instrukcja pobiera adres ze stosu (umieszczony tam przez CALL) i wykonuje skok do tego adresu.

Page 17: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

Instrukcje sterujące wykonaniem Instrukcje sterujące wykonaniem programuprogramu

● Skoki warunkowe– Zestaw instrukcji odpowiadających instrukcji JMP

ale realizujących skok tylko w przypadku spełnionego warunku.

– Przykłady:● JE – skocz jeśli równe● JNE – skocz jeśli nierówne● JZ – skocz jeśli zero

Page 18: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

Instrukcje sterujące wykonaniem Instrukcje sterujące wykonaniem programuprogramu

● Instrukcja pętli – LOOP– Pozwala zrealizować pętlę sterowaną zawartością

rejestru ECX.– Instrukcja sprawdza zawartość ECX i jeżeli jest on

większy od zera to zmniejsza go o 1 i wykonuje skok do podanego adresu.

Page 19: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

Operacje blokoweOperacje blokowe

● Zestaw instrukcji pozwalających na operacje na blokach danych.

● Podstawowe operacje:– MOVS – kopiuj blok danych– CMPS – porównaj blok danych– SCAS – szukaj w bloku danych– LODS – wczytaj blok danych– STOS – zapisz blok danych

Page 20: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

Operacje blokowe Operacje blokowe

● Wersje dla różnych rozmiarów danych, np. dla MOVS – MOVSB (operuje na bajtach), MOVSW (operuje na słowach) itd.

● Korzystają z rejestrów ESI i EDI do adresowania adresów źródłowego i docelowego (z automatyczną inkrementacją/dekrementacją)

● Flaga DF określa kierunek (zwiększanie lub zmniejszanie adresów).

Page 21: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

Operacje blokowe Operacje blokowe

● Dodatkowe przedrostki pozwalają powtarzać operację określoną liczbę razy

– REP – powtarzaj dopóki ECX <> 0– REPE, REPZ, REPNE, REPNZ – powtarzaj

dopóki ECX <> 0 i spełniony warunek.– Wersje REP z dodatkowym warunkiem

zakończenia stosowane są do operacji CMPS i SCAS.

Page 22: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

InneInne

● Manipulowanie bitami rejestru znaczników– Ustawianie lub zerowanie poszczególnych flag

rejestru znaczników (bity przeniesienia i kierunku pętli)

– Przykłady:● STC – ustaw bit przeniesienia● CLC – zeruj bit przeniesienia● CMC – neguj bit przeniesienia● STD – ustaw bit kierunku● ...

Page 23: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

InneInne

● Manipulowanie rejestrem znaczników– Nie wszystkie flagi rejestru znaczników można

modyfikować za pomocą osobnych instrukcji– Flagi niedostępne bezpośrednio można

modyfikować za pośrednictwem akumulatora i instrukcji LAHF (ładuje flagi do AH) i SAHF (ustawia flagi na podstawie AH)

– Flagami można też manipulować za pomocą stosu i instrukcji PUSF i POPF.

Page 24: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

InneInne

● Wsparcie dla procedur języków wysokiego poziomu: ENTER, LEAVE

– ENTER – tworzy tzw. „ramkę stosu” rezerwując na stosie miejsce dla lokalnych zmiennych funkcji. Wywoływana przy wywołaniu funkcji

– LEAVE – likwiduje „ramkę stosu” utworzoną wcześniej przez ENTER. Wywoływana przy wyjściu z funkcji (return).

Page 25: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

InneInne

● LEA – Załadowanie adresu efektywnego– Pozwala załadować adres operandu do rejestru– Wykorzystywana do wskazywania operandów

przy operacjach blokowych ● NOP – Operacja „pusta”

– Nie robi nic poza zwiększeniem wartości licznika instrukcji

Page 26: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

InneInne

● Instrukcje wejścia wyjścia:– IN – pobierz daną z portu we/wy– OUT – wyślij daną do portu we/wy– INSB/INSW/INSD – pobranie blokowe (z REP)– OUTSB/OUTSW/OUTSD – wysłanie blokowe (z

REP)

Page 27: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

Architektura komputerów Jan Kazimirski

InneInne

● Obsługa przerwań programowych– INT – wywołanie przerwania o określonym

numerze– IRET – powrót z przerwania– Przerwanie nr 3 (pułapka debuggera) ma

specjalny 1-bajtowy rozkaz – pozwala to wstawić pułapkę zamiast dowolnej instrukcji.

Page 28: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

28

Architektura komputerów Jan Kazimirski

Anatomia programu Anatomia programu

● Program assemblera składa się z sekcji (segmentów).

● Model ten jest pozostałością po segmentowym modelu pamięci.

● Podstawowe sekcje:– .text – segment kodu– .data – segment danych– .bss – segment danych zmiennych

Page 29: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

29

Architektura komputerów Jan Kazimirski

Anatomia programu c.d.Anatomia programu c.d.● Segment .text

– Kod programu (wykonywane instrukcje)– Status: wykonywalny, tylko do odczytu

● Segment .data– Zainicjalizowane dane programu– Status: niewykonywalny

● Segment .bss– Niezainicjalizowane dane programu– Status: niewykonywalny

Page 30: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

30

Architektura komputerów Jan Kazimirski

Anatomia programu c.d.Anatomia programu c.d.● Punkt startowy programu – symbol _start● Dyrektywa assemblera global eksportuje symbol

dla programu łączącego (linkera).global _start

● Etykieta _start wskazuje na pierwszą wykonywaną instrukcję programu

Page 31: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

31

Architektura komputerów Jan Kazimirski

Dygresja – analiza pliku .oDygresja – analiza pliku .o

● Polecenie file – podstawowe informacje o pliku.Przykład:

file ex01.o ex01.o: ELF 64-bit LSB relocatable, x86-64, version

1 (SYSV), not stripped

– Informacja o formacie pliku obiektowego (binarnego)

– Plik zawiera tablicę symboli

● Tablicę symboli można usunąć (po konsolidacji!) poleceniem strip

Page 32: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

32

Architektura komputerów Jan Kazimirski

Polecenie objdumpPolecenie objdump

● Polecenie objdump pozwala na dokładną analizę pliku obiektowego (binarnego)

● Duża liczba opcji – przydatne opcje:– -t – wyświetla tablicę symboli – -d – dokonuje deasemblacji kodu programu

(tłumaczenia z kodu maszynowego na rozkazy asemblera)

Page 33: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

33

Architektura komputerów Jan Kazimirski

Polecenie objdump c.d.Polecenie objdump c.d.

objdump -t ex01.oex01.o: file format elf64-x86-64

SYMBOL TABLE:0000000000000000 l df *ABS*0000000000000000 ex01.asm0000000000000000 l d .data 0000000000000000 .data0000000000000000 l d .text 0000000000000000 .text0000000000000000 l .data 0000000000000000 msg0000000000000000 g .text 0000000000000000 _start

Page 34: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

34

Architektura komputerów Jan Kazimirski

Polecenie objdump c.d.Polecenie objdump c.d.

objdump -d ex01.oex01.o: file format elf64-x86-64

Disassembly of section .text:

0000000000000000 <_start>: 0: b8 04 00 00 00 mov $0x4,%eax 5: bb 01 00 00 00 mov $0x1,%ebx a: b9 00 00 00 00 mov $0x0,%ecx f: ba 0e 00 00 00 mov $0xe,%edx 14: cd 80 int $0x80 16: b8 01 00 00 00 mov $0x1,%eax 1b: bb 05 00 00 00 mov $0x5,%ebx 20: cd 80 int $0x80

Page 35: Architektura komputerów - Jan Kazimirskijankazimirski.pl/files/5AKW.08.pdfArchitektura komputerów Jan Kazimirski Instrukcje sterujące wykonaniem programu Wywołanie procedury –

35

Architektura komputerów Jan Kazimirski

PodsumowaniePodsumowanie

● Podstawowe instrukcje asemblera x86● Anatomia programu napisanego w assemblerze

x86● Analiza pliku obiektowego (binarnego) .o