Wykład 8 - Prezentacja

Transkrypt

Wykład 8 - Prezentacja
Architektura komputerów
Jan Kazimirski
Architektura
komputerów
Wykład 8
Jan Kazimirski
1
Architektura komputerów
Jan Kazimirski
Assembler
x86
2
Architektura komputerów
Jan Kazimirski
Podstawowe instrukcje x86
●
Instrukcje transferu danych
●
Arytmetyka binarna i dziesiętna
●
Instrukcje logiczne
●
Instrukcje sterujące wykonaniem programu
●
Operacje blokowe
●
Inne
3
Architektura komputerów
Jan Kazimirski
Instrukcje transferu danych
●
Prześlij dane - MOV
–
●
Realizuje przesłania: rejestr-rejestr, rejestrpamięć, 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 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 danych
●
Umieść operand na stosie – PUSH.
–
●
Zdejmij ze stosu – POP.
–
●
Umieszcza na stosie operand – rejestr, daną z
pamięci lub natychmiastową.
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 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
●
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
●
●
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
●
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 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 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 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 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
programu
●
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
programu
●
●
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
programu
●
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
programu
●
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 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
●
●
●
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
●
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
Inne
●
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
Inne
●
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
Inne
●
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
Inne
●
●
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
Inne
●
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
Inne
●
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.
Architektura komputerów
Jan Kazimirski
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
28
Architektura komputerów
Jan Kazimirski
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
29
Architektura komputerów
Jan Kazimirski
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
30
Architektura komputerów
Jan Kazimirski
Dygresja – 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
31
Architektura komputerów
Jan Kazimirski
Polecenie 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)
32
Architektura komputerów
Jan Kazimirski
Polecenie objdump c.d.
objdump -t ex01.o
ex01.o:
file format elf64-x86-64
SYMBOL TABLE:
0000000000000000 l df *ABS* 0000000000000000 ex01.asm
0000000000000000 l d .data 0000000000000000 .data
0000000000000000 l d .text 0000000000000000 .text
0000000000000000 l
.data 0000000000000000 msg
0000000000000000 g
.text 0000000000000000 _start
33
Architektura komputerów
Jan Kazimirski
Polecenie objdump c.d.
objdump -d ex01.o
ex01.o:
file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <_start>:
0:
b8 04 00 00 00
mov
5:
bb 01 00 00 00
mov
a:
b9 00 00 00 00
mov
f:
ba 0e 00 00 00
mov
14:
cd 80
int
16:
b8 01 00 00 00
mov
1b:
bb 05 00 00 00
mov
20:
cd 80
int
$0x4,%eax
$0x1,%ebx
$0x0,%ecx
$0xe,%edx
$0x80
$0x1,%eax
$0x5,%ebx
$0x80
34
Architektura komputerów
Jan Kazimirski
Podsumowanie
●
●
●
Podstawowe instrukcje asemblera x86
Anatomia programu napisanego w assemblerze
x86
Analiza pliku obiektowego (binarnego) .o
35