Architektura komputerów
|
|
- Maria Białek
- 7 lat temu
- Przeglądów:
Transkrypt
1 Architektura komputerów Wykład 10 Jan Kazimirski 1
2 Programowanie w assemblerze x86 c.d. 2
3 Funkcje systemowe System operacyjny UNIX udostępnia programom usługi za pomocą funkcji systemowych (syscall). Liczba funkcji systemowych jest bardzo duża (1000+), jednak zwykle używany jest niewielki podzbiór. Systemy POSIX-owe udostępniają zbliżoną funkcjonalność i interfejs API, chociaż szczegóły mogą się różnić. 3
4 Funkcje systemowe c.d. Sposób wywołania funkcji systemowej: Poprzez wywołanie funkcji z biblioteki C Pozwala zachować kompatybilność w przypadku zmiany numeru funkcji lub formatu wywołania. Bezpośrednie wywołanie poprzez przerwanie programowe 0x80 Efektywne omija kod C Numer funkcji przekazywany jest w rejestrze EAX 4
5 Funkcje systemowe c.d. Przekazywanie argumentów do funkcji systemowej: Poprzez stos metoda Uniksowa Argumenty umieszczane są na stosie Poprzez rejestry stosowana w Linuksie Szybkie nie korzysta ze stosu Argumenty przekazywane są w rejestrach EBX, ECX, EDX, ESI, EDI, EBP Większa liczba argumentów przekazywana jest w postaci struktury (adres jako argument) 5
6 Funkcja systemowa sys_exit Zakończenie wykonywanego aktualnie procesu Numer funkcji: 1 Argumenty: EBX: kod powrotu z programu Wartość zwracana: brak 6
7 Dokumentacja funkcji systemowych Lista nazw funkcji systemowych man 2 syscalls Numery funkcji: /usr/include/asm-x86/unistd.h Dokumentacja poszczególnych funkcji: Większość funkcji systemowych ma odpowiadające im funkcje w bibliotece standardowej libc Dokumentacja funkcji bibliotecznych libc dostępna jest jako strony manuala systemowego (man) 7
8 Dokumentacja funkcji systemowych c.d. Przykład: funkcja sys_exit Dokumentacja: man 2 exit Wywołanie: void _exit(int status) Funkcja ma jeden argument (EBX) Funkcja nie zwraca wartości 8
9 [1] Program pole kwadratu ;; PROGRAM EX01 ;; Calculate the area of a square segment.data side db 8 ; side length segment.text global _start Kompilacja i wykonanie: nasm -f elf64 -g ex01.asm ld ex01.o./a.out echo $? 64 <- wynik _start: mov al,[side] mul al mov bx,ax mov eax,1 int 0x80 ; load side length to al ; calculate square ; result to bx ; syscall code: sys_exit ; do syscall 9
10 Podstawowe wejście i wyjście Aby utworzyć jakikolwiek kompletny nietrywialny program trzeba mieć możliwość wprowadzania danych z klawiatury i wyprowadzania wyników na ekran. Można w tym celu zastosować funkcje systemowe działające na strumieniach, oraz standardowe strumienie stdin (wejście) i stdout (wyjście). 10
11 Funkcja systemowa: sys_write Zapis do pliku o podanym deskryptorze Numer: 4 Składnia: ssize_t write(int fd, const void *buf, size_t count); Uwagi: Deskryptor o numerze 1 to standardowy strumień wyjściowy. 11
12 Funkcja systemowa: sys_read Odczyt z pliku o podanym deskryptorze Numer: 3 Składnia: ssize_t read(int fd, void *buf, size_t count); Uwagi: Deskryptor o numerze 0 to standardowy strumień wejściowy. 12
13 [2] Program echo ;; PROGRAM EX02 ;; copy stdin to stdout segment.bss buff resb 120 ; line buffer segment.text global _start _start: mov ecx,buff ; set buffer address loop: mov eax,3 ; sys_read mov ebx,0 ; stdin mov edx,120 ; set buffer size int 0x80 ; syscall - read line mov edx,eax ; set actual line size mov eax,4 ; sys_write mov ebx,1 ; stdout int 0x80 ; syscall - write line jmp loop ; start again 13
14 [2] Program echo c.d. ;; PROGRAM EX02 ;; copy stdin to stdout segment.bss buff resb 120 ; line buffer segment.text global _start _start: mov ecx,buff ; set buffer address loop: mov eax,3 ; sys_read mov ebx,0 ; stdin mov edx,120 ; set buffer size int 0x80 ; syscall - read line mov edx,eax ; set actual line size mov eax,4 ; sys_write mov ebx,1 ; stdout int 0x80 ; syscall - write line jmp loop ; start again Funkcja systemowa sys_read czyta z pliku o podanym deskryptorze (tu: stdin) linię (odczyt buforowany) i umieszcza ją w buforze. Funkcja zwraca liczbę wczytanych znaków. 14
15 [2] Program echo c.d. ;; PROGRAM EX02 ;; copy stdin to stdout segment.bss buff resb 120 ; line buffer segment.text global _start _start: mov ecx,buff ; set buffer address loop: mov eax,3 ; sys_read mov ebx,0 ; stdin mov edx,120 ; set buffer size int 0x80 ; syscall - read line mov edx,eax ; set actual line size mov eax,4 ; sys_write mov ebx,1 ; stdout int 0x80 ; syscall - write line jmp loop ; start again Funkcja systemowa sys_write zapisuje do pliku o podanym deskryptorze (tu: stdout) określoną liczbę znaków z bufora. 15
16 Wczytanie liczby całkowitej Nietrywialny program wymaga zwykle wprowadzania danych w postaci liczbowej. Założenia upraszczające prosty format wejściowy: dwucyfrowa liczba w zakresie brak kontroli błędów 16
17 Wczytanie liczby całkowitej c.d. Warunki początkowe: W buforze wskazywanym przez ecx znajdują się dwie cyfry kodowane jako znaki ASCII Algorytm 1. Załaduj 1-szą cyfrę z [ecx] do al 2. Odejmij 48 od al (konwersja ASCII na int) 3. Pomnóż ax przez 10 (przesunięcie dziesiętne w lewo) 4. Załaduj 2-gą cyfrę z [ecx+1] do bl 5. Odejmij 48 od bl (konwersja ASCII na int) 6. Dodaj bx do ax. Warunki końcowe: W eax znajduje się zdekodowana liczba całkowita 17
18 Wczytanie liczby całkowitej c.d. Kod: sub eax,eax mov al,[ecx] sub al,48 imul ax,10 sub ebx,ebx mov bl,[ecx+1] sub bl,48 add ax,bx ; set eax=0 ; read 1st digit ; convert from ASCII to int ; shift left (decimal) ; set ebx=0 ; read 2nd digit ; convert from ASCII to int ; combine values of digits 18
19 Wczytanie liczby całkowitej c.d. W przypadku większych programów często poszczególne zadania implementuje się jako osobne funkcje (podprogramy) W assemblerze jest to szczególnie istotne ze względu na złożoność kodu. Do wyodrębnienia fragmentu kodu jako podprogramu można użyć instrukcji CALL i RET. 19
20 Procedura read_number c.d. read_number: mov eax,3 ; sys_read mov ebx,0 ; stdin mov edx,3 ; set buffer size int 0x80 ; syscall - read line sub eax,eax ; set eax=0 mov al,[ecx] ; read 1st digit sub al,48 ; convert from ASCII to int imul ax,10 ; shift left (decimal) sub ebx,ebx ; set bx=0 mov bl,[ecx+1] ; read 2nd digit sub bl,48 ; convert from ASCII to int add ax,bx ; combine values of digits ret ; return to the caller 20
21 read_number program główny segment.bss buff resb 10 ; line buffer segment.text global _start _start: mov ecx,buff ; set buffer address call read_number ; read number ; Return decoded number mov ebx,eax ; store number in ebx mov eax,1 ; syscall code: sys_exit int 0x80 ; do syscall 21
22 Zmienne lokalne Procedura read_number zależy od zewnętrznego bufora w pamięci dostarczonego przez wołający kod. Problemy: Programista korzystający z funkcji może zapomnieć o przydzieleniu miejsca na bufor. Bufor na dane alokowany jest w sposób statyczny (globalnie) a używany tylko w czasie używania funkcji 22
23 Zmienne lokalne c.d. Procedura read_number powinna korzystać z bufora allokowanego lokalnie tylko na czas działania procedury Rozwiązania: Przydział stron pamięci przez system operacyjny sys_mmap - kosztowne i kłopotliwe! Wykorzystanie stosu 23
24 read_number wersja 2 read_number: push ebp ; save original ebp mov ebp,esp ; save stack pointer sub esp,16 ; move stack pointer - make "gap" lea ecx,[ebp-16] ; set buffer to stack "gap" mov eax,3 ; sys_read mov ebx,0 ; stdin mov edx,10 ; set buffer size int 0x80 ; syscall - read line sub eax,eax ; set eax=0 mov al,[ecx] ; read 1st digit sub al,48 ; convert from ASCII to int imul ax,10 ; shift left (decimal) sub ebx,ebx ; set bx=0 mov bl,[ecx+1] ; read 2nd digit sub bl,48 ; convert from ASCII to int add ax,bx ; combine values of digits mov esp,ebp ; get original stack pointer pop ebp ; restore original ebp ret ; return to the caller 24
25 Wyświetlenie liczby całkowitej Podprogram wyświetlający liczbę całkowitą na ekran Założenia Podprogram korzysta z lokalnego bufora alokowanego na stosie Uproszczenia Zakres wyświetlanych liczb: Brak kontroli błędów 25
26 Wyświetlenie liczby całkowitej c.d. Warunki początkowe: Rejestr ax zawiera liczbę z przedziału do wyświetlenia Działanie: Na ekranie pojawia się liczba z rejestru ax Algorytm 1. Wykonaj dzielenie ax przez 10. Wynik to liczba dziesiątek a reszta to liczba jedności 2. Dodaj do wyniku i reszty 48 (konwersja na ASCII) 3. Umieść skonwertowany wynik na pierwszej pozycji bufora 4. Umieść skonwertowaną resztą na drugiej pozycji bufora 5. Umieść znak nowej linii na trzeciej pozycji bufora 6. Wywołaj funkcję systemową sys_write Warunki końcowe: Brak 26
27 Wyświetlenie liczby całkowitej c.d. write_number: push ebp ; save original ebp mov ebp,esp ; save stack pointer sub esp,16 ; move stack pointer - make "gap" lea ecx,[ebp-16] ; set buffer to stack "gap" mov bl,10 div bl ; divide by 10 (results in al,ah) add ah,48 ; convert remainder to ASCII add al,48 ; convert result to ASCII mov [ecx],al ; put 10's digit to buffer mov [ecx+1],ah ; put 1's digit to buffer mov [ecx+2],byte 10 ; put end of line to buffer mov eax,4 ; sys_write mov ebx,1 ; stdout mov edx,3 ; set buffer size int 0x80 ; syscall - write line mov esp,ebp ; get original stack pointer pop ebp ; restore original ebp ret ; return to the caller 27
28 Wyświetlenie komunikatu Podprogram wyświetla na ekran zadany komunikat Komunikat przechowywany jest w pamięci jako tekst formatu C (null-terminated) Problem: Przed wywołaniem odpowiedniej funkcji systemowej trzeba określić długość tekstu 28
29 print_msg ; Input: ebx - address of the message to print print_msg: mov edi,ebx ; address to edi for scasb mov ecx,80 ; max length of the string mov al,0 ; look for a null (0) char cld ; clear direction flag (down) repne scasb ; search for al in [edi] mov eax,80 sub eax,ecx ; calculate string length dec eax ; remove last char (null) mov ecx,ebx mov edx,eax mov eax,4 mov ebx,1 int 0x80 ret ; set buffer address for syscall ; set message length for syscall ; sys_write ; stdout ; syscall - write line ; return to caller 29
30 print_msg program główny segment.data msg db 'Komunikat specjalny.',10,0 segment.text global _start _start: mov ebx,msg ; put message address to ebx call print_msg ; call subroutine mov eax,1 int 0x80 ; syscall code: sys_exit ; do syscall 30
31 Program pole kwadratu Działanie: Program pyta użytkownika o długość boku kwadratu i wyświetla pole kwadratu o podanym boku. UWAGA! Program obsługuje liczby w zakresie Algorytm 1. Wyświetl komunikat podanie boku 2. Wczytaj wartość boku kwadratu 3. Wylicz pole kwadratu 4. Wyświetl komunikat o wyniku 5. wyświetl wynik 31
32 Program pole kwadratu - program główny segment.data msg1 db 'Prosze podac bok kwadratu: ',0 msg2 db 'Pole kwadratu wynosi: ',0 msg3 db 'Dziekuje za skorzystanie z programu.',10,10,0 segment.text global _start _start: mov ebx,msg1 call print_msg ; print msg1 call read_number ; read input number imul ax,ax ; compute result push eax ; save eax (result) mov ebx,msg2 call print_msg ; print msg2 pop eax ; restore result in eax call write_number ; write result (ax) mov ebx,msg3 call print_msg ; print msg3 mov eax,1 ; syscall code: sys_exit int 0x80 ; do syscall 32
33 Podsumowanie Wykorzystanie funkcji systemowej Podstawowe funkcje wejścia i wyjścia Wykorzystanie podprogramów Zmienne lokalne Program Pole kwadratu w assemblerze 33
Ćwiczenie 3. Konwersja liczb binarnych
1 Laboratorium Architektury Komputerów Ćwiczenie 3 Konwersja liczb binarnych Komputery wykonują operacje przetwarzania danych na wartościach binarnych, podczas gdy współczesna cywilizacja posługuje się
Zadanie Zaobserwuj zachowanie procesora i stosu podczas wykonywania następujących programów
Operacje na stosie Stos jest obszarem pamięci o dostępie LIFO (Last Input First Output). Adresowany jest niejawnie przez rejestr segmentowy SS oraz wskaźnik wierzchołka stosu SP. Używany jest do przechowywania
Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych
Ćwiczenie nr 3 Wyświetlanie i wczytywanie danych 3.1 Wstęp Współczesne komputery przetwarzają dane zakodowane za pomocą ciągów zerojedynkowych. W szczególności przetwarzane liczby kodowane są w systemie
PROGRAMOWANIE NISKOPOZIOMOWE. Adresowanie pośrednie rejestrowe. Stos PN.04. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012
PROGRAMOWANIE NISKOPOZIOMOWE PN.04 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad. 2011/2012 1 2 3 Ćwiczenia laboratoryjne c Dr inż. Ignacy Pardyka (Inf.UJK) PN.04 Rok akad.
Informacje organizacyjne
Informacje organizacyjne Semestr letni 2016/2017 r. Aleksandra.Postawka@pwr.edu.pl Zakład Architektury Komputerów http://zak.ict.pwr.wroc.pl/ Organizacja laboratorium serwer lak.iiar.pwr.wroc.pl (w serwerowni)
PROGRAMOWANIE NISKOPOZIOMOWE. Systemy liczbowe. Pamięć PN.01. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012
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
PROGRAMOWANIE NISKOPOZIOMOWE
PROGRAMOWANIE NISKOPOZIOMOWE PN.01 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad. 2011/2012 c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 1 / 27 Wprowadzenie
Adam Kotynia, Łukasz Kowalczyk
Adam Kotynia, Łukasz Kowalczyk Dynamiczna alokacja pamięci Alokacja pamięci oraz dezalokacja pamięci jest to odpowiednio przydział i zwolnienie ciągłego obszaru pamięci. Po uruchomieniu, proces (program)
Architektura komputerów
Architektura komputerów Wykład 3 Jan Kazimirski 1 Podstawowe elementy komputera. Procesor (CPU) 2 Plan wykładu Podstawowe komponenty komputera Procesor CPU Cykl rozkazowy Typy instrukcji Stos Tryby adresowania
4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 2 / 24
Wymagania proceduralnych języków wysokiego poziomu ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH modele programowe procesorów ASK MP.01 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad.
Programowanie Niskopoziomowe
Programowanie Niskopoziomowe Wykład 8: Procedury Dr inż. Marek Mika Państwowa Wyższa Szkoła Zawodowa im. Jana Amosa Komeńskiego W Lesznie Plan Wstęp Linkowanie z bibliotekami zewnętrznymi Operacje na stosie
Programowanie niskopoziomowe
Programowanie niskopoziomowe Programowanie niskopoziomowe w systemie operacyjnym oraz poza nim Tworzenie programu zawierającego procedury asemblerowe 1 Programowanie niskopoziomowe w systemie operacyjnym
INSTRUKCJE Instrukcje przeniesienia: Instrukcje konwersji: Arytmetyczne instrukcje:
INSTRUKCJE Instrukcje przeniesienia: mov, lea, les, push, pop, pushf, popf Instrukcje konwersji: cbw, cwd, xlat Arytmetyczne instrukcje: add, inc sub, dec, cmp, neg, mul, imul, div, idiv Logiczne instrukcje:
Architektura komputerów. Asembler procesorów rodziny x86
Architektura komputerów Asembler procesorów rodziny x86 Architektura komputerów Asembler procesorów rodziny x86 Rozkazy mikroprocesora Rozkazy mikroprocesora 8086 można podzielić na siedem funkcjonalnych
Architektura komputerów
Architektura komputerów Wykład 8 Jan Kazimirski 1 Assembler x86 2 Podstawowe instrukcje x86 Instrukcje transferu danych Arytmetyka binarna i dziesiętna Instrukcje logiczne Instrukcje sterujące wykonaniem
Architektura komputerów
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
Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
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.
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. Dlatego trzeba je zapisywać do pliku, a potem umieć je z tego
Architektura systemów komputerowych Laboratorium 14 Symulator SMS32 Implementacja algorytmów
Marcin Stępniak Architektura systemów komputerowych Laboratorium 14 Symulator SMS32 Implementacja algorytmów 1. Informacje Poniższe laboratoria zawierają podsumowanie najważniejszych informacji na temat
Biblioteka standardowa - operacje wejścia/wyjścia
Biblioteka standardowa - operacje wejścia/wyjścia Przemysław Gawroński D-10, p. 234 Wykład 6 15 stycznia 2019 (Wykład 6) Biblioteka standardowa - operacje wejścia/wyjścia 15 stycznia 2019 1 / 14 Outline
Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011
Obsługa plików Systemy Operacyjne 2 laboratorium Mateusz Hołenko 25 września 2011 Plan zajęć 1 Pliki w systemie Linux i-węzły deskryptory plików 2 Operacje na plikach otwieranie i zamykanie zapis i odczyt
Metody Realizacji Języków Programowania
Metody Realizacji Języków Programowania Bardzo krótki kurs asemblera x86 Marcin Benke MIM UW 10 stycznia 2011 Marcin Benke (MIM UW) Metody Realizacji Języków Programowania 10 stycznia 2011 1 / 22 Uwagi
Programowanie Niskopoziomowe
Programowanie Niskopoziomowe Wykład 10: Arytmetyka całkowitoliczbowa Dr inż. Marek Mika Państwowa Wyższa Szkoła Zawodowa im. Jana Amosa Komeńskiego W Lesznie Plan Wprowadzenie Instrukcje przesunięcia bitowego
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 12 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Obsługa łańcuchów znakowych getchar(), putchar()
Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.
Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Wskaźnik do pliku Dostęp do pliku: zapis, odczyt,
Struktura i działanie jednostki centralnej
Struktura i działanie jednostki centralnej ALU Jednostka sterująca Rejestry Zadania procesora: Pobieranie rozkazów; Interpretowanie rozkazów; Pobieranie danych Przetwarzanie danych Zapisywanie danych magistrala
Zasady programowania Dokumentacja
Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika
Funkcje zawarte w bibliotece < io.h >
PLIKOWE OPERACJE WEJŚCIA - WYJŚCIA Język C/C++ nie ma wbudowanych żadnych instrukcji umożliwiających wykonywanie operacji wejścia-wyjścia! Służą do tego funkcje biblioteczne. Funkcje zawarte w bibliotece
Lista instrukcji mikroprocesora 8086. Programowanie w assemblerze
Lista instrukcji mikroprocesora 8086 Programowanie w assemblerze Lista instrukcji mikroprocesora 8086 Lista instrukcji mikroprocesora 8086 Lista instrukcji mikroprocesora 8086 Lista instrukcji mikroprocesora
Funkcje zawarte w bibliotece < io.h >
PLIKOWE OPERACJE WEJŚCIA - WYJŚCIA Język C/C++ nie ma wbudowanych żadnych instrukcji umożliwiających wykonywanie operacji wejścia-wyjścia! Służą do tego funkcje biblioteczne. Funkcje zawarte w bibliotece
Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer
Realizacja algorytmu przez komputer Wstęp do informatyki Wykład UniwersytetWrocławski 0 Tydzień temu: opis algorytmu w języku zrozumiałym dla człowieka: schemat blokowy, pseudokod. Dziś: schemat logiczny
Akademia Górniczo- Hutmicza w Krakowie Katedra Elektroniki WIET
Akademia Górniczo- Hutmicza w Krakowie Katedra Elektroniki WIET Technika mikroprocesorowa Instrukcja 3 Stos i podprogramy Autor: Paweł Russek Tłumaczenie: Marcin Pietroń http://www.fpga.agh.edu.pl/tm ver.
Język ludzki kod maszynowy
Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza
Praktycznie całe zamieszanie dotyczące konwencji wywoływania funkcji kręci się w okół wskaźnika stosu.
Krótki artykuł opisujący trzy podstawowe konwencje wywoływania funkcji C++ (a jest ich więcej). Konwencje wywoływania funkcji nie są tematem, na który można się szeroko rozpisać, jednak należy znać i odróżniać
Wprowadzenie do Architektury komputerów. Asembler procesorów rodziny x86
Wprowadzenie do Architektury komputerów Asembler procesorów rodziny x86 Budowa procesora rodziny x86 Rejestry procesora 8086 ogólnego przeznaczenia Dla procesorów 32-bitowych: EAX, EBX, ECX, EDX Dla procesorów
Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.
Typy, operatory, wyrażenia. Wejście i wyjście. Typy, operatory, wyrażenia Zmienna: [] [ '[' ']' ] ['=' ]; Zmienna to fragment pamięci o określonym
2 Przygotował: mgr inż. Maciej Lasota
Laboratorium nr 2 1/7 Język C Instrukcja laboratoryjna Temat: Wprowadzenie do języka C 2 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie do języka C. Język C jest językiem programowania ogólnego zastosowania
Assembler w C++ Syntaksa AT&T oraz Intela
Ponownie dodaję artykuł zahaczający o temat assemblera. Na własnej skórze doświadczyłem dzisiaj problemów ze wstawką assemblerową w kodzie C++, dlatego postanowiłem stworzyć artykuł, w którym zbiorę w
Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.
Laboratorium Podstaw Informatyki Strona 1 Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Ćwiczenie 4 Obsługa plików Kraków 2010 Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim
Ćwiczenie nr 6. Programowanie mieszane
Ćwiczenie nr 6 Programowanie mieszane 6.1 Wstęp Współczesne języki programowania posiadają bardzo rozbudowane elementy językowe, co pozwala w większości przypadków na zdefiniowanie całego kodu programu
Programowanie w asemblerze Uruchamianie programów
Programowanie w asemblerze Uruchamianie programów 17 stycznia 2017 Uruchamianie programów Przy uruchamianiu i badaniu zachowania programów systemowych używa się wielu narzędzi. Prostsze z ich, takie jak
1: ////////// 2: // test.c. 3: ssize_t ret = read(fd, buf, nbytes);
Poniżej wklejone są fragmenty kodu jądra, serwerów oraz sterownika. Kod ten przedstawia zarys mechanizmu używanego przy wywołaniach usług systemowych przez procesy użytkownika. W miejscach, w których występuje
Cel wykładu. Przedstawienie działania exploitów u podstaw na przykładzie stack overflow.
Exploity w praktyce Plan prelekcji Powtórka assembly x86 32. Pamięć uruchamianych programów. Prosty stack overflow exploit. Tworzenie shellcode i jego uruchomienie. Wstrzykiwanie shellcode wykorzystując
Programowanie w asemblerze Aspekty bezpieczeństwa
Programowanie w asemblerze Aspekty bezpieczeństwa 20 grudnia 2016 Ochrona stron pamięci Najstarsze(?) ataki: modyfikacja kodu programu. Lekarstwo: W XOR X (Write XOR execute) Oznacza to, że w atrybutach
INFORMATYKA Studia Niestacjonarne Elektrotechnika
INFORMATYKA Studia Niestacjonarne Elektrotechnika Wydział Elektrotechniki i Informatyki dr inż. Michał Łanczont Wydział Elektrotechniki i Informatyki p. E419 tel. 81-538-42-93 m.lanczont@pollub.pl http://lanczont.pollub.pl
Architektura systemów komputerowych Laboratorium 7 Symulator SMS32 Stos, Tablice, Procedury
Marcin Stępniak Architektura systemów komputerowych Laboratorium 7 Symulator SMS32 Stos, Tablice, Procedury 1. Informacje 1.1. Stos Stos jest strukturą danych, w której dane dokładane są na wierzch stosu
Lab 9 Podstawy Programowania
Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany
#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }
OPERACJE WEJŚCIA / WYJŚCIA Funkcja: printf() biblioteka: wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout) int printf ( tekst_sterujący, argument_1, argument_2,... ) ;
Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013
Laboratorium Podstaw Informatyki Strona 1 Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Obsługa plików Kraków 2013 Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim będziemy mogli
Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada
Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada Spis treści 1 Wprowadzenie 1 2 Dane i kod 2 3 Wyrażenia 2 3.1 Operacje arytmetyczne i logiczne.................. 2 3.2 Podstawowe
Programming in Assembler. Laboratory manual. Exercise 6
Zakład Mikroinformatyki i Teorii Automatów Cyfrowych Programming in Assembler Laboratory manual Exercise 6 Interrupts handling 2008 Krzysztof Tokarz, Piotr Czekalski (edt.) During the Exercise No.6 students
Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki
Informatyka I Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2019 1 Plan wykładu
Języki formalne i techniki translacji
Języki formalne i techniki translacji Laboratorium - Projekt Termin oddania: ostatnie zajęcia przed 17 stycznia 2016 Wysłanie do wykładowcy: przed 23:59 28 stycznia 2016 Używając BISON-a i FLEX-a napisz
Struktury, unie, formatowanie, wskaźniki
Struktury, unie, formatowanie, wskaźniki 1. Napisz aplikację, która na wejściu dostaje napis postaci W Roku Pańskim 1345, władca Henryk 12, na rzecz swoich 143209 poddanych uchwalił dekret o 20 procentowej
OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)
OPERACJE WEJŚCIA / WYJŚCIA Funkcja: printf() biblioteka: wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout) int printf ( tekst_sterujący, argument_1, argument_2,... ) ;
Return-oriented exploiting
HISPASEC Return-oriented exploiting by Gynvael Coldwind Dramatis Personæ Gynvael Coldwind - obecnie spec. ds. bezp. IT @ Hispasec - wcześniej ArcaBit - autor kilku artykułów (Hakin9 i Xploit) - prowadzi
PODSTAWOWE ELEMENTY ASEMBLERA TRYBY ADRESOWANIA. OPERATORY ASEMBLERA
PODSTAWOWE ELEMENTY ASEMBLERA TRYBY ADRESOWANIA. OPERATORY ASEMBLERA PODSTAWOWE ELEMENTY ASEMBLERA Składnia języka Postać wiersza programu Dyrektywy i pseudoinstrukcje Deklaracja zmiennych Zmienne łańcuchowe
Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.
Przykład: $ ls more Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi. Tworzenie łącza #include int pipe(int filedes[2]); Przykład: int
Architektura komputerów
Architektura komputerów Tydzień 5 Jednostka Centralna Zadania realizowane przez procesor Pobieranie rozkazów Interpretowanie rozkazów Pobieranie danych Przetwarzanie danych Zapisanie danych Główne zespoły
CPU ROM, RAM. Rejestry procesora. We/Wy. Cezary Bolek Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki
Cezary Bolek Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki Komputer jest urządzeniem, którego działanie opiera się na wykonywaniu przez procesor instrukcji pobieranych z pamięci operacyjnej
Generatory analizatorów
Generatory analizatorów Generator analizatora leksykalnego flex ( http://www.gnu.org/software/flex/ ) Generator analizatora składniowego bison ( http://www.gnu.org/software/bison/ ) Idea ogólna Opis atomów
Sprzęt i architektura komputerów
Radosław Maciaszczyk Mirosław Łazoryszczak Sprzęt i architektura komputerów Laboratorium Temat: Mikroprocesory i elementy asemblera Katedra Architektury Komputerów i Telekomunikacji 1. MIKROPROCESORY I
PROGRAMY REZYDENTNE Terminate and State Resident, TSR
PROGRAMY REZYDENTNE Terminate and State Resident, TSR O co tu chodzi Podstawowe reguły Jak może program zostać rezydentnym Przechwytywanie przerwań Jak się samoznaleźć w pamięci Aktywacja TSR-u. Problemy
Optymalizacja szelkodów w Linuksie
Optymalizacja szelkodów w Linuksie Michał Piotrowski Artykuł opublikowany w numerze 4/2005 magazynu hakin9. Zapraszamy do lektury całego magazynu. Wszystkie prawa zastrzeżone. Bezpłatne kopiowanie i rozpowszechnianie
Operacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia
Materiały Operacje na plikach Informatyka Operacje wejścia-wyjścia w C/C++: Podejście proceduralne Podejście obiektowe Standardowe strumienie wejścia i wyjścia stdin - strumień wejściowy (klawiatura) cin
Buffer Overflow (art. 2) by h07 (h07@interia.pl)
Buffer Overflow (art. 2) by h07 (h07@interia.pl) Intro Artykuł ten kierowany jest do osób znających podstawy języków programowania C i Assembler a takŝe architektury systemu Linux i sposobów zarządzania
Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30
Programowanie w C++ Wykład 9 Katarzyna Grzelak 14 maja 2018 K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe plus
Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki
Konwersje napis liczba Struktury, unie Scanf / printf Wskaźniki Konwersje liczba napis Ćwiczenia 1. Napisz aplikację, która na wejściu dostaje napis postaci W Roku Pańskim 1345, władca Henryk 12,
002 Opcode Strony projektu:
ReverseCraft assem bler by gynvael.coldwind//vx Opcode Strony projektu: http://re.coldwind.pl/ http://www.uw-team.org/ Zasoby! czyli co możemy użyć... Instrukcje procesora Pamięć Wirtualna Rejestry CPU
Architektura Systemów Komputerowych
Jarosław Kuchta Architektura Systemów Komputerowych ćwiczenie 3 Arytmetyka całkowita instrukcja laboratoryjna Wprowadzenie Celem ćwiczenia jest zapoznanie się z budową i sposobem działania jednostki arytmetyczno-logicznej
#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }
OPERACJE WEJŚCIA / WYJŚCIA Funkcja: printf() biblioteka: wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout) int printf ( tekst_sterujący, argument_1, argument_2,... ) ;
Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).
Zarządzanie pamięcią Pamięć: stos i sterta Statyczny i dynamiczny przydział pamięci Funkcje ANSI C do zarządzania pamięcią Przykłady: Dynamiczna tablica jednowymiarowa Dynamiczna tablica dwuwymiarowa 154
Język C++ wykład VIII
Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,
Zuzanna Hartleb i Artur Angiel
ARCHITEKTURA KOMPUTERÓW - LABORATORIUM Program hybrydowy Dokumentacja ćw. 1-4 Zuzanna Hartleb i Artur Angiel 2010-06-16 Działanie Program pobiera od użytkownika liczbę zmiennoprzecinkową, sprawdza poprawnośd
Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780
Dane techniczne : Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780 a) wielkość bufora znaków (DD RAM): 80 znaków (80 bajtów) b) możliwość sterowania (czyli podawania kodów znaków) za pomocą
Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33
Programowanie w C++ Wykład 8 Katarzyna Grzelak 15 kwietnia 2019 K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe
Podstawy programowania w C++
Podstawy programowania w C++ Strumienie wejścia cin>> i wyjścia cout
Iteracyjny serwer TCP i aplikacja UDP
Iteracyjny serwer TCP i aplikacja UDP Iteracyjny serwer TCP Funkcje wywoływane przez serwer TCP socket() - bind() - listen() - accept() - read() / write() - close() socket() Creates an endpoint for communication
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,
Języki i metody programowania I
Języki i metody programowania I dr inż. Piotr Szwed Katedra Informatyki Stosowanej C2, pok. 403 e-mail: pszwed@agh.edu.pl http://home.agh.edu.pl/~pszwed/ Aktualizacja: 2013-01-25 11. Biblioteka wejścia
Ćwiczenie nr 4. Zasady kodowania podprogramów
Ćwiczenie nr 4 Zasady kodowania podprogramów 4.1 Wstęp W praktyce programowania spotykamy się często z sytuacjami, gdy identyczne czynności wykonywane są w wielu miejscach programu. W takich przypadkach
Programowanie Niskopoziomowe
Programowanie Niskopoziomowe Wykład 11: Procedury zaawansowane Dr inż. Marek Mika Państwowa Wyższa Szkoła Zawodowa im. Jana Amosa Komeńskiego W Lesznie Plan Wstęp Ramki stosu Rekurencja INVOKE, ADDR, PROC,
ISO/ANSI C dostęp do plików ISO/ANSI C. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików
Plik to uporządkowany ciąg danych Dostęp do danych w pliku jest sekwencyjny, tj. istnieje pojęcie elementu aktualnego (tzw. wskaźnika pliku). Możliwy dostęp do danych w pliku jest tylko tam, gdzie wskazuje
Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane
Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe Oprócz zmiennych w programie mamy też stałe, które jak sama nazwa mówi, zachowują swoją wartość przez cały czas działania programu. Można
PROGRAMOWANIE NISKOPOZIOMOWE. Struktury w C. Przykład struktury PN.06. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012
PROGRAMOWANIE NISKOPOZIOMOWE PN.06 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad. 2011/2012 1 2 Ćwiczenia laboratoryjne c Dr inż. Ignacy Pardyka (Inf.UJK) PN.06 Rok akad.
Zajęcia P4. Analizator semantyczny i generator kodu (Pascal)
Zajęcia P4. Analizator semantyczny i generator kodu (Pascal) 1. Cel ćwiczeń Celem ćwiczeń jest stworzenie generatora kodu asemblerowego i analizatora semantycznego dla języka będącego podzbiorem języka
petla:... ; etykieta określa adres w pamięci kodu (docelowe miejsce skoku) DJNZ R7, petla
Asembler A51 1. Symbole Nazwy symboliczne Symbol jest nazwą, która może być użyta do reprezentowania wartości stałej numerycznej, wyrażenia, ciągu znaków (tekstu), adresu lub nazwy rejestru. Nazwy symboliczne
Narzędzia informatyczne w językoznawstwie
Narzędzia informatyczne w językoznawstwie Wiersz poleceń - Potoki i pliki wsadowe Marcin Junczys-Dowmunt junczys@amu.edu.pl Zakład Logiki Stosowanej http://www.logic.amu.edu.pl 22. października 2008 Marcin
Programowanie w C++ Wykład 11. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 24
Programowanie w C++ Wykład 11 Katarzyna Grzelak 21 maja 2018 K.Grzelak (Wykład 11) Programowanie w C++ 1 / 24 Strumienie Strumień bajtów płynacy od źródła do ujścia: 1 standardowe strumienie wejściowe
Programowalne układy logiczne
Programowalne układy logiczne Mikroprocesor Szymon Acedański Marcin Peczarski Instytut Informatyki Uniwersytetu Warszawskiego 6 grudnia 2014 Zbudujmy własny mikroprocesor Bardzo prosty: 16-bitowy, 16 rejestrów
Pliki. Informacje ogólne. Obsługa plików w języku C
Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych (np. dysku twardym, pendrive, płycie DVD itp.). Może posiadać określone atrybuty, a odwołanie do niego
PROCESORY ARM TRUDNO ZNALEŹĆ PROCESORY O TAK LICZNYCH, ORYGINALNYCH, NOWYCH, POMYSŁOWYCH ROZWIĄZANIACH!
TRUDNO ZNALEŹĆ PROCESORY O TAK LICZNYCH, ORYGINALNYCH, NOWYCH, POMYSŁOWYCH ROZWIĄZANIACH! ASEMBLERY Pola Separatory Wizytówki Kody operacji Pseudo operacje adresy I dane Dyrektywy Stałe Komentarze SZKICE
Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1 Pętle Pętla jest konstrukcją sterującą stosowaną w celu wielokrotnego wykonania tego samego zestawu instrukcji jednokrotne
Przepełnienie bufora i łańcuchy formatujace
Metody włamań do systemów komputerowych Przepełnienie bufora i łańcuchy formatujace Bogusław Kluge, Karina Łuksza, Ewa Makosa b.kluge@zodiac.mimuw.edu.pl, k.luksza@zodiac.mimuw.edu.pl, e.makosa@zodiac.mimuw.edu.pl
Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki
Typy wyliczeniowe Konwersje napis liczba Struktury, unie Scanf / printf Wskaźniki Typy wyliczeniowe Służą do łatwiejszej kontroli nad stałymi Ustawianie parametrów o ściśle określonym zbiorze wartości
CPU. Architektura FLAGS Bit: dr Paweł Kowalczyk; DPTNS, KFCS UŁ. SI 16 bit. 16 bit. 16 bit.
Architektura 8086 8086 posiada 4 rejestry ogólnego użytku AX, BX, CX, DX, 2 rejestry indeksowe SI, DI, 3 rejestry wskaźnikowe SP, BP, IP, 4 rejestry segmentowe CS, DS, SS i ES oraz rejestr flag FLAG AH
WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński
WYKŁAD 8 Funkcje i algorytmy rekurencyjne Proste przykłady Programy: c3_1.c..., c3_6.c Tomasz Zieliński METODY REKURENCYJNE (1) - program c3_1 ======================================================================================================
Faktura Orange z 11 lipca 2014 roku zawierająca złośliwe oprogramowanie ANALIZA
Faktura Orange z 11 lipca 2014 roku zawierająca złośliwe oprogramowanie ANALIZA 21 Lipiec, 2014 W dniu 11 lipca 2014 zarejestrowaliśmy kolejną kampanię polegającą na rozsyłaniu złośliwego oprogramowania
Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++
Podstawy Informatyki Inżynieria Ciepła, I rok Wykład 10 Kurs C++ Historia Lata 70-te XX w język C (do pisania systemów operacyjnych) "The C programming language" B. Kernighan, D. Ritchie pierwszy standard
Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)
Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) Ćwiczenie trzecie (jedne zajęcia) Temat: Potoki i łącza nazwane w Linuksie. Opracowanie: dr in ż. Arkadiusz Chrobot Wprowadzenie 1. Komunikacja