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



Podobne dokumenty
PROGRAMOWANIE NISKOPOZIOMOWE

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

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

PROGRAMOWANIE NISKOPOZIOMOWE. Struktury w C. Przykład struktury PN.06. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

Programowanie Niskopoziomowe

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

Ćwiczenie nr 6. Programowanie mieszane

PROGRAMOWANIE NISKOPOZIOMOWE

Architektura komputerów

Ćwiczenie 3. Konwersja liczb binarnych

Programowanie niskopoziomowe

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

Architektura komputerów

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

PROGRAMOWANIE. Język Asembler

PODSTAWOWE ELEMENTY ASEMBLERA TRYBY ADRESOWANIA. OPERATORY ASEMBLERA

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

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

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

Architektura komputerów

Programowanie niskopoziomowe

Architektura komputerów. Asembler procesorów rodziny x86

Adam Kotynia, Łukasz Kowalczyk

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

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

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

Procesory rodziny x86. Dariusz Chaberski

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

Programowanie Niskopoziomowe

Sprzęt i architektura komputerów

Sprzęt i architektura komputerów

Programowanie Niskopoziomowe

002 Opcode Strony projektu:

organizacja procesora 8086

Metody Realizacji Języków Programowania

Organizacja typowego mikroprocesora

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

2 Przygotował: mgr inż. Maciej Lasota

Język ludzki kod maszynowy

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.

4 Standardy reprezentacji znaków. 5 Przechowywanie danych w pamięci. 6 Literatura

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

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

1. Asembler i wstawki asemblerowe w C

Jerzy Nawrocki, Wprowadzenie do informatyki

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

Programowanie hybrydowe łączenie C/C++ z asemblerem

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

Mikrokontroler ATmega32. Język symboliczny

Architektura systemów komputerowych. Lista instrukcji procesora

CPU ROM, RAM. Rejestry procesora. We/Wy. Cezary Bolek Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki

A Machine Architecture that is Really Intuitive and Easy. Dane: notacja dwójkowa, zapis w kodzie dopełnieniowym

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

Programowanie Niskopoziomowe

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

Architektura Systemów Komputerowych

Architektura typu Single-Cycle

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

Architektura systemów komputerowych Laboratorium 14 Symulator SMS32 Implementacja algorytmów

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

Zmienne, stałe i operatory

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Lista instrukcji mikroprocesora Programowanie w assemblerze

Architektura komputerów

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

Programowanie w asemblerze Wprowadzenie

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

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

Struktura i działanie jednostki centralnej

Programowanie komputera

Informatyka, Ćwiczenie Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu

Asembler. Æwiczenia praktyczne

Architektura komputerów

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

1 Podstawy c++ w pigułce.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

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

Wstęp do informatyki. Architektura co to jest? Architektura Model komputera. Od układów logicznych do CPU. Automat skończony. Maszyny Turinga (1936)

INSTRUKCJE Instrukcje przeniesienia: Instrukcje konwersji: Arytmetyczne instrukcje:

Podstawy Programowania. Wykład 1

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

Ćwiczenie 1. Architektura von Neumanna model programowy komputera

Assembler w C++ Syntaksa AT&T oraz Intela

Programowanie strukturalne język C - wprowadzenie

Ćwiczenie nr 4. Zasady kodowania podprogramów

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

2. Architektura mikrokontrolerów PIC16F8x... 13

Wstęp do wskaźników w języku ANSI C

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

Programowanie Niskopoziomowe

Lista Rozkazów: Język komputera

Załącznik do ćwiczenia w środowisku MASM32 Przesyłanie danych i zarządzanie danymi

, " _/'--- " ~ n\l f.4e ' v. ,,v P-J.. ~ v v lu J. ... j -:;.",II. ,""", ",,> I->~" re. dr. f It41I r> ~ '<Q., M-c 'le...,,e. b,n '" u /.

Programowanie w asemblerze Środowiska 64-bitowe

Programowanie niskopoziomowe

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Język C zajęcia nr 11. Funkcje

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

1 Podstawy c++ w pigułce.

Przepełnienie bufora i łańcuchy formatujace

Transkrypt:

PROGRAMOWANIE NISKOPOZIOMOWE PN.01 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad. 2011/2012 1 2 4 c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 1 / 27 c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 2 / 27 Pamięć Niezbędna znajomość systemów liczbowych dziesiętny binarny hexadecymalny adresowanie bajtowe (adres 32-bitowy) jednostki pamięci: word (słowo 2-bajtowe) double word (4 bajty) quad word (8 bajtów) paragraph (16 bajtów) dane w pamięci (reprezentowane numerycznie) instrukcje w pamięci (zakodowane binarnie) c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 3 / 27 c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 4 / 27

Dane i instrukcje programu CPU reprezentacje znaków (char) kodowanie: ASCII, Unicode reprezentacje liczb typu: int unsigned int float double operacje arytmetyczne w zbiorze danych określonego typu reprezentacja instrukcji maszynowych w języku natywnym procesora reprezentacja kodu źródłowego instrukcji w językach wyższego poziomu struktura: rejestry (PC, IR, robocze) ALU jednostka sterująca cykl pracy procesora: etapy pętli (IF, ID, OF, EX, WB, Int) szczególna rola PC zdolność do dekodowania instrukcji zdolność do wykonywania operacji na operandach reakcja na przerwanie (rola stosu) c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 5 / 27 c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 6 / 27 Procesory 16-bitowe Procesory 32-bitowe 8088, 8086 rejestry 16-bitowe AX, BX, CX, DX, SI, DI, BP, SP, CS, DS, SS, ES, IP, FLAGS tryb pracy: real mode dostęp do całej fizycznej pamięci (1M) podział na segmenty 64k-bajtowe adres w postaci: selector:offset adres 20 bitowy: 2 4 selector + offset 80286 rejestry 16-bitowe AX, BX, CX, DX, SI, DI, BP, SP, CS, DS, SS, ES, IP, FLAGS tryb pracy: protected mode dostęp do obszarów 16M ochrona wzajemna programów segmenty 64k 80386 rejestry 32-bitowe EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, EIP, FLAGS rejestry 16-bitowe FS,GS tryb pracy: 32 bit protected mode dostęp do 4G fizycznej pamięci podział na segmenty do 4G adres 32-bitowy 80486, Pentium, Pentium Pro, MMX implementacja technologii przyspieszania pracy wzrost złożoności strukturalnej c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 7 / 27 c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 8 / 27

1 2 4 instrukcje w pamięci zakodowane numerycznie kod operacji zmienna długość rozkazów w instrukcji może być operand lub jego adres np. 0x03C3 (EAX := EAX + EBX) asembler koduje na podstawie kodu źródłowego instrukcje asemblera instrukcje maszynowe, np. add eax, ebx asemblery: NASM, MASM, TASM,... c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 9 / 27 c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 10 / 27 Instrukcje asemblera Fragment programu w asemblerze x86 add eax, ebx lista instrukcji typy operandów immediate (operand w instrukcji) register (rejestrowy) memory (w rejestrze adres względem początku segmentu) implied (domyślny) np. mov dest, src operandy nie mogą być typu memory (obydwa jednocześnie) rozmiary operandów muszą być identyczne mov eax, 3 mov bx, ax add eax, 4 ; eax = eax + 4 add al, ah ; al = al + ah sub bx, 10 ; bx = bx - 10 sub ebx, edi ; ebx = ebx - edi inc ecx ; ecx++ dec dl ; dl-- c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 11 / 27 c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 12 / 27

nie tłumaczy dyrektyw lecz je wykonuje: symbol equ value %define SIZE 100 mov eax, SIZE definiowanie miejsca w segmentach danych Dyrektywy definiujące miejsce w segmentach danych Dane będą pamiętane pod kolejnymi adresami pamięci z inicjalizacją: db, dw, dd, dq, dt L1 db 0 L2 dw 1000 L3 db 110101b L6 dd 1A92h L8 db A L9 db 0, 1, 2, 3 L10 db w, o, r, d, 0 ; łańcuch (string) L11 db word, 0 L12 times 100 db 0 bez inicjalizacji: resb, resw, resd, resq, rest L7 resb 1 L13 resw 100; rezerwacja 100 słów c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 13 / 27 c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 14 / 27 Dereferencja i adresowanie Operacje wejścia i wyjścia dostęp do danych w pamięci mov al, [L6]; pobierane tylko pierwsze słowo mov dword [L6], 1; specyfikacja formatu dla danej specyfikacje formatu: byte, word, dword, qword, tword zastosowania: mov al, [L1]; bajt spod L1 -> AL mov eax, L1; adres bajtu -> EAX mov [L1], ah; AH -> pamięci pod adres L1 mov eax, [L6]; dword spod L6 -> EAX add eax, [L6] add [L6], eax brak bibliotek standardowych bezpośredni dostęp do urządzeń jest operacją uprzywilejowaną wymaga trybu protected mode trzeba używać funkcji systemu operacyjnego można wykorzystać funkcje języka C można wykorzystać procedury z pliku: asm io.asm %include "asm_io.inc" ; makrodefinicje c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 15 / 27 c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 16 / 27

Funkcje we/wy Makra służące do debugowania wywoływane za pomocą instrukcji CALL print int EAX ekran monitora print char AL ekran (kod znaku) print string [EAX] ekran print nl nowa linia read int EAX liczba całkowita z klawiatury read char EAX kod znaku z klawiatury dump regs zawartości rejestrów ekran monitora dump mem zawartość pamięci ekran dump stack stos ekran dump math rejestry koprocesora ekran c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 17 / 27 c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 18 / 27 Programowanie hybrydowe Programowanie hybrydowe 1 2 4 c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 19 / 27 Program główny w języku C Plik: driver.c #include "cdecl.h" int PRE_CDECL asm_main( void ) POST_CDECL; int main() { int ret_status; ret_status = asm_main(); return ret_status; } tryb pracy: protected mode 32-bit. kompilator C zainicjalizuje segmenty można korzystać z bibliotek C wywołuje funkcję asm main() napisaną w asemblerze c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 20 / 27

Programowanie hybrydowe Programowanie hybrydowe Struktura podprogramu w asemblerze (wołanego z C) Plik: first.asm %include "asm_io.inc" segment.data prompt1 db "Wprowadź liczbę: ", 0... segment.bss ; dane niezainicjalizowane input1 resd 1... segment.text global _asm_main _asm_main: enter 0,0 pusha... popa mov eax,0 leave ret c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 21 / 27 Korzystając z NASM i DJGPP na platformie Windows: > gcc -c driver.c > nasm -f coff asm_io.asm > nasm -f coff first.asm -l first.lst > gcc -o first.exe driver.o first.o asm_io.o c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 22 / 27 1 2 4 : I 1 Przeprowadzić kompilację, asemblacje i konsolidację przykładowego programu, a następnie przeanalizować listing i uruchomić program 2 Napisać podprogram w asemblerze definiujący zmienne z nadanymi wartościami początkowymi. Zbadać stan pamięci dla reprezentacji a) 16-bit, b) 32-bit i wyprowadzić na standardowe wyjście zawartość paragrafów pamięci z tymi zmiennymi. Zbadać sposób pamiętania danych wielobajtowych. Ustalić adresy zmiennych. int n = -3; int h = 0xAAFF; m = 0b11110000; char ch = A ; string adres = Kielce, ul. Nowa 1A ; c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 23 / 27 c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 24 / 27

: II : III 1 Wprowadzić dodatkowe dyrektywy definiujące zmienne bez nadawania wartości początkowych: int A[20]; byte B[100]; 2 Rozbudować program o instrukcje czytania ze standardowego wejścia nowych wartości dla zmiennych (wypisać też zawartość odpowiednich obszarów segmentu danych). Rozbudować program o niżej wskazane elementy (na standardowe wyjście wyprowadzać wartości modyfikowanych zmiennych oraz zawartość rejestrów i stosownych paragrafów pamięci) 1 instrukcje wprowadzania wartości do wskazanych rejestrów roboczych procesora 2 instrukcje kopiowania zmiennych do wskazanych rejestrów roboczych procesora 3 instrukcje nadawania ustalonych wartości zadeklarowanym zmiennym (wskazując typ zmiennej) 4 instrukcje zapamiętywania w zmiennych wartości zaproponowanych wyrażeń arytmetycznych (w wyrażeniach użyć operacji dodawania, odejmowania, inkrementacji, dekrementacji). c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 25 / 27 c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 26 / 27 A. S. Tanenbaum, Strukturalna organizacja systemów komputerowych, Helion, 2006. J. Biernat, Architektura komputerów, OWPW, 2005. R. Hyde, Profesjonalne programowanie, Helion, 2005. R. Hyde,. Sztuka programowania, Helion, 2004. G. Mazur, Programowanie niskopoziomowe, http://wazniak.mimuw.edu.pl. P.A. Carter, PC Assembly Language, http://www.drpaulcarter.com/pcasm/. D.W. Lewis, Między asemblerem a językiem C. Podstawy oprogramowania wbudowanego, RM, 2004. c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 27 / 27