Architektura komputerów

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

PROGRAMOWANIE NISKOPOZIOMOWE

Architektura komputerów

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

Programowanie Niskopoziomowe

Programowanie w asemblerze Środowiska 64-bitowe

Procesory rodziny x86. Dariusz Chaberski

Programowanie niskopoziomowe

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

Mikrokontroler ATmega32. Język symboliczny

Architektura komputerów

PODSTAWOWE ELEMENTY ASEMBLERA TRYBY ADRESOWANIA. OPERATORY ASEMBLERA

Programowanie Niskopoziomowe

Architektura komputerów

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

Programowanie w asemblerze Środowiska 64-bitowe

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

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

petla:... ; etykieta określa adres w pamięci kodu (docelowe miejsce skoku) DJNZ R7, petla

Programowanie niskopoziomowe

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

Wstęp do assemblera MA51

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

002 Opcode Strony projektu:

Sprzęt i architektura komputerów

Sprzęt i architektura komputerów

Ćwiczenie nr 6. Programowanie mieszane

Pwn-ing Linux x86/x64 Zadania kwalifikacyjne

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.

Organizacja typowego mikroprocesora

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

Język asembler dla każdego

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

organizacja procesora 8086

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Wstęp. do języka C na procesor (kompilator RC51)

Procesor Intel 8086 model programisty. Arkadiusz Chrobot

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

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

Architektura Systemów Komputerowych, Wydział Informatyki, ZUT

Programowanie hybrydowe C (C++) - assembler. MS Visual Studio Inline Assembler

Architektura komputerów. Asembler procesorów rodziny x86

Programowanie w asemblerze Uruchamianie programów

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Procesor Intel 8086 model programisty. Arkadiusz Chrobot

Adam Kotynia, Łukasz Kowalczyk

Architektura komputerów

Lista instrukcji mikroprocesora Programowanie w assemblerze

Układ wykonawczy, instrukcje i adresowanie. Dariusz Chaberski

Cel wykładu. Przedstawienie działania exploitów u podstaw na przykładzie stack overflow.

Podstawy programowania skrót z wykładów:

Architektura Systemów Komputerowych

Architektura Systemów Komputerowych

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

Metody Realizacji Języków Programowania

UTK ARCHITEKTURA PROCESORÓW 80386/ Budowa procesora Struktura wewnętrzna logiczna procesora 80386

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

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

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

1. Pobrać plik masm.zip (Macro Assembler 6.15 & Segmented Executable Linker 5.60) (

Podstawy Programowania. Wykład 1

Architektura komputerów

Kompilator języka C na procesor 8051 RC51 implementacja

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

Architektura systemów komputerowych. Lista instrukcji procesora

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

1 Podstawy c++ w pigułce.

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Programowanie strukturalne i obiektowe

Optymalizacja szelkodów w Linuksie

PROGRAMOWANIE. Język Asembler

Języki i metody programowania. Omówienie języków C, C++ i Java

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

1 Podstawy c++ w pigułce.

Języki i metodyka programowania. Wprowadzenie do języka C

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

Asembler. Æwiczenia praktyczne

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

Ćwiczenie 1. Architektura von Neumanna model programowy komputera

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Ćwiczenie 3. Konwersja liczb binarnych

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Informacje organizacyjne

Metody Realizacji Języków Programowania

Programowanie Niskopoziomowe

1. Asembler i wstawki asemblerowe w C

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

Wybrane zagadnienia elektroniki współczesnej

Liczniki, rejestry lab. 08 Mikrokontrolery WSTĘP

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

Sterowanie pracą programu

Struktura programu w asemblerze mikrokontrolera 8051

Kurs Zaawansowany S7. Spis treści. Dzień 1

Błędy łańcuchów formatujących (format string) by h07

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

Sprzętowe wspomaganie pamięci wirtualnej

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

1. Dyrektywy asemblerowe

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Transkrypt:

Architektura komputerów Wykład 6 Jan Kazimirski 1

Architektura x86 2

Środowisko wykonawcze x86 (32-bit) Przestrzeń adresowa Liniowa przestrzeń adresowa do 4 GB Fizyczna przestrzeń adresowa do 64 GB Rejestry podstawowe 8 rejestrów ogólnego użytku 6 rejestrów segmentowych rejestr znaczników (EFLAGS) licznik rozkazów (EIP) 3

Środowisko wykonawcze x86 (32-bit) c.d. Rejestry FPU 8 rejestrów danych (80-bitowe) rejestry kontrolne Rejestry MMX 8 rejestrów danych 64-bitowych 8 rejestrów danych 128-bitowych 4

Środowisko wykonawcze x86 (64-bit) Przestrzeń adresowa Liniowa przestrzeń adresowa 2 64 bajtów Fizyczna przestrzeń adresowa 2 40 bajtów Rejestry podstawowe 16 rejestrów ogólnego użytku (64-bitowe) 6 rejestrów segmentowych (64-bitowe) 64-bitowy rejestr znaczników (RFLAGS) 64-bitowy licznik rozkazów (RIP) 5

Środowisko wykonawcze x86 (64-bit) c.d. Rejestry FPU 8 rejestrów danych (80-bitowe) rejestry kontrolne Rejestry MMX 8 rejestrów danych 64-bitowych 16 rejestrów danych 128-bitowych 6

Rejestry ogólnego użytku (32-bit) Rejestry: EAX, EBX, ECX, EDX, ESI, EDI, EBP, and ESP. Rejestry mogą być dowolnie używane ale niektóre operacje wykorzystują specyficzne rejestry: EAX EBX ECX EDX ESI EDI ESP EBP - akumulator (obliczenia) - wskaźnik danych (z rejestrem segmentowym DS) - licznik pętli - używany w operacjach we/wy - wskaźnik źródła danych (przesłania blokowe) - wskaźnik celu danych (przesłania blokowe) - wskaźnik stosu - dodatkowy wskaźnik danych na stosie 7

Rejestry ogólnego użytku (32-bit) c.d. Rejestry 32-bitowe mogą być traktowane jako rejestry 16-bitowe (16 mniej znaczących bitów) o nazwach odpowiednio AX, BX, CX, DX, BP, SI, DI, and SP 16-bitowe rejestry AX, BX, CX, DX mogą być traktowane jako pary rejestrów 8-bitowych AH/AL, BH/BL, CH/CL, DH/DL. 8

Rejestry ogólnego użytku (64-bit) Dostępne wszystkie rejestry trybu 32-bit Rejestry można też używać jako 64-bitowe. mają wtedy nazwy: RAX, RBX, RCX, RDX, RDI, RSI, RBP, RSP. Osiem nowych rejestrów, które mogą być używane jako 32-bitowe (R8D R15D) lub 64-bitowe (R8-R15) Istnieją pewne ograniczenia w dostępie do rejestrów w trybach 16- i 8-bitowym 9

Rejestry segmentowe (32-bit) Rejestry 16-bitowe CS, DS, SS, ES, FS, GS Stosowane w modelu pamięci opartym o segmentację: CS - segment kodu DS - segment danych SS - segment stosu ES, FS, GS - dodatkowe segmenty danych 10

Rejestry segmentowe (64-bit) Tryb 64-bit zwykle stosuje płaski model pamięci (adresy 64-bitowe). Rejestry mapują segmenty na liniową pamięć adresową (mają wartości 0). Mogą być wykorzystywane przez niektóre operacje. 11

Rejestr znaczników Rejestr znaczników EFLAGS (32-bit), RFLAGS (64-bit) przechowuje m.in. flagi wskazujące na rezultat wykonanych operacji. Np.: CF (bit 0) bit przeniesienia PF (bit 2) bit parzystości ZF (bit 6) bit zera SF (bit 7) bit znaku (1 minus) Inne flagi określają tryby pracy CPU, obsługi przerwań i inne. 12

Assembler i Linux 13

Assemblery pod Linuxem GAS Gnu Assembler (składnia AT&T) NASM Netwide Assembler (składnia Intela) YASM FASM Flat Assembler HLA High Level Assembly Language 14

Składnia Składnia AT & T Stosowana na platformach UNIX-owych Wcześniej jedyna dostępna dla assemblera GAS Składnia Intela Używana przez firmę Intel w dokumentacji architektury x86 Używana przez assemblery DOS/Windows i Linux (NASM) 15

Assembler NASM Assembler 80x86 i x86-64. Wspiera liczne formaty wyjściowe, m.in. elf32, elf64 (linux), obj, win32, win64 (DOS/Windows) Stosuje składnię assemblera firmy Intel Wspiera większość obecnych rozszerzeń architektury x86 (m. in. MMX, SSEn) Dokumentacja: http://www.nasm.us/xdoc/2.09.03/html/nasmdoc0.html 16

Praca z NASM Przygotowanie programu źródłowego Kompilacja do pliku obiektowego (binarnego) Konsolidacja (linkowanie) do pliku wykonywalnego. Uruchomienie programu wykonywalnego 17

Plik źródłowy Zwykły plik tekstowy Rozszerzenie.asm lub.s (stosowane przez GNU) Dowolny edytor: gedit, kate, vim 18

Kompilacja Kompilacja w środowisku 32-bitowym nasm -f elf32 <plik_źródłowy> Kompilacja w środowisku 64-bitowym nasm -f elf64 <plik_źródłowy> Rezultat: plik binarny (obiektowy) -.o 19

Konsolidacja Środowisko natywne ld <plik_obj> Konsolidacja 32-bitowego pliku binarnego w środowisku 64-bitowym ld -m elf_i386 <plik_obj> Rezultat: plik wykonywalny o domyślnej nazwie a.out. 20

Flagi kompilatora i konsolidatora Przydatne flagi kompilatora: -f <format> określa format pliku binarnego -l <plik> generuje listing programu -o <nazwa> określa nazwę pliku binarnego Przydatne flagi konsolidatora -o <nazwa> nazwa pliku wykonywalnego 21

Hello world segment.data msg db 'Hello World!!',0x0a ; text to display segment.text global _start _start: mov eax, 4 ; syscall code 4 (write) mov ebx, 1 ; file descriptor (stdout) mov ecx, msg ; buffer address mov edx, 14 ; buffer size int 0x80 ; do syscall mov eax, 1 ; syscall code 1 (exit) mov ebx, 5 ; exit status int 0x80 ; syscall 1 - exit program 22

NASM - składnia Format linii kodu źródłowego: etykieta: instrukcja operandy ; komentarz Większość pól jest opcjonalna (zależnie od instrukcji). Znak \ na końcu linii oznacza kontynuację w linii następnej. 23

NASM składnia c.d. Dodatkowe białe znaki (spacje,tabulacje) w linii są ignorowane. Znak : po nazwie etykiety jest opcjonalny. Etykieta może składać się z dowolnych znaków, zaczyna się od litery. Etykieta o nazwie zastrzeżonej (np. eax) można poprzedzić znakiem $. 24

NASM składnia c.d. Etykieta zaczynająca się od. jest etykietą lokalną (przypisaną do poprzedniej etykiety globalnej) Pole instrukcji może zawierać kod dowolnej instrukcji x86. Operandy mogą mieć różne formaty: nazwy rejestrów, adresy, stałe lub wyrażenia Pole instrukcji może zawierać pseudo-instrukcje asemblera. 25

NASM - pseudo-instrukcje Deklaracje zainicjowanych danych db dana jedno-bajtowa dw słowo dwu-bajtowe dd słowo 4-bajtowe dq słowo 8-bajtowe Przykłady: db 0x55 ; liczba 0x55 db 0x55,0x56,0x57 ; trzy kolejne liczby db 'a',0x55 ; stała znakowa i liczba db 'hello',13,10,'$' ; łańcuch znaków dw 0x1234 ; słowo (0x34 0x12) 26

NASM - pseudo-instrukcje Deklaracje niezainicjowanych obszarów pamięci: resb - jeden bajt resw - słowo 2-bajtowe resd - słowo 4-bajtowe resq - słowo 8-bajtowe Przykłady: resb 64 ; rezerwuje 64 bajty resw 1 ; rezerwuje 1 słowo 2-bajtowe resq 10 ; rezerwuje 10 słów 8-bajtowych 27

NASM - pseudo-instrukcje Włączanie binarnych danych z pliku incbin nazwa Aby ominąć pierwsze N bajtów pliku można użyć składni: incbin nazwa,n Aby ominąć N bajtów i wczytać tylko M kolejnych bajtów można użyć: incbin nazwa,n,m 28

NASM - pseudo-instrukcje Deklaracja stałych equ. start: equ 0xFF Powtarzanie instrukcji times. zerobuf: times 64 db 0 times 100 movsb 29

Adresowanie efektywne Adres efektywny to wyrażenie w nawiasach [] Przykłady: wordvar dw 123 mov ax,[wordvar] mov ax,[wordvar+1] mov mov eax,[ebx*2+ecx+offset] ax,[bp+di+8] 30

Stałe Stałe liczbowe, m.in. dziesiętne, heksadecymalne, binarne. Przykłady: 100, 100d, 0xc8, 11011111b Stałe znakowe (rozmiar do 8 bajtów) otoczone znakami ' lub Stałe tekstowe j.w. ale bez ograniczenia. Inne (liczby zmiennoprzecinkowe, kodowane BCD itp) 31

Wyrażenia Składnia wyrażeń i operatory odpowiadają składni C Znak $ oznacza aktualną pozycję w kodzie. Operatory: logiczne (,&,^,!) przesunięcia (>>,<<) arytmetyczne (+,-,*,/,%) inne... 32

Makrodefinicje Preprocesor NASM-a zawiera bardzo rozbudowany preprocesor. Umożliwia on m.in. definiowanie prostych makro-definicji makro-definicji z parametrami włączanie plików kompilacja warunkowa makro-definicje obsługujące łańcuchy znakowe wiele innych... 33

Makrodefinicje - przykłady %define ctrl 0x1F & ; proste makro %define foo bar ; zastąpienie nazwy %define b(x) 2*x ; makro z parametrem %strlen charcnt 'my string' %include "macros.mac" ; długość tekstu ; włączenie pliku %ifndef MACROS_MAC ; włączanie z zabezpieczeniem %define MACROS_MAC ; przed wielokrotnym włączeniem (...) ; za pomocą kompilacji warunkowej %endif 34

Dyrektywy assemblera bits typ generowanego kodu (16-, 32-bity itd.) default zmienia domyślne ustawienia NASM-a segment definicja segmentów programu absolute generowanie adresów absolutnych extern importowanie symboli z innych modułów global eksportowanie symboli do innych modułów common definiowanie wspólnego obszaru danych globalnych cpu typ procesora (lista rozkazów) float opcje FPU 35