architektura komputerów - jan kazimirskijankazimirski.pl/files/5akw.08.pdfarchitektura komputerów...
TRANSCRIPT
1
Architektura komputerów Jan Kazimirski
Architektura Architektura komputerówkomputerów
Wykład 8Wykład 8
Jan Kazimirski
2
Architektura komputerów Jan Kazimirski
Assembler Assembler x86x86
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
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
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)
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.
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
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
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.
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
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.
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ęć
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
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
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.
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.
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
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.
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
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).
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.
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● ...
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.
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).
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
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)
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.
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
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
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
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
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)
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
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
35
Architektura komputerów Jan Kazimirski
PodsumowaniePodsumowanie
● Podstawowe instrukcje asemblera x86● Anatomia programu napisanego w assemblerze
x86● Analiza pliku obiektowego (binarnego) .o