Pirmieji surinkimo žingsniai

Turinys
Surinkimas yra žemo lygio kalba, kurios funkcija yra pateikti visus reikalingus elementus planuojant stalinių kompiuterių ar nešiojamųjų kompiuterių architektūrą. Jo mokymosi kreivė yra šiek tiek stati ir labai mažai sąvokų galima pritaikyti iš aukšto lygio kalbų, tokių kaip „Python“, „Ruby“ arba „Java“Tačiau tai yra galingiausia programavimo architektūrų kalba, pagrįsta x64.
Nepaisant sudėtingos kalbos, naujausiose jo versijose jis nenaudoja šešioliktainių ir pakeičia jas pavadinimo sutartimis, kurias lengviau įsiminti ir skaityti, be to, jos pasižymi aukštesnėmis savybėmis, pvz., Leidžia naudoti makrokomandas ir įtraukimą duomenų tipai.
Kai kūrimo procesas baigiasi, šias kodo eilutes perskaito surinkimo programa, o tada išverčia į mašinos kodą panašiu procesu kompiliacija aukšto lygio kalbomis, bet čia jis vadinamas prisijungti.
Šios pamokos tikslais pirmiausia pamatysime, koks yra kodavimo procesas 32 bitų, nes tai yra esminis žingsnis siekiant geriau suprasti kalbą ir kodavimo procesą programose 64 bitų, tai dalijantis daugybe architektūros savybių x86 64 bitų.
Yra daug būdų, kaip pradėti koduoti Surinkimas skirta 32 bitų programoms, tačiau vienas lengviausių ir praktiškiausių būdų tai padaryti yra Vizualinė studija nes jis turi kažką pavadinto surinkta internete kur kodas Surinkimas yra įterptas į C ++ normalus ir dabartinis, tai galima padaryti vienoje eilutėje arba kodo blokais su rezervuotu žodžiu __asm.
SvarbuRaktinį žodį __asm ​​galima naudoti su vienu pabraukimu. Tai sena direktyva, naudojama siekiant užtikrinti suderinamumą mažiau moderniose programose.
Tai išsiaiškinę, pirmiausia turime gauti Vizualinė studija, šiai pamokai naudojome versiją Ekspresas tačiau kodas galioja abiejose SDI. Atsisiųsime šią nuorodą mūsų SDI ir mes vykdome diegimo programą:

Baigę diegimo procesą, galime pradėti koduoti Surinkimas, tam padarysime nedidelį pavyzdį, kuriame parodysime, kaip galime įterpti kodą Surinkimas į C ++ su rezervuotu žodžiu __asm, kur bet koks kodo segmentas šalia šio žodžio bus laikomas savuoju kodu iš Surinkimas sudarytojas C ++.
Mes atidarome „Visual Studio“ ir sukuriame naują tipo projektą „Win32“ konsolės programa, stumiame Gerai ir bus rodomas projekto kūrimo vedlys, kuris paklaus mūsų, kokio tipo projekto norime, o jei norime tuščio, rekomenduojame palikti visas numatytas parinktis ir paspausti Užbaigti:

DIDELIS

Vedlys sukurs pagrindinį mūsų projekto kodą, kuriame bus biblioteka ir pagrindinis metodas, jis turėtų atrodyti taip:
 #include "stdafx.h" int _tmain (int argc, _TCHAR * argv []) {return 0;}
Turėdami bazinį kodą, turime pridėti savo eilutę Surinkimas, be to, turime pridėti biblioteką, kad galėtume spausdinti naudodami konsolę ir vardų sritis kad viskas veiktų teisingai, pažiūrėkime galutinį kodą:
 #include "stdafx.h" #include using namespace std; int _tmain (int argc, _TCHAR * argv []) {int x = 0; _asm mov x, 25 cout << "x reikšmė:" <<>
Tai, ką mes čia padarėme, yra apibrėžti kintamąjį, vadinamą x, o tada per kodą Surinkimas mes priskiriame jai 25 reikšmę, kad galiausiai ją atspausdintume cout, kaip matome, įterpti yra gana paprastas procesas Surinkimo kodas, dabar mums tereikia paleisti savo mažą programą, nes tai galime spausti Ctrl + F5 kur bus sudaryta ir vykdoma mūsų programa, pažiūrėkime, kaip atrodo ši operacija:

DIDELIS

Be to, galime įtraukti kelias kodo eilutes iš Surinkimas mūsų kode C ++, kurį galime pasiekti padėdami rezervuotą žodį __asm ir atidarydami kodo bloką, pažiūrėkime, kaip tai pasiekiame:
 float Sqrt (float f) {__asm ​​{fld f // Įdėkite f ant operacijų kamino fsqrt // Apskaičiuokite sqrt}}
Inline surinkimo privalumaiYra daug privalumų naudojant įterptąjį surinkimą, o ne vietinę 32 bitų apie Surinkimas, pavyzdžiui, parametrų siuntimą į funkcijas visiškai tvarko kompiliatorius C ++ ir jis suleis tikslų mašinos kodo kiekį, todėl mums nereikės nerimauti dėl atminties perpildymo ar pan.
Tačiau, kaip ir turėdami privalumų, taip pat randame ir trūkumų, susijusių su šiuo kodavimu, vienas iš jų yra tas, kad kūrėjas praranda šiek tiek programos kontrolės, pavyzdžiui, manipuliuoja krūva ar net apibrėžia savo susitarimus.
Internetinis surinkimas suteikia daug lankstumo ir leidžia mums greitai ir lengvai patekti į šį pasaulį, tačiau šis kodavimo metodas neleidžia kūrėjams pasiekti kai kurių surinkimo elementų, todėl įprasta prie mūsų projekto pridėti savąjį ir atskirą kodą.
Norėdami tai padaryti, turime sukurti savo failus atskirai ir tada įtraukti reikalingus metodus, kad pasiektume savo tikslą, atliksime šiuos veiksmus:
1- Pirmiausia sukuriame naują projektą, tai gali būti tipo projektas C ++ arba iš „Windows“ programa, abu padeda pridėti failus iš Surinkimas.
2- Pridedame failą C ++ į mūsų projektą, kuriam paskambinsime pagrindinis.cpp kuris bus atsakingas už procedūros iškvietimą iš mūsų bylos Surinkimas nusiųsdami jam skaičių reikšmių masyvą ir atspausdinę, ką ši procedūra grąžina, pažiūrėkime savo failo turinį pagrindinis.cpp:
 #include naudojant vardų sritį std; extern "C" int findMinorNum (int * i, int count); int main () {int arr [] = {4, 2, 6, 4, 5, 1, 8, 9, 5, -5}; cout << "Mažiausias skaičius:" << findMinorNum (arr, 10) << endl; cin.get (); grįžti 0;}
3- Tada dešiniuoju pelės mygtuku spustelėkite mūsų projektą, jis yra dešinėje mūsų sąsajos pusėje Sprendimų tyrinėtojas. Mes pasirenkame Sukurkite priklausomybes ir vėliau Sukurkite tinkinimus. Tai darome norėdami nustatyti, kaip „Visual Studio“ tvarkys failus su plėtiniu .asmKadangi nenorime, kad C ++ kompiliatorius sudarytų šiuos failus, mūsų tikslas yra, kad VS teiktų šiuos failus DAUGIAU M. kad aš juos surinksiu ir tada šie failai, susieti su mūsų C ++, bus atsakingi už galutinio vykdomojo failo sudarymą.
4- Norėdami užbaigti priklausomybes, pasirenkame parinktį daugiau M. kaip matome šiame paveikslėlyje:

DIDELIS

Prieš atlikdami bet kokius failus su surinkimo kodu kaip, svarbu atlikti šį veiksmą Vizualinė studija priskiria tai, ką failas turi daryti, kai jis sukuriamas, o ne kuriamas.
5- Tada turime pridėti dar vieną C ++ failą, bet šį kartą su plėtiniu .asm, šiai pamokai aš ją pavadinau surinkėjas.asm. Lygiai taip pat galime jam suteikti bet kokį pavadinimą, išskyrus main.asm, nes kompiliatoriui gali kilti problemų nustatant, kur yra jūsų pagrindinis metodas.
6- Mūsų archyvas surinkėjas.asm Ji bus atsakinga už skaičiavimą iš daugybės skaitinių verčių, kuri yra mažiausia iš šių verčių C ++ Ji pasirūpins, kad gautų vertę, kad ją apdorotų per cout, pažiūrėkime savo failo turinį:
 ; 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 Baigta ; „MainLoop“: cmp dword ptr [edx], eax; cmovl eax, dword ptr [edx]; pridėti edx, 4; dec ecx; jnz MainLoop; Baigta: ret; findNumMinor endpend
Tai leidžia mums atskirti failus ir logiką. Šio tipo procedūrų, pagrįstų 32 bitais, įgyvendinimas yra labai mažai naudojamas, tačiau svarbu žinoti visas jo pasekmes, dabar pažiūrėkime, kaip keičiame savo kodą, skirtą programai 64 bitų taip pat veiksmus, kurių turime imtis, kad pritaikytume savo aplinką Vizualinė studija.
„Visual Studio“ yra visi reikalingi įrankiai, skirti pridėti vietinį surinkimą prie mūsų projekto C ++, bet dirbti remiantis 64 bitų turime atlikti keletą papildomų projekto konfigūracijų, pažiūrėkime:
1- Šio tipo kodavimo veiksmai yra panašūs į ankstesnį pavyzdį, tačiau prisitaikyti VS einame prie varianto Statyti ir mes pasirenkame Konfigūracijos valdytojas:

2- Konfigūracijų tvarkyklės ekrane pasirinksime parinktį Naujas arba naujas platformos stulpelyje, kuriame bus rodomas antras ekranas, kuriame bus pasirinkta projekto platforma, mes pasirenkame x64 ir pasirinkime Kopijuoti nustatymus iš palikome pasirinkę parinktį Win32. Tai padarys VS pakeisti versijos kelius iš 32 bitų apie DAUGIAU M. į tą 64, tad visą darbą atliks IDE.

DIDELIS

3- Kai tai bus padaryta, galime surinkti savo kodą ir jį vykdyti, tačiau turime pakeisti savo failą Surinkimas kadangi dirbame su skirtingomis architektūromis, pažiūrėkime naują failo kodą:
 ; Sąrašas: assembler.asm .code; int findMinorNum (int * arr, int count) FindSmolest proc; mov eax, 7fffffffh; cmp edx, 0; jle Baigta; MainLoop: cmp dword ptr [rcx], eax; cmovl eax, dword ptr [rcx]; pridėti rcx, 4; dec edx; jnz MainLoop; Baigta: ret; FindSmolest endp; galas;
Baigę šią pamoką, mes jau pirmą kartą pažvelgėme į programavimą Surinkimas, iš pradžių tai gali atrodyti sudėtinga, tačiau tinkamai įvaldžius C ++ ir pagrindines mašinų kalbos sąvokas galime pasiekti įdomių ir naudingų dalykų.Ar jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave