Pierwsze kroki z montażem

Spisie treści
montaż to język niskiego poziomu, którego funkcją jest dostarczenie wszystkich niezbędnych elementów do programowania architektury komputerów stacjonarnych lub laptopów. Jego krzywa uczenia się jest nieco stroma i bardzo niewiele pojęć można zastosować z języków wysokiego poziomu, takich jak Python, Ruby lub JavaJest to jednak najpotężniejszy język dla architektur programowania opartych na x64.
Pomimo tego, że jest złożonym językiem, w swoich najnowszych wersjach pomija użycie szesnastkowych i zastępuje je konwencjami nazewnictwa, które są łatwiejsze do zapamiętania i odczytania, a także mają wyższe cechy, takie jak możliwość korzystania z makr i włączanie zdefiniowane przez użytkownika typy danych.
Kiedy proces rozwoju się kończy, te wiersze kodu są odczytywane przez program asemblera, a następnie tłumaczone na kod maszynowy w procesie podobnym do tego kompilacja w językach wysokiego poziomu, ale tutaj to się nazywa Przystąp.
Na potrzeby tego samouczka w pierwszej kolejności zobaczymy, jak wygląda proces kodowania w 32-bitowy, ponieważ jest to fundamentalny krok w kierunku lepszego zrozumienia języka i procesu kodowania w zastosowaniach 64-bitowy, dzieląc wiele cech z architekturą x86 64-bitowy.
Jest wiele sposobów na rozpoczęcie kodowania montaż dla aplikacji 32-bitowych, ale jednym z najprostszych i najbardziej praktycznych sposobów na to jest Studio wizualne ponieważ ma coś, co nazywa się zmontowane online gdzie kod montaż jest osadzony w C++ normalne i aktualne, można to zrobić w jednej linii lub w blokach kodu ze słowem zastrzeżonym __jako M.
WażnySłowo kluczowe __asm ​​​​może być użyte z pojedynczym podkreśleniem. Jest to stara dyrektywa używana w celu zapewnienia kompatybilności w mniej nowoczesnych aplikacjach.
Po wyjaśnieniu tego, pierwszą rzeczą, którą musimy zrobić, jest uzyskanie Studio wizualne, w tym samouczku użyliśmy wersji Wyrazić jednak kod jest ważny w obu wersjach SDI. Pobieramy w poniższym linku nasz SDI i uruchamiamy w instalatorze:

Po zakończeniu procesu instalacji możemy rozpocząć kodowanie montaż, w tym celu zrobimy mały przykład, w którym zademonstrujemy, jak możemy osadzić kod montaż w C++ z zastrzeżonym słowem __jako M, gdzie dowolny segment kodu znajdujący się obok tego słowa będzie traktowany jako kod natywny z montaż przez kompilator C++.
Otwieramy nasze Visual Studio i tworzymy nowy projekt typu Aplikacja konsoli Win32, pchamy Dobra i wyświetli się kreator tworzenia projektu, który zapyta nas jaki typ projektu chcemy i jeśli chcemy pusty, zalecamy pozostawienie wszystkich domyślnych opcji i naciśnięcie Sfinalizować:

POWIĘKSZAĆ

Kreator utworzy kod bazowy dla naszego projektu, który będzie zawierał bibliotekę i główną metodę, powinien wyglądać tak:
 #include "stdafx.h" int _tmain (int argc, _TCHAR * argv []) {return 0;}
Mając teraz kod bazowy, musimy dodać naszą linię montaż, dodatkowo musimy dodać bibliotekę, aby móc drukować przez konsolę oraz przestrzeń nazw aby wszystko działało poprawnie, zobaczmy ostateczny kod:
 #include "stdafx.h" #include używając przestrzeni nazw std int _tmain (int argc, _TCHAR * argv []) {int x = 0; _asm mov x, 25 cout << "Wartość dla x to:" <<>
To, co tutaj zrobiliśmy, to zdefiniowanie zmiennej o nazwie x, a następnie za pomocą kodu montaż przypisujemy mu wartość 25, aby ostatecznie wydrukować go za pomocą Cout, jak widać, jest to dość prosty proces osadzania Kod montażowy, teraz wystarczy uruchomić nasz mały program, w tym celu możemy nacisnąć Ctrl + F5 gdzie nasz program zostanie skompilowany i wykonany, zobaczmy jak wygląda ta operacja:

POWIĘKSZAĆ

Dodatkowo możemy dołączyć wiele linii kodu z montaż w naszym kodzie C++, co możemy osiągnąć umieszczając słowo zastrzeżone __jako M i otwierając blok kodu, zobaczmy, jak to osiągamy:
 float Sqrt (float f) {__asm ​​​​{fld f // Umieść f na stosie operacji fsqrt // Oblicz sqrt}}
Zalety montażu inlineIstnieje wiele korzyści z używania wbudowanego zestawu zamiast natywnej aplikacji 32-bitowy z montaż, na przykład wysyłanie parametrów do funkcji jest całkowicie obsługiwane przez kompilator C++ i wstrzyknie dokładną ilość kodu maszynowego, więc nie musimy się martwić o przepełnienie pamięci lub coś w tym rodzaju.
Ale tak jak mamy zalety, tak i w tym sposobie kodowania znajdujemy wady, jedną z nich jest to, że programista traci trochę kontroli nad aplikacją, na przykład manipulowanie stosem, a nawet definiowanie własnych konwencji.
Assembler online oferuje dużą elastyczność i pozwala nam szybko i łatwo wejść w ten świat, ale ta metoda kodowania uniemożliwia programistom dostęp do niektórych elementów Assembly, z tego powodu powszechne jest dodawanie natywnego i oddzielnego kodu do naszego projektu.
W tym celu musimy stworzyć nasze pliki osobno, a następnie uwzględnić metody, których potrzebujemy, aby osiągnąć nasz cel, będziemy postępować zgodnie z następującymi krokami:
1- Najpierw tworzymy nowy projekt, może to być projekt typu C++ lub z aplikacja Windows, oba pracują nad dodawaniem plików z montaż.
2- Dodajemy plik C++ do naszego projektu, który zadzwonimy główny.cpp który będzie odpowiedzialny za wywołanie procedury z naszego pliku montaż wysyłając mu tablicę wartości liczbowych a następnie wypisując co ta procedura zwraca, zobaczmy zawartość naszego pliku główny.cpp:
 #include używając przestrzeni nazw std; extern "C" int findMinorNum (int * i, int count); int main () {int arr [] = {4, 2, 6, 4, 5, 1, 8, 9, 5, -5 }; cout << "Najmniejsza liczba to:" << findMinorNum (arr, 10) << endl; cin.get (); zwróć 0;}
3- Następnie klikamy prawym przyciskiem myszy na nasz projekt, znajduje się on po prawej stronie naszego interfejsu, w sekcji Eksplorator rozwiązań. Wybieramy Zależności kompilacji i później Zbuduj dostosowania. Robimy to, aby ustalić, jak Visual Studio będzie obsługiwać pliki z rozszerzeniem .jako MPonieważ nie chcemy, aby kompilator C++ kompilował te pliki, naszym celem jest, aby VS udostępnił te pliki WIĘCEJ abym je skompilował i wtedy te pliki podlinkowane do naszego C++ będą odpowiedzialne za formowanie finalnego pliku wykonywalnego.
4- Aby zakończyć z zależnościami wybieramy opcję więcej jak widać na poniższym obrazku:

POWIĘKSZAĆ

Ważne jest, aby wykonać ten krok przed dodaniem jakichkolwiek plików z kodem zespołu jako Studio wizualne przypisuje, co plik musi zrobić, gdy jest tworzony, a nie podczas kompilacji.
5- Następnie musimy dodać kolejny plik C++, ale tym razem z rozszerzeniem .jako M, w tym samouczku nazwałem to assembler.asm. W ten sam sposób możemy nadać mu dowolną nazwę z wyjątkiem main.asm, ponieważ kompilator może mieć problemy ze zlokalizowaniem głównej metody.
6- Nasze archiwum assembler.asm Będzie odpowiedzialny za obliczanie z szeregu wartości liczbowych, która jest najmniejszą wartością spośród nich, a następnie C++ Zajmie się otrzymaniem wartości do przetworzenia przez cout, zobaczmy zawartość naszego pliku:
; assembler.asm.xmm.model flat, c.data.code findNumMenor proc exportmov edx, dword ptr [esp + 4]; mov ecx, dword ptr [esp + 8]; mov eax, 7fffffffh; cmp ecx, 0; jle Zakończono ; MainLoop: cmp dword ptr [edx], eax; cmovl eax, dword ptr [edx]; add edx, 4; dec ecx; jnz MainLoop; Zakończono: ret; findNumMinor endpend
To pozwala nam oddzielić nasze pliki, a także naszą logikę. Realizacja tego typu procedur opartych na 32 bitach jest bardzo mało wykorzystywana, ale ważne jest, aby znać wszystkie jej implikacje, zobaczmy teraz, jak zmienimy nasz kod dla aplikacji 64-bitowy a także kroki, które musimy podjąć, aby dostosować nasze środowisko Studio wizualne.
Visual Studio zawiera wszystkie niezbędne narzędzia do dodania natywnego zestawu do naszego projektu w C++, ale do pracy w oparciu o 64-bitowy musimy zrobić kilka dodatkowych konfiguracji do naszego projektu, zobaczmy:
1- Kroki w celu przeprowadzenia tego typu kodowania są podobne do naszego poprzedniego przykładu, ale należy je dostosować VS idziemy do opcji Budować a my wybieramy Manager konfiguracji:

2- Na ekranie menedżera konfiguracji wybierzemy opcję Nowy lub nowy w kolumnie platforma, która wyświetli drugi ekran do wyboru platformy projektu, którą wybieramy x64 i w opcji Kopiuj ustawienia z zostawiliśmy wybraną opcję Win32. To sprawi, że VS zmień ścieżki wersji z 32-bitowy z WIĘCEJ do tej 64, więc cała praca zostanie wykonana przez IDE.

POWIĘKSZAĆ

3- Po wykonaniu tej czynności możemy skompilować nasz kod i wykonać go, jednak musimy zmodyfikować nasz plik montaż ponieważ pracujemy nad różnymi architekturami, zobaczmy nowy kod dla naszego pliku:
; Listing: assembler.asm .code; int findMinorNum (int * arr, int count) FindSmallest proc; mov eax, 7fffffffh; cmp edx, 0;jle Zakończono; Pętla Główna: cmp dword ptr [rcx], eax; cmovl eax, dword ptr [rcx]; dodaj rcx, 4; grudzień edx; jnz pętla główna; Ukończony: ret; ZnajdźNajmniejszy koniec; koniec;
Na tym kończymy ten samouczek, już przyjrzeliśmy się programowaniu za pomocą montaż, na początku może wydawać się nieco złożony, ale z odpowiednim opanowaniem C++ i podstawowych pojęć języka maszynowego możemy osiągnąć ciekawe i przydatne rzeczy w naszych opracowaniach.Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave