Tworzenie projektu asemblerowego dla środowiska Visual Studio 2008.



Podobne dokumenty
Ćwiczenie nr 6. Programowanie mieszane

Informatyka I : Tworzenie projektu

Programowanie niskopoziomowe

Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch

Wybieramy File->New->Project Wybieramy aplikację MFC->MFC Application jak na rysunku poniżej:

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Microsoft Foundation Classes

Instrukcja laboratoryjna cz.3

Wprowadzenie do biblioteki klas C++

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych

#line #endif #ifndef #pragma

Programowanie Systemów Czasu Rzeczywistego

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

Podstawowe zasady tworzenia projektu w środowisku uvision 4.0, pisanie programów w asemblerze 8051

1.Wstęp. 2.Generowanie systemu w EDK

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

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

Utworzenie aplikacji mobilnej Po uruchomieniu Visual Studio pokazuje się ekran powitalny. Po lewej stronie odnośniki do otworzenia lub stworzenia

I - Microsoft Visual Studio C++

2. W oknie dialogowym Choose Toolbox Items w zakładce.net Framework Components naciskamy przycisk Browse...

MS Visual Studio Express 2012 for Web instalacja i konfiguracja

Ćwiczenia laboratoryjne. Oprogramowanie i badanie prostych metod sortowania w tablicach

Programowanie niskopoziomowe

Programowanie na poziomie sprzętu. Programowanie w Windows API

Programowanie Niskopoziomowe

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Microsoft Visual Studio: zintegrowane środowisko programistyczne (IDE), umożliwia tworzenie samodzielnych aplikacji, aplikacji sieciowych, usług

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

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

MentorGraphics ModelSim

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

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

Laboratorium 1 - Programowanie proceduralne i obiektowe

Allegro5 część 1 - Witaj Świecie! Projekt, inicjalizacja, tworzenie okna, czcionki. Autor: Kamil Krzyszczuk - C mons

WPROWADZENIE DO INFORMATYKI

Projektowanie układów VLSI-ASIC techniką od ogółu do szczegółu (top-down) przy użyciu pakietu CADENCE

1. Tworzenie nowego projektu.

Wykład 4. Środowisko programistyczne

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

Podłączanie bibliotek Zapis danych do pliku graficznego Generowanie promienia pierwotnego Import sceny z pliku Algorytm ray tracingu

Warsztaty AVR. Instalacja i konfiguracja środowiska Eclipse dla mikrokontrolerów AVR. Dariusz Wika

Utworzenie pliku. Dowiesz się:

Rodzina protokołów TCP/IP. Aplikacja: ipconfig.

Instrukcja laboratoryjna

Konfiguracja pakietu CrossStudio for MSP

SFML. (Simple and Fast Multimedia Library)

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

Praca w środowisku Visual Studio 2008, Visual C

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

Tworzenie nowego projektu w asemblerze dla mikroprocesora z rodziny 8051

Dokumentacja końcowa projektu z ZPR

STWORZENIE BIBLIOTEKI SŁUŻĄCEJ DO WCZYTYWANIA

Wprowadzenie do środowiska Qt Creator

Programowanie obiektowe

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

I. WSTĘP. Przykład 1. Przykład 2. Programowanie czyli tworzenie programów komputerowych (aplikacji komputerowych)

Ćwiczenia 2 IBM DB2 Data Studio

Pracownia internetowa w szkole ZASTOSOWANIA

1. Tworzenie integracji

BACKUP BAZ DANYCH FIREBIRD

Programowanie w Javie

Wykład 5 Okna MDI i SDI, dziedziczenie

Instalacja i opis podstawowych funkcji programu Dev-C++

Zastanawiałeś się może, dlaczego Twój współpracownik,

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

Zadania: 1. Funkcja przeliczająca F na C: float FtoC(float f){ return (f 32.0) * 5.0 / 9.0; }

START: ; start programu od adresu 0100H ; zerowanie komórek od 01H do 07FH ( 1 dec dec)

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p.

5.2. Pierwsze kroki z bazami danych

Scenariusz lekcji. Scenariusz lekcji 1 TEMAT LEKCJI: 2 CELE LEKCJI: 2.1 Wiadomości: 2.2 Umiejętności: 3 METODY NAUCZANIA: 4 ŚRODKI DYDAKTYCZNE:

Przykładowa dostępna aplikacja w Visual Studio - krok po kroku

Programowanie Niskopoziomowe

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Biblioteki DLL. 8 marca 2013

Programowanie obiektowe zastosowanie języka Java SE

Programowanie proceduralne w języku C++ Podstawy

Instrukcja instalacji winbgim

Tworzenie oprogramowania

Programowanie procesora Microblaze w środowisku SDK

Windows Workflow Foundation (wprowadzenie - prosty przykład Sequential Workflow):

Esenthel - Instalacja

System imed24 Instrukcja Moduł Analizy i raporty

Makropolecenia w PowerPoint Spis treści

Assembler w C++ Syntaksa AT&T oraz Intela

Ćwiczenia 9 - Swing - część 1

Microsoft Visual C Express Edition

C++ - [1-3] Debugowanie w Qt Creator

Krótka instrukcja instalacji Adobe Acrobat Reader

Programowanie wielowarstwowe i komponentowe

I. Spis treści I. Spis treści... 2 II. Kreator szablonów Tworzenie szablonu Menu... 4 a. Opis ikon Dodanie nowego elementu...

Instrukcja tworzenia aplikacji bazodanowej opartej o technologię Oracle i platformę.net

Środowisko Keil. Spis treści. Krzysztof Świentek. Systemy wbudowane. 1 Trochę teorii. 2 Keil

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Zadanie1. Wykorzystując serwis internetowy Wikipedii wyjaśnij następujące pojęcia: wirtualizacja, VirtualBox, Vmware, KVM, Virtual PC, Hyper-V.

1 Podstawy c++ w pigułce.

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

Transkrypt:

Dwiczenie 5. TEMAT: CEL: Tworzenie projektu asemblerowego dla środowiska Visual Studio 2008. Celem dwiczenia jest poznanie możliwości VS 2008 w zakresie tworzenia i uruchamiania aplikacji z kodem mieszanym w języku C ++ oraz asemblerze. W założeniu aplikacja składa się z dwóch elementów aplikacji napisanej w j. C++ oraz biblioteki DLL napisanej w asemblerze dla środowiska Windows. Konstrukcja projektu zakłada możliwośd wywoływania funkcji bibliotecznych napisanych w asemblerze z poziomu aplikacji oraz pokazuje prawidłową konfigurację środowiska umożliwiającą debugowanie kodu do poziomu asemblera, obserwację stanu rejestrów i flag procesora czy obszarów pamięci danych. ZAŁOŻENIA: W środowisku VS 2008 zakładamy solucję składającą się z dwóch projektów: Projekt aplikacja WIN32 w j. C++, Projekt biblioteka DLL w asemblerze, W bibliotece DLL utworzona zostanie funkcja asemblerowa, której wywołanie i przekazywanie parametrów wystąpi w aplikacji. WYKONANIE: W środowisku VS 2008 tworzymy nową solucję o nazwie JALAB5 wybierając nowy Win32 Project o nazwie JAApp jak na Rys. 1: Rys.1 Nowy Projekt

Z opcjami jak na Rys. 2: Rys. 2 Opcje projektu aplikacji C++ Następnie dodajemy nowy projekt JAAsm jak na Rys. 3: Rys. 3 Dodawanie nowego projektu do solucji

Z następującymi opcjami przedstawionymi na Rys.4: Rys. 4 Opcje projektu DLL Po dodaniu nowego projektu wygląd środowiska przedstawia Rys.5: Rys. 5 Wygląd solucji składającej się z dwóch projektów

Następnie tworzymy za pomocą programu Notepad pusty plik o nazwie LabAsm.asm i umieszczamy go w katalogu projektu JAAsm. Wybieramy projekt JAAsm za pomocą myszki a następnie po wciśnięciu prawego przycisku myszki wybieramy menu Add Existing Item. Pojawia się okno dialogowe przedstawione na Rys.7. Zaznaczamy plik LibAsm.asm i dodajemy go do projektu. Rys. 6 Dodanie pliku źródłowego *.asm do projektu DLL Środowisko VS 2008 rozpoznaje rozszerzenie *.asm i wyświetlony zostaje dialog Rys. 8: Rys. 8 Określenie sposobu kompilacji pliku *.asm

Zaznaczamy MASM oznaczającą, że dany plik asm będzie kompilowany za pomocą wbudowanego do środowiska makroasemblera ml.exe i naciskamy OK. EKSPORT FUNKCJI. Eksport funkcji napisanych w module LibAsm.asm do użycia w aplikacji JAApp można wykonad na kilka sposobów. Jednym z nich jest utworzenie pliku LibAsm.def w katalogu projektu JAAsm o przykładowej treści: LIBRARY EXPORTS MyProc1 MyProc2 "JAAsm" Gdzie eksportowi podlegają dwie funkcje o nazwach My Proc1 i MyProc2. Plik LibAsm.def należy dodad do projektu JAAsm jak poprzednio poprzez wybranie opcji projektu Add Existing Item. Następnie w ogólnych właściwościach projektu należy wpisad jego nazwę w opcjach linkera jak na Rys. 9 Rys. 9 Dołączenie pliku *.def do projektu DLL

Po wykonaniu tych czynności możemy przystąpid do pisania procedur asemblerowych MyProc1 i MyProc2 jakie będą wywoływane z poziomu aplikacji projektu JAApp. W aplikacji JAApp funkcje biblioteczne można wywoływad na dwa sposoby: Statycznie poprzez linkowanie pliku LibAsm.lib w opcjach linkera aplikacji JAApp Rys. 10. Dynamicznie ładując bibliotekę JAAsm.dll utworzona za pomocą projektu JAAsm w miejscu gdzie będzie wywoływana jedna eksportowanych funkcji za pomocą funkcji API HLIBRARY LoadLibrary (LPCWSTR lplibfilename) Statyczny model wywołania funkcji MyProc1 z biblioteki DLL w kodzie źródłowym JAApp.cpp przedstawia poniższy przykład: Rys. 10 Statyczne linkowanie biblioteki DLL do projektu Przykład procedury asemblerowej MyProc1 wywoływanej z poziomu aplikacji JAApp:.486.model flat, stdcall.code MyProc1 proc x: DWORD, y: DWORD xor eax,eax mov eax,x mov ecx,y ror ecx,1

shld eax,ecx,2 jnc ET1 mul y ret ET1: mul x neg y ret MyProc1 endp end W projekcie JAApp zawartośd pliku JAApp.cpp jest następująca: // JAApp.cpp : Defines the entry point for the application. // #include "stdafx.h" #include "JAApp.h" #define MAX_LOADSTRING 100 // Global Variables: // Forward declarations of functions included in this code module: int APIENTRY _twinmain(hinstance hinstance, HINSTANCE hprevinstance, LPTSTR lpcmdline, int ncmdshow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // TODO: Place code here. MSG msg; HACCEL hacceltable; // Initialize global strings LoadString(hInstance, IDS_APP_TITLE, sztitle, MAX_LOADSTRING); LoadString(hInstance, IDC_TEST, szwindowclass, MAX_LOADSTRING); MyRegisterClass(hInstance); int x = 3,y = 4, z = 0; z = MyProc1 (x, y); // wywołanie procedury asemblerowej z biblioteki // Perform application initialization: if (!InitInstance (hinstance, ncmdshow)) { return FALSE; hacceltable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TEST)); // Main message loop: while (GetMessage(&msg, NULL, 0, 0)){ if (!TranslateAccelerator(msg.hwnd, hacceltable, &msg)){ TranslateMessage(&msg); DispatchMessage(&msg); return (int) msg.wparam;

W projekcie JAApp zawartośd pliku JAApp.h jest następująca: #pragma once #include "resource.h" #include <windows.h> extern "C" int _stdcall MyProc1 (DWORD x, DWORD y); Po skompilowaniu całości solucji możliwe będzie wywołanie funkcji bibliotecznej MyProc1 z aplikacji JAAsm.exe a w trakcie debugowania w trybie krokowym możliwe jest wykonywanie pojedynczych rozkazów asemblerowych i obserwowanie zmian rejestrów procesora i flag. Dynamiczny model wywołania funkcji MyFunc1 z biblioteki DLL w kodzie źródłowym JAApp.cpp przedstawia poniższy przykład: typedef DWORD (*MYPROC1)(DWORD, DWORD); MYPROC1 HMODULE DWORD MyFunc1; hlib; dwz,dwx,dwy; if ((hlib = LoadLibrary ("JAAsm.dll"))!= NULL) { MyFunc1 = (MYPROC1)GetProcAddress (hlib,"myproc1"); if (MyFunc1!= NULL) dwz = MyFunc1 (dwx,dwy); FreeLibrary (hlib); Projekt JAApp w Windows Forms Applications. W przypadku użycia jako aplikacji wywołującej Windows Forms Application istnieje koniecznośd modyfikacji standardowych parametrów linkera aby możliwe było debugowanie krokowe. 1. Zaczynamy od utworzenia nowego projektu: File -> New -> Project W eksploratorze wybieramy Visual C++ -> CLR -> Windows Forms Application i podajemy nazwę JAApp. 2. Następnie dodajemy projekt LbAsm tak jak opisano powyżej 3. Teraz klikamy PPM na Solutions (eksplorator z lewej strony ekranu) i wybieramy z kooca Properities po czym wybieramy Project Dependencies i w rozwijalnym menu wybieramy JAApp oraz zaznaczamy poniżej biblioteka. Zabieg ten służy ustaleniu zależności pomiędzy projektami. 4. Następnie klikamy PPM na JAApp ( i znów eksplorator z lewej strony ekranu) i wybieramy z kooca Properities i wybieramy Configuration Properities -> General, a następnie w oknie Common Languge zmieniamy na z (/clr :pure) na (/clr). 5. Następnie w Configuration Properities -> Linker -> Input w oknie wybieramy trzy kropki(podanie ścieżki) w Additional Dependencies i podajemy następującą ścieżkę:..\debug\libasm.lib co potwierdzamy poprzez OK.