Prvi koraci sa montažom

Sadržaj
Skupština je jezik niske razine čija je funkcija pružiti sve potrebne elemente za programiranje arhitekture stolnih računala ili prijenosnih računala. Njegova je krivulja učenja pomalo strma i vrlo se malo koncepata može primijeniti iz jezika na visokoj razini, kao što je npr Python, Ruby ili JavaMeđutim, to je najmoćniji jezik za programiranje arhitektura na temelju x64.
Unatoč tome što je složen jezik, u svojim najnovijim inačicama ostavlja po strani uporabu heksadecimalnih znakova i zamjenjuje ih konvencijama imenovanja koje se lakše pamte i čitaju, osim što imaju veće karakteristike poput dopuštanja korištenja makronaredbi i uključivanja koje definira korisnik vrste podataka.
Kad proces razvoja završi, ove linije koda čita program za montažu, a zatim se prevodi u strojni kod postupkom sličnim onom kompilacija na jezicima visoke razine, ali ovdje se to naziva pridružiti.
Za potrebe ovog vodiča prvo ćemo vidjeti kakav je proces kodiranja 32 bit, budući da je to temeljni korak za postizanje boljeg razumijevanja jezika i procesa kodiranja u aplikacijama 64 bit, dijeleći mnoge karakteristike s arhitekturom x86 64-bitni.
Postoji mnogo načina za početak kodiranja Skupština za 32-bitne aplikacije, ali jedan od najjednostavnijih i najpraktičnijih načina je to učiniti Vizualni studio budući da ima nešto što se zove sastavljen na internetu gdje je kod Skupština je ugrađen u C ++ normalno i trenutno, to se može učiniti u jednom retku ili u blokovima koda sa rezerviranom riječju __asm.
VažnoKljučna riječ __asm ​​može se koristiti s jednim donjim crtom. Ovo je stara direktiva koja se koristi za osiguravanje kompatibilnosti u manje modernim aplikacijama.
Nakon što smo to razjasnili, prvo što moramo učiniti je dobiti Vizualni studio, za ovaj smo vodič koristili verziju Izraziti međutim kôd vrijedi u obje verzije SDI. Na sljedećoj poveznici preuzimamo našu SDI i pokrećemo u programu za instalaciju:

Nakon što instalacijski proces završi, možemo početi kodirati u Skupština, za ovo ćemo napraviti mali primjer gdje ćemo pokazati kako možemo ugraditi kod Skupština u C ++ uz rezerviranu riječ __asm, gdje će se svaki segment koda pored ove riječi tretirati kao izvorni kôd iz Skupština od strane sastavljača C ++.
Otvaramo naš Visual Studio i stvaramo novi projekt tipa Konzolna aplikacija Win32, guramo u redu i prikazat će se čarobnjak za stvaranje projekta koji će nas pitati koju vrstu projekta želimo, a ako želimo prazan, preporučujemo da ostavite sve zadane opcije i pritisnete Završiti:

POVEĆAJTE

Čarobnjak će stvoriti osnovni kod za naš projekt, koji će sadržavati biblioteku i glavnu metodu, trebala bi izgledati ovako:
 #include "stdafx.h" int _tmain (int argc, _TCHAR * argv []) {return 0;}
Budući da sada imamo osnovni kod, moramo dodati našu liniju Skupština, dodatno moramo dodati knjižnicu da bismo mogli ispisivati ​​putem konzole i imenski prostor kako bi sve radilo ispravno, pogledajmo konačni kod:
 #include "stdafx.h" #include using namespace std; int _tmain (int argc, _TCHAR * argv []) {int x = 0; _asm mov x, 25 cout << "Vrijednost za x je:" <<>
Ono što smo ovdje učinili je definiranje varijable koja se zove x, a zatim kroz kod Skupština dodjeljujemo mu vrijednost 25, da bismo ga konačno ispisali cout, kao što vidimo, prilično je jednostavan postupak ugradnje Šifra montaže, sada samo trebamo pokrenuti naš mali program, za to možemo pritisnuti Ctrl + F5 gdje će se naš program sastaviti i izvršiti, da vidimo kako ova operacija izgleda:

POVEĆAJTE

Dodatno možemo uključiti više redaka koda iz Skupština u našem kodu C ++, što možemo postići postavljanjem rezervirane riječi __asm i otvaranjem bloka koda, da vidimo kako ćemo to postići:
 float Sqrt (float f) {__asm ​​{fld f // Stavite f na stek operacija fsqrt // Izračunajte sqrt}}
Prednosti inline montažeMnogo je prednosti korištenja ugrađene montaže umjesto izvorne aplikacije 32 bit od Skupština, na primjer slanje parametara funkcijama u potpunosti se bavi prevoditeljem C ++ i ubacit će točnu količinu strojnog koda tako da ne moramo brinuti o prekomjernoj količini memorije ili slično.
No, kao što imamo prednosti, tako i kod ovog načina kodiranja nalazimo nedostatke, jedan od njih je taj što programer gubi malo kontrole nad aplikacijom, poput manipuliranja hrpom ili čak definiranja vlastitih konvencija.
Mrežna montaža nudi veliku fleksibilnost i omogućuje nam brz i lak ulazak u ovaj svijet, ali ova metoda kodiranja sprječava programere u pristupu nekim elementima montaže, zbog toga je uobičajeno dodavati izvorni i zasebni kôd u naš projekt.
Za to moramo zasebno stvoriti svoje datoteke, a zatim uključiti potrebne metode, da bismo postigli svoj cilj, slijedit ćemo sljedeće korake:
1- Prvo stvaramo novi projekt, to može biti projekt tipa C ++ ili od Windows aplikacija, oboje rade na dodavanju datoteka Skupština.
2- Dodajemo datoteku C ++ na naš projekt koji ćemo nazvati ravnatelj.cpp koji će biti zadužen za pozivanje postupka iz naše datoteke Skupština pošaljite mu niz numeričkih vrijednosti, a zatim ispišite ono što ovaj postupak vraća, pogledajmo sadržaj naše datoteke ravnatelj.cpp:
 #include using namespace std; extern "C" int findMinorNum (int * i, int count); int main () {int arr [] = {4, 2, 6, 4, 5, 1, 8, 9, 5, -5}; cout << "Najmanji broj je:" << findMinorNum (arr, 10) << endl; cin.get (); vrati 0;}
3- Zatim desnom tipkom miša kliknite naš projekt, on se nalazi s desne strane našeg sučelja, u odjeljku Explorer Explorer. Odabiremo Izgradite ovisnosti a kasnije Izradite prilagodbe. To činimo kako bismo utvrdili kako će Visual Studio rukovati datotekama s nastavkom .asmBudući da ne želimo da C ++ prevoditelj sastavlja ove datoteke, naš je cilj da VS dostavi te datoteke VIŠE M tako da ih sastavim, a zatim će te datoteke povezane s našim C ++ biti odgovorne za formiranje konačne izvršne datoteke.
4- Za kraj sa ovisnostima odabiremo opciju više M kao što možemo vidjeti na sljedećoj slici:

POVEĆAJTE

Ovaj korak je važno izvesti prije dodavanja datoteka s kodom sklopa kao Vizualni studio dodjeljuje što datoteka treba učiniti kada je stvorena, a ne kada je izgrađena.
5- Zatim moramo dodati još jednu C ++ datoteku, ali ovaj put s nastavkom .asm, za ovaj tutorial nazvao sam ga assembler.asm. Na isti način možemo mu dodati bilo koje ime osim main.asm jer prevoditelj može imati problema s lociranjem vaše glavne metode.
6- Naša arhiva assembler.asm On će biti zadužen za izračunavanje iz niza numeričkih vrijednosti koja je najmanja vrijednost među njima, a zatim C ++ Pobrinut će se za primanje vrijednosti za obradu putem cout -a, pogledajmo sadržaj naše datoteke:
 ; 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 Završeno ; MainLoop: cmp dword ptr [edx], eax; cmovl eax, dword ptr [edx]; add edx, 4; dec ecx; jnz MainLoop; Završeno: ret; findNumMinor endpend
To nam omogućuje odvajanje datoteka, kao i logiku. Realizacija ove vrste postupaka na temelju 32 bita vrlo se malo koristi, ali važno je znati sve njezine implikacije, da vidimo sada kako mijenjamo naš kôd za primjenu 64 bit kao i korake koje moramo poduzeti kako bismo prilagodili svoje okruženje Vizualni studio.
Visual Studio uključuje sve potrebne alate za dodavanje izvorne montaže u naš projekt C ++, ali raditi na temelju 64 bit moramo napraviti neke dodatne konfiguracije našem projektu, da vidimo:
1- Koraci za provođenje ove vrste kodiranja slični su našem prethodnom primjeru, ali za prilagodbu VS idemo na opciju Izgraditi i mi biramo Upravitelj konfiguracije:

2- Na zaslonu upravitelja konfiguracije ćemo odabrati opciju Novi ili novo u stupcu platforme, koji će prikazati drugi zaslon za odabir platforme projekta, mi odabiremo x64 i u opciji Kopirajte postavke iz ostavili smo odabranu opciju od Win32. Ovo će učiniti VS promijenite staze verzije iz 32 bit od VIŠE M na to od 64, pa će sav posao obaviti IDE.

POVEĆAJTE

3- Nakon što to učinimo, možemo sastaviti naš kôd i izvršiti ga, međutim moramo promijeniti svoju datoteku Skupština budući da radimo na različitim arhitekturama, pogledajmo novi kod za našu datoteku:
; Oglas: assembler.asm .code; int findMinorNum (int * arr, int count) FindSmallest proc; mov eax, 7fffffffh; cmp edx, 0; jle Završeno; MainLoop: cmp dword ptr [rcx], eax; cmovl eax, dword ptr [rcx]; dodaj rcx, 4; dec edx; jnz MainLoop; Dovršeno: ret; FindSmallest endp; kraj;
Ovim smo završili ovaj vodič, već smo prvi put pogledali programiranje s Skupština, u početku se može činiti donekle složenim, ali uz odgovarajuće ovladavanje C ++ te osnovnim pojmovima strojnog jezika možemo postići zanimljive i korisne stvari u svom razvoju.Je li vam se svidio i pomogao ovaj vodič?Autor možete nagraditi pritiskom na ovaj gumb kako biste mu dali pozitivan bod
wave wave wave wave wave