Pirmie soļi ar montāžu

Satura rādītājs
Montāža ir zema līmeņa valoda, kuras funkcija ir nodrošināt visus nepieciešamos elementus galddatoru vai klēpjdatoru arhitektūras programmēšanai. Tās mācīšanās līkne ir nedaudz stāva, un ļoti maz jēdzienu var izmantot no augsta līmeņa valodām, piemēram Python, Ruby vai JavaTomēr tā ir visspēcīgākā valoda programmēšanas arhitektūrām, kuru pamatā ir x64.
Lai gan tā ir sarežģīta valoda, tā jaunākajās versijās tā atstāj malā heksadecimālo skaitļu izmantošanu un aizstāj tās ar nosaukšanas konvencijām, kuras ir vieglāk atcerēties un lasīt, turklāt tām ir augstākas īpašības, piemēram, atļauts izmantot makro un iekļaut lietotāja definētu iekļaušanu datu veidi.
Kad izstrādes process beidzas, šīs koda rindas nolasa montāžas programma un pēc tam tiek tulkotas mašīnas kodā, izmantojot procesu, kas ir līdzīgs procesam apkopojums augsta līmeņa valodās, bet šeit to sauc pievienojies.
Šīs apmācības nolūkos mēs vispirms redzēsim, kāds ir kodēšanas process 32 bitu, jo tas ir būtisks solis, lai panāktu labāku valodas izpratni un kodēšanas procesu lietojumprogrammās 64 bitu, ar arhitektūru kopīgojot daudzas īpašības x86 64 bitu.
Ir daudz veidu, kā sākt kodēšanu Montāža 32 bitu lietojumprogrammām, taču viens no vienkāršākajiem un praktiskākajiem veidiem, kā to izdarīt, ir Vizuālā studija jo tam ir kaut kas saucams samontēts tiešsaistē kur kods Montāža ir iestrādāts C ++ normālu un pašreizēju, to var izdarīt vienā rindā vai koda blokos ar rezervēto vārdu __asm.
SvarīgsAtslēgvārdu __asm ​​var izmantot ar vienu pasvītrojumu. Šī ir veca direktīva, ko izmanto, lai nodrošinātu savietojamību mazāk modernās lietojumprogrammās.
To noskaidrojot, pirmā lieta, kas mums jādara, ir iegūt Vizuālā studija, šai apmācībai mēs izmantojām versiju Ekspress tomēr kods ir derīgs abās versijās SDI. Mēs lejupielādējam šo saiti mūsu SDI un mēs darbojamies instalētājā:

Pēc instalēšanas procesa beigām mēs varam sākt kodēšanu Montāža, šim nolūkam mēs sniegsim nelielu piemēru, kurā parādīsim, kā mēs varam iegult kodu Montāža iekšā C ++ ar rezervēto vārdu __asm, kur jebkurš koda segments blakus šim vārdam tiks uzskatīts par vietējo kodu no Montāža pēc sastādītāja C ++.
Mēs atveram savu Visual Studio un izveidojam jaunu tipa projektu Win32 konsoles lietojumprogramma, mēs spiežam Labi un tiks parādīts projekta izveidošanas vednis, kas jautās, kāda veida projektu mēs vēlamies, un, ja mēs vēlamies tukšu, mēs iesakām atstāt visas noklusējuma opcijas un nospiest Pabeigt:

PALIELINĀT

Vednis izveidos mūsu projekta bāzes kodu, kurā būs bibliotēka un galvenā metode, tam vajadzētu izskatīties šādi:
 #include "stdafx.h" int _tmain (int argc, _TCHAR * argv []) {return 0;}
Kam ir pamata kods, mums jāpievieno sava rindiņa MontāžaTurklāt mums jāpievieno bibliotēka, lai varētu drukāt, izmantojot konsoli un vārda telpa lai viss darbotos pareizi, apskatīsim galīgo kodu:
 #include "stdafx.h" #include using namespace std; int _tmain (int argc, _TCHAR * argv []) {int x = 0; _asm mov x, 25 cout << "x vērtība ir:" <<>
Šeit mēs esam definējuši mainīgo ar nosaukumu x un pēc tam caur kodu Montāža mēs piešķiram tai vērtību 25, lai beidzot to izdrukātu cout, kā mēs redzam, tas ir diezgan vienkāršs process Montāžas kods, tagad mums tikai jāpalaiž sava mazā programma, lai to izdarītu Ctrl + F5 kur mūsu programma tiks apkopota un izpildīta, redzēsim, kā izskatās šī darbība:

PALIELINĀT

Turklāt mēs varam iekļaut vairākas koda rindas no Montāža mūsu kodā C ++, ko mēs varam sasniegt, ievietojot rezervēto vārdu __asm un atverot koda bloku, redzēsim, kā mēs to sasniedzam:
 float Sqrt (float f) {__asm ​​{fld f // Ievietojiet f operāciju kaudzē fsqrt // Aprēķiniet sqrt}}
Inline montāžas priekšrocībasIekļautās montāžas izmantošana vietējās lietojumprogrammas vietā sniedz daudz priekšrocību 32 bitu no Montāža, piemēram, parametru nosūtīšanu funkcijām pilnībā apstrādā tās sastādītājs C ++ un tas ievadīs precīzu mašīnas koda daudzumu, lai mums nebūtu jāuztraucas par atmiņas pārpildi vai kaut ko tamlīdzīgu.
Bet, tāpat kā mums ir priekšrocības, mēs atrodam arī trūkumus šādā kodēšanas veidā, viens no tiem ir tas, ka izstrādātājs zaudē mazliet kontroli pār lietojumprogrammu, piemēram, manipulējot ar steku vai pat definējot savas konvencijas.
Tiešsaistes montāža piedāvā daudz elastības un ļauj mums ātri un viegli iekļūt šajā pasaulē, taču šī kodēšanas metode neļauj izstrādātājiem piekļūt dažiem montāžas elementiem, tāpēc mūsu projektam ir ierasts pievienot vietējo un atsevišķo kodu.
Šim nolūkam mums ir jāizveido faili atsevišķi un pēc tam jāiekļauj nepieciešamās metodes, lai sasniegtu savu mērķi, mēs veiksim šādas darbības:
1- Vispirms mēs izveidojam jaunu projektu, tas var būt tipa projekts C ++ vai no Windows lietotne, abi strādā, lai pievienotu failus no Montāža.
2- Mēs pievienojam failu C ++ uz mūsu projektu, kuru mēs piezvanīsim galvenais.cpp kas būs atbildīgs par procedūras izsaukšanu no mūsu datnes Montāža nosūtot tam skaitlisku vērtību masīvu un pēc tam izdrukājot, ko šī procedūra atgriež, apskatīsim mūsu faila saturu galvenais.cpp:
 #include izmantojot nosaukumvietas std; extern "C" int findMinorNum (int * i, int count); int main () {int arr [] = {4, 2, 6, 4, 5, 1, 8, 9, 5, -5}; cout << "Mazākais skaitlis ir:" << findMinorNum (arr, 10) << endl; cin.get (); atgriezties 0;}
3- Pēc tam ar peles labo pogu noklikšķiniet uz mūsu projekta, tas ir atrodams mūsu saskarnes labajā pusē sadaļā Risinājumu pētnieks. Mēs izvēlamies Veidojiet atkarības un vēlāk Veidojiet pielāgojumus. Mēs to darām, lai noteiktu, kā Visual Studio apstrādās failus ar paplašinājumu .asmTā kā mēs nevēlamies, lai C ++ kompilators apkopotu šos failus, mūsu mērķis ir, lai VS nodrošinātu šos failus VAIRĀK M. lai es tos saliktu un tad šie faili, kas saistīti ar mūsu C ++, būs atbildīgi par galīgā izpildāmā faila izveidi.
4- Lai pabeigtu atkarības, mēs izvēlamies iespēju vairāk M kā mēs varam redzēt šajā attēlā:

PALIELINĀT

Ir svarīgi veikt šo darbību, pirms pievienojat failus ar montāžas kodu kā Vizuālā studija piešķir, kas failam jādara, kad tas tiek izveidots, nevis, kad tas tiek veidots.
5- Tad mums jāpievieno vēl viens C ++ fails, bet šoreiz ar paplašinājumu .asm, šai apmācībai es to nosaucu montētājs.asm. Tādā pašā veidā mēs varam tam pievienot jebkuru nosaukumu, izņemot main.asm, jo ​​kompilatoram var būt problēmas atrast jūsu galvenās metodes atrašanās vietu.
6- Mūsu arhīvs montētājs.asm Tā būs atbildīga par aprēķinu no skaitlisko vērtību sērijas, kura ir mazākā vērtība starp šīm un tad C ++ Tā parūpēsies par vērtības saņemšanu, lai to apstrādātu caur cout. Apskatīsim mūsu faila saturu:
 ; montētājs.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 Pabeigts ; MainLoop: cmp dword ptr [edx], eax; cmovl eax, dword ptr [edx]; pievienot edx, 4; dec ecx; jnz MainLoop; Pabeigts: ret; findNumMinor endpend
Tas ļauj mums nošķirt failus un loģiku. Šāda veida procedūru īstenošana, pamatojoties uz 32 bitiem, tiek izmantota ļoti maz, taču ir svarīgi zināt visas tās sekas, tagad redzēsim, kā mēs mainām savu kodu lietojumprogrammai 64 bitu kā arī soļus, kas mums jāveic, lai pielāgotos mūsu videi Vizuālā studija.
Visual Studio ietver visus nepieciešamos rīkus, lai mūsu projektam pievienotu vietējo montāžu C ++, bet strādāt, pamatojoties uz 64 bitu mums ir jāveic dažas papildu konfigurācijas mūsu projektam, redzēsim:
1- Šāda veida kodēšanas darbības ir līdzīgas mūsu iepriekšējam piemēram, taču tās ir jāpielāgo VS ejam pie varianta Būvēt un mēs izvēlamies Konfigurācijas pārvaldnieks:

2- Konfigurācijas pārvaldnieka ekrānā mēs izvēlēsimies opciju Jauns vai jaunu platformas slejā, kurā tiks parādīts otrs ekrāns, lai atlasītu projekta platformu, mēs izvēlamies x64 un opcijā Kopēt iestatījumus no mēs atstājām, izvēloties iespēju Win32. Tas padarīs VS mainīt versijas ceļus no 32 bitu no VAIRĀK M. uz to 64, tāpēc visu darbu veiks IDE.

PALIELINĀT

3- Kad tas ir izdarīts, mēs varam apkopot savu kodu un izpildīt to, tomēr mums ir jāmaina savs fails Montāža tā kā mēs strādājam pie dažādām arhitektūrām, apskatīsim mūsu faila jauno kodu:
 ; Saraksts: assembler.asm .code; int findMinorNum (int * arr, int count) FindSmolest proc; mov eax, 7fffffffh; cmp edx, 0; jle Pabeigts; MainLoop: cmp dword ptr [rcx], eax; cmovl eax, dword ptr [rcx]; pievienojiet rcx, 4; dec edx; jnz MainLoop; Pabeigts: ret; FindSmmost endp; beigas;
Ar to mēs pabeidzam šo apmācību, mēs jau esam pirmo reizi apskatījuši programmēšanu Montāžasākumā tas var šķist sarežģīti, bet ar pienācīgu meistarību C ++ un mašīnas valodas pamatjēdzieniem mēs varam sasniegt interesantas un noderīgas lietas mūsu attīstībā.Vai jums patika šī apmācība un palīdzējāt tai?Jūs varat apbalvot autoru, nospiežot šo pogu, lai sniegtu viņam pozitīvu punktu

Jums palīdzēs attīstību vietā, daloties lapu ar draugiem

wave wave wave wave wave