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

Podobne dokumenty
Programowanie Niskopoziomowe

Ćwiczenie nr 6. Programowanie mieszane

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

Programowanie Niskopoziomowe

Mikrokontroler ATmega32. Język symboliczny

Assembler w C++ Syntaksa AT&T oraz Intela

Programowanie niskopoziomowe

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

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

Podstawy Informatyki Języki programowania c.d.

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

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

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

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

Wstępdo assemblera MA51

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

PODSTAWOWE ELEMENTY ASEMBLERA TRYBY ADRESOWANIA. OPERATORY ASEMBLERA

Wykład 4. Środowisko programistyczne

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

Programowanie Niskopoziomowe

Wstęp do programowania. Wykład 1

Struktury. Przykład W8_1

PROGRAMOWANIE NISKOPOZIOMOWE

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

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

Języki programowania zasady ich tworzenia

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

Inżynieria Wytwarzania Systemów Wbudowanych

1 Podstawy c++ w pigułce.

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

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

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

1 Podstawy c++ w pigułce.

Tablice (jedno i wielowymiarowe), łańcuchy znaków

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

MATERIAŁY DO ZAJĘĆ I. Podstawowe pojęcia. Algorytm. Spis treści Przepis

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

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

Podstawy programowania w C++

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

Wprowadzenie do szablonów szablony funkcji

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wprowadzenie do szablonów szablony funkcji

Kompilator języka C na procesor 8051 RC51 implementacja

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

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

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

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

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

Język ludzki kod maszynowy

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

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Język programowania: Lista instrukcji (IL Instruction List)

Tworzenie projektu asemblerowego dla środowiska Visual Studio 2008.

Podstawy programowania - 1

Laboratorium 3: Preprocesor i funkcje ze zmienną liczbą argumentów. mgr inż. Arkadiusz Chrobot

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

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

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.

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Ćwiczenie 3. Konwersja liczb binarnych

Podstawy algorytmiki i programowania - wykład 4 C-struktury

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

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

Język C++ Różnice między C a C++

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

Lab 9 Podstawy Programowania

PROGRAMOWANIE NISKOPOZIOMOWE

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Zuzanna Hartleb i Artur Angiel

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

Java EE produkcja oprogramowania

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Języki programowania - podstawy

Podstawy programowania. Wykład Co jeszcze... Przypomnienia, uzupełnienia. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania (1)

Podstawy Programowania. Wykład 1

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

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

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Język C - podstawowe informacje

Podstawy Programowania

29. Poprawność składniowa i strukturalna dokumentu XML

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

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

Metody Realizacji Języków Programowania

Procesy i wątki. Krzysztof Banaś Obliczenia równoległe 1

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

KONSTRUKCJA KOMPILATORÓW

Architektura Systemów Komputerowych, Wydział Informatyki, ZUT

Podstawy programowania

PARADYGMATY PROGRAMOWANIA Wykład 2

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Transkrypt:

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

Wprowadzenie Możliwość wprowadzania kodu asemblerowego bezpośrednio w kodzie źródłowym w języku C lub C++ Nie wymagany MASM ani dodatkowa faza linkowania Dedykowany dla procesorów x86 Brak przenoszalności programów na inne platformy, w tym także na x64

Podstawy W kodzie asemblerowym można wykorzystać dowolną zmienną lub nazwę funkcji języka C (C++), która występuje w zasięgu tego kodu Kod asemblerowy musi być poprzedzony słowem kluczowym _asm może ono występować przed każdą instrukcją asemblera z osobna może wystąpić przed blokiem instrukcji asemblera (muszą one wystąpić w nawiasach klamrowych)

Przykład 1 // asm_overview.cpp // processor: x86 void declspec(naked) main() { // Naked functions must provide their own prolog... asm { push ebp mov ebp, esp sub esp, LOCAL_SIZE } //... and epilog asm { pop ebp ret } }

Przykład II asm push ebp asm mov ebp, esp asm sub esp, LOCAL_SIZE

Zalety i wady stosowania inline asemblera Zalety: możliwość pisania funkcji w asemblerze punktowa optymalizacja krytycznych sekcji kodu możliwość bezpośredniego dostępu do sprzętu możliwość napisania własnego prologu i epilogu dla gołych funkcji Wady: ograniczenie zastosowań do procesorów x86 brak możliwości zastosowania dyrektyw MASM-a

Składnia asm instrukcja_asemblera [;] asm {blok _instrukcji_asemblera }[;] Kończenie instrukcji średnikiem jest opcjonalne Uwaga na podwójne podkreślenie, chociaż ze względu na wsteczną kompatybilność działa również _asm (z pojedynczym podkreśleniem), nie działa natomiast asm (bez podkreśleń) ze standardu C++ (chociaż kompilator w tym przypadku nie zgłasza błędu, to kod wynikowy nie zostanie wygenerowany)

Zbiór instrukcji Wszystkie do modelu Pentium 4 i AMD Athlon włącznie

Wyrażenia MASM-a Wszystkie tak samo jak w MASM-ie

Dyrektywy związane z danymi Blok instrukcji asemblerowych może korzystać z definicji danych języka C (C++) Nie można definiować danych przy użyciu dyrektyw i operatorów MASM-a Niedozwolone jest stosowanie: dyrektyw: DB, DW, DD, DQ, DT, DF operatorów: DUP i THIS dyrektyw STRUC, RECORD, WIDTH, MASK

Dyrektywy EVEN i ALIGN Dopuszczalne Służą wyrównywaniu naturalnemu pamięci kodu przez wstawianie instrukcji NOP wtedy, gdy jest to wskazane Przyspiesza działanie fazy pobrania instrukcji w procesorze

Makrodyrektywy MASM-a Zabronione jest stosowanie: makrodyrektyw: MACRO, REPT,IRC, IRP, ENDM makro operatorów: <>,!, &, %, TYPE W bloku asm można używać dyrektyw preprocesora C

Stosowanie elementów języka C/C++ w blokach asm Dopuszczalne jest użycie wewnątrz bloku asm następujących elementów języka C/C++: symboli etykiety, nazwy zmiennych, nazwy funkcji stałych w tym stałych symbolicznych oraz elementów typu wyliczeniowego (enum) makr i dyrektyw preprocesora komentarzy (zarówno /* */, jak i // nazw typów nazw typów zadeklarowanych przez typedef (używanych w połączeniu z operatorami PTR i TYPE lub przy definiowaniu składowych struktury lub unii) stałe szesnastkowe w notacji C/C++ (0x100)lub asemblerowej (100h) stałe ósemkowe (wymagane wiodące zero np. 0765)

Używanie operatorów W bloku asm: nie można korzystać z operatorów języka C/C++ można korzystać z operatorów, które występują w obydwu językach, ale będą one traktowane jak operatory asemblera

Używanie operatorów - przykład Niepoprawne int array[10]; asm mov array[6], bx ; zawartość BX zapisana pod adresem array+6 (brak skalowania) array[6] = 0; /* zapisanie 0 pod adresem array+24 (skalowanie) */ Poprawne asm mov array[6 * TYPE int], 0 ; zapisanie 0 pod adresem array+24 array[6] = 0; /* zapisanie 0 pod adresem array+24 */

Używanie symboli W bloku asm można używać symboli języka C/C++ (nazwy zmiennych, etykiety itp.), które są w zasięgu tego bloku Ograniczenia: w pojedynczej instrukcji asemblera może wystąpić co najwyżej jeden symbol język C/C++ (wyjątek stanowi użycie symboli w połączeniu z LENGTH, TYPE, SIZE) funkcje, do których następuje odwołanie w instrukcji asemblerowej muszą być wcześniej zadeklarowane symbole C/C++ używane w bloku asm nie mogą mieć takiej samej nazwy, jak zastrzeżone słowa asemblera znaczniki struktury lub unii nie są rozpoznawane w blokach asm

Używanie danych Można odwołać się przez nazwę zmiennej Przykład: asm mov eax, var Dostęp do pól unii lub struktur: możliwy za pośrednictwem nazwy tego pola, jeśli jest unikalne jeśli nie - konieczny zapis kropkowy Dostęp do obiektów: pola na podobnej zasadzie metody zabronione