Programowanie w asemblerze Środowiska 64-bitowe



Podobne dokumenty
Programowanie w asemblerze Środowiska 64-bitowe

CPU. Architektura FLAGS Bit: dr Paweł Kowalczyk; DPTNS, KFCS UŁ. SI 16 bit. 16 bit. 16 bit.

Materiały do wykładu. 7.Architekturax86. Marcin Peczarski. Instytut Informatyki Uniwersytet Warszawski

Procesory rodziny x86. Dariusz Chaberski

Programowanie Niskopoziomowe

Programowanie na poziomie sprzętu. Tryb chroniony cz. 1

Architektura komputerów

Architektura komputerów

Organizacja typowego mikroprocesora

Architektura komputerów

MMX i SSE. Zbigniew Koza. Wydział Fizyki i Astronomii Uniwersytet Wrocławski. Wrocław, 10 marca Zbigniew Koza (WFiA UWr) MMX i SSE 1 / 16

002 Opcode Strony projektu:

Rejestry procesora. Nazwa ilość bitów. AX 16 (accumulator) rejestr akumulatora. BX 16 (base) rejestr bazowy. CX 16 (count) rejestr licznika

Mikroinformatyka. Wielozadaniowość

Programowanie Niskopoziomowe

Wybrane zagadnienia elektroniki współczesnej

Architektura komputerów

Budowa wnętrza procesora x86

Architektura komputerów. Komputer Procesor Mikroprocesor koncepcja Johna von Neumanna

Programowanie niskopoziomowe

architektura komputerów w 1 1

ARCHITEKTURA PROCESORA,

RDZEŃ x86 x86 rodzina architektur (modeli programowych) procesorów firmy Intel, należących do kategorii CISC, stosowana w komputerach PC,

Zarządzanie pamięcią w systemie operacyjnym

Sprzęt i architektura komputerów

Układ sterowania, magistrale i organizacja pamięci. Dariusz Chaberski

Programowanie w asemblerze Wprowadzenie

Architektura Systemów Komputerowych. Jednostka ALU Przestrzeń adresowa Tryby adresowania

Architektura komputerów

Układ wykonawczy, instrukcje i adresowanie. Dariusz Chaberski

Architektura systemów komputerowych. Konstrukcja i zasada działania mikroprocesora

Schematy zarzadzania pamięcia

Mikroinformatyka. Tryb wirtualny

Ćwiczenie nr 4. Zasady kodowania podprogramów

Adresowanie. W trybie natychmiastowym pole adresowe zawiera bezpośrednio operand czyli daną dla rozkazu.

Wprowadzenie do Architektury komputerów. Asembler procesorów rodziny x86

Ćwiczenie nr 6. Programowanie mieszane

Programowanie w asemblerze Architektury równoległe

Mikroinformatyka. Mechanizmy ochrony pamięci

end start ; ustawienie punktu startu programu i koniec instrukcji w assemblerze.

Zadanie Zaobserwuj zachowanie procesora i stosu podczas wykonywania następujących programów

Ćwiczenie 3. Konwersja liczb binarnych

organizacja procesora 8086

Architektura procesora Intel Itanium (IA64) Paweł Pisarczyk Instytut Informatyki, Politechnika Warszawska

Sprzęt i architektura komputerów

Architektura komputerów. Asembler procesorów rodziny x86

Mikroprocesory rodziny INTEL 80x86

Programowanie Niskopoziomowe

Jak wiemy, wszystkich danych nie zmieścimy w pamięci. A nawet jeśli zmieścimy, to pozostaną tam tylko do najbliższego wyłączenia zasilania.

Architektura komputerów egzamin końcowy

Praktycznie całe zamieszanie dotyczące konwencji wywoływania funkcji kręci się w okół wskaźnika stosu.

Wydajność obliczeń a architektura procesorów. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Architektura Systemów Komputerowych, Wydział Informatyki, ZUT

Architektura Systemów Komputerowych. Rozwój architektury komputerów klasy PC

Sprzętowe wspomaganie pamięci wirtualnej

SOE Systemy Operacyjne Wykład 8 Pamięć wirtualna dr inż. Andrzej Wielgus

Asembler. Æwiczenia praktyczne

2 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.02 Rok akad. 2011/ / 24

Materiały do wykładu. 4. Mikroprocesor. Marcin Peczarski. Instytut Informatyki Uniwersytet Warszawski

Programowanie Niskopoziomowe

Przedmiot : Programowanie w języku wewnętrznym. Ćwiczenie nr 4

Architektura systemów komputerowych. Lista instrukcji procesora

PROGRAMOWANIE NISKOPOZIOMOWE. Systemy liczbowe. Pamięć PN.01. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/ / 24

Język asembler dla każdego

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

1. Asembler i wstawki asemblerowe w C

Metody Realizacji Języków Programowania

Podstawy obsługi komputerów. Budowa komputera. Podstawowe pojęcia

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Bibliografia: pl.wikipedia.org Historia i rodzaje procesorów w firmy Intel

3 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK SP.06 Rok akad. 2011/ / 22

Metody Realizacji Języków Programowania

Bibliografia: pl.wikipedia.org Historia i rodzaje procesorów w firmy Intel

Architektura Systemów Komputerowych

J. Duntemann Zrozumieć Assembler Leo J. Scanlon Assembler 8086/8088/80286 S. Kruk Programowanie w Języku Assembler

dr inż. Jarosław Forenc

Księgarnia PWN: Włodzimierz Stanisławski, Damian Raczyński - Programowanie systemowe mikroprocesorów rodziny x86

Procesor Intel 8086 model programisty. Arkadiusz Chrobot

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

Zarządzanie pamięcią operacyjną

Przerwania w architekturze mikrokontrolera X51

Zarządzanie zasobami pamięci

J. Ułasiewicz Komputerowe systemy sterowania 1. 1 Architektura PC Ogólna struktura systemu jednoprocesorowego

Wprowadzenie do architektury komputerów. Model programowy procesora i jego struktura Procesory CISC i RISC

Rozszerzalne kody operacji (przykład)

Wydajność obliczeń a architektura procesorów

Wykład 7. Zarządzanie pamięcią

Adam Kotynia, Łukasz Kowalczyk

Hardware mikrokontrolera X51

PROGRAMOWANIE NISKOPOZIOMOWE. Adresowanie pośrednie rejestrowe. Stos PN.04. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

Inżynieria wsteczna oraz znajdowanie i wykorzystywanie luk w aplikacjach natywnych na architekturach x86 i x86-64

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Programowanie niskopoziomowe

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

Zarządzanie pamięcią operacyjną

Programowanie w asemblerze Uruchamianie programów

WOJSKOWA AKADEMIA TECHNICZNA

Transkrypt:

Programowanie w asemblerze Środowiska 64-bitowe 24 listopada 2015

Nieco historii najnowszej Intel wraz z HP rozpoczynaja pracę nad procesorem 64-bitowym z wykorzystaniem technologii VLIW. Powstaje procesor Itanium o architekturze oznaczanej IA-64. AMD rozwija własny procesor 64-bitowy, będacy minimalnym (przynajmniej zewnętrznie) rozszerzeniem wersji 32-bitowej. Powstaje procesor Opteron (Athlon 64) o architekturze oznaczanej x86-64. Jakkolwiek Itanium jest bardziej ciekawe technologicznie, to sprzedaje się słabo (być może dlatego, że jest za drogie ;-) i występuje głównie w serwerach zastapiło tam HP. Intel klonuje architekturę AMD (od Pentium 4 Xeon): różne dziwne nazwy, np. EM64T, IA-32e.

Architektura x86-64 5 trybów pracy, z czego 3 to stare tryby 32-bitowe. Compatibility Mode do uruchamiania programów skompilowanych 32-bitowo w środowisku 64-bitowego systemu operacyjnego 64-bit Mode: pełny 64-bitowy. Application Binary Interface (ABI) dla Linuxa definiowany przez amd64.org.

Rejestry w x86-64 Ogólnego przeznaczenia 64-bitowe: RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, R8, R9, R10, R11, R12, R13, R14, R15 32-bitowe: EAX ESP oraz R8D, R9D, R10D, R11D, R12D, R13D, R14D, R15D 16-bitowe: AX SP oraz R8W, R9W, R10W, R11W, R12W, R13W, R14W, R15W 8-bitowe: AL DL, AH DH, SPL, BPL, SIL, DIL, R8B, R9B, R10B, R11B, R12B, R13B, R14B, R15B 16 128-bitowych rejestrów XMM (używane w SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, SSE5 i Advanced Vector Extensions) W trybie 64-bitowym 16 rejestrów 128-bitowych XMM0 XMM15

Operacje w x86-64 Wskaźniki (w rejestrach) zawsze 64-bitowe, ale tylko 48 bitów używane do adresów wirtualnych (co daje 256 TB), fizyczne adresy maks. 52-bitowe. Nowy tryb adresowy: względny do licznika rozkazów (RIP relative), używany już dla skoków itp. w IA-32. 32-bitowe przesunięcie (ze znakiem). Ułatwia generowanie Position Independent Code (PIC). Operacje 8- i 16-bitowe nie modyfikuja starszej części rejestru. Operacje 32-bitowe zeruja starsza część rejestru (pewnie żeby mieć wskaźniki 32- i 64-bitowe w trybach mieszanych), na przykład mov rax,100 oraz mov eax,100 to to samo. Prefiks REX żeby obsługiwać argumenty 64-bitowo.

Segmentacja w x86-64 CS jest używany tylko dla określenia poziomu ochrony kodu, adres bazowy zawsze 0, brak kontroli rozmiaru (limit). DS, ES, SS: ich zawartość jest ignorowana, wszystkie trzy utożsamiane z CS FS, GS używane tylko dla określenia adresu bazowego segmentu (potrzebne dla MS Windows)

Konwencje użycia rejestrów (ABI) Działa zarówno SYSCALL jaki i INT 0x80, ale inaczej. Dla instrukcji SYSCALL numer usługi w EAX, kolejne parametry w RDI, RSI, RDX, R10, R8, R9. Numery usług podane w /usr/src/linux/include/asm-x86_64/unistd.h. Wynik w RAX i RDX.

Konwencje użycia rejestrów (ABI) Wywołania funkcji (CALL): Argumenty w RDI, RSI, RDX, RCX, R8, R9 (liczby całkowite i wskaźniki). Można używać rejestrów czastkowych, jeśli argument o mniejszym rozmiarze. Argumenty zmiennopozycyjne w XMM0, XMM1, XMM2,..., XMM7. Na stosie (gdy więcej niż 6 pierwszego rodzaju lub 8 drugiego) zawsze pełny rozmiar (64 bity), ale można korzystać z dolnego kawałka (bo little-endian). Wartość funkcji zwracana w RAX (liczby całkowite i wskaźniki) albo w XMM0 (liczby zmiennopozycyjne).

Konwencje użycia rejestrów (ABI) Wywołania funkcji (CALL): W treści funkcji RSP zwykle ustalone, nie korzysta się z RBP do ramek. W GCC wyrównywanie stosu do 128 bitów przy wywołaniu funkcji ułatwia wrzucanie rejestrów FPU i SSE na stos. Można to robić samodzielnie w asemblerze and rsp, 15 Należy zachować RBX, RBP, ESP, R12, R13, R14, R15. Powyżej bieżacego wierzchołka stosu czerwona strefa (red zone) 128 bajtów dostępnych dla programów.

Problemy W x86-64 w trybie 64-bitowym segmenty nie działaja, jedynie stronicowanie. Ale stronicowanie nie rozróżnia poziomów 0 2 (Po co? Sa segmenty...). System operacyjny maszyn wirtualnych musi więc być na poziomie 3, a wtedy nie jest chroniony przed aplikacjami, albo na poziomie 0.

Intel/HP IA-64 (Itanium) 128 rejestrów integer (64-bitowe) 128 rejestrów floating-point (82-bitowe: 17/64) f0=0.0 f1=1.0 64 rejestry predykatów (1-bitowe), p0=1 8 branch registers (64-bitowe)??? 128 application registers???

Intel/HP IA-64 (Itanium) Część rejestrów każdego rodzaju rotating (np. r32 r127). Rodzaj stosu. Instruction Bundle: 3 41-bitowe sloty na instrukcje + 5 bitów na template.