Første trinn med montering

Innholdsfortegnelse
montering er et språk på lavt nivå hvis funksjon er å gi alle nødvendige elementer for programmering av arkitekturen til stasjonære PCer eller bærbare datamaskiner. Læringskurven er litt bratt, og svært få begreper kan brukes fra språk på høyt nivå som f.eks Python, Ruby eller JavaImidlertid er det det mektigste språket for programmering av arkitekturer basert på x64.
Til tross for at det er et komplekst språk, forlater det i de nyeste versjonene bruken av heksadesimaler og erstatter dem med navngivningskonvensjoner som er lettere å huske og lese, i tillegg til å ha høyere egenskaper, for eksempel bruk av makroer og inkludering brukerdefinerte datatyper.
Når utviklingsprosessen avsluttes, blir disse kodelinjene lest av samleprogrammet og deretter oversatt til maskinkode ved en prosess som ligner den samling på språk på høyt nivå, men her kalles det bli med.
I forbindelse med denne opplæringen vil vi i første omgang se hvordan kodingsprosessen er 32 bit, siden det er et grunnleggende trinn for å oppnå en større forståelse av språket og kodingsprosessen i applikasjoner av 64 bit, dette ved å dele mange egenskaper med arkitekturen x86 64-bit.
Det er mange måter å starte koding på montering for 32-biters applikasjoner, men en av de enkleste og mest praktiske måtene å gjøre det på er ved Visuelt studio siden den har noe som heter samlet på nett hvor koden til montering er innebygd i C ++ normal og nåværende, kan dette gjøres på en enkelt linje eller i blokkblokker med det reserverte ordet __asm.
ViktigSøkeordet __asm ​​kan brukes med en enkelt understreking. Dette er et gammelt direktiv som brukes for å sikre kompatibilitet i mindre moderne applikasjoner.
Etter å ha avklart dette, er det første vi må gjøre å skaffe Visuelt studio, for denne opplæringen brukte vi versjonen Uttrykke men koden er gyldig i begge versjoner av SDI. Vi laster ned i følgende lenke vår SDI og vi kjører i installasjonsprogrammet:

Etter at installasjonsprosessen er fullført, kan vi begynne å kode inn montering, for dette vil vi lage et lite eksempel hvor vi vil demonstrere hvordan vi kan bygge inn koden til montering i C ++ med det reserverte ordet __asm, hvor et kodesegment ved siden av dette ordet vil bli behandlet som opprinnelig kode fra montering av kompilatoren C ++.
Vi åpner Visual Studio og lager et nytt prosjekt av typen Win32 -konsollprogram, presser vi Greit og veiviseren for prosjektopprettelse vil bli vist, som vil spørre oss hvilken type prosjekt vi vil ha, og hvis vi vil ha et tomt, anbefaler vi at du forlater alle standardalternativene og trykker på Fullfør:

FORSTØRRE

Veiviseren vil opprette en grunnkode for prosjektet vårt, som vil inneholde et bibliotek og hovedmetoden, det skal se slik ut:
 #include "stdafx.h" int _tmain (int argc, _TCHAR * argv []) {return 0;}
Etter å ha grunnkoden nå må vi legge til linjen vår montering, i tillegg må vi legge til biblioteket for å kunne skrive ut etter konsoll og navneområde slik at alt fungerer riktig, la oss se den endelige koden:
 #include "stdafx.h" #include using namespace std; int _tmain (int argc, _TCHAR * argv []) {int x = 0; _asm mov x, 25 cout << "Verdien for x er:" <<>
Det vi har gjort her er å definere en variabel som heter x og deretter gjennom kode montering vi tildeler den verdien 25, for endelig å skrive den ut med cout, som vi kan se, er det en ganske enkel prosess å legge inn Monteringskode, nå trenger vi bare å kjøre vårt lille program, for dette kan vi trykke Ctrl + F5 hvor programmet vårt skal kompileres og kjøres, la oss se hvordan denne operasjonen ser ut:

FORSTØRRE

I tillegg kan vi inkludere flere linjer med kode fra montering i koden vår C ++, som vi kan oppnå ved å plassere det reserverte ordet __asm og åpner en blokk med kode, la oss se hvordan vi oppnår dette:
 float Sqrt (float f) {__asm ​​{fld f // Sett f på operasjonsstakken fsqrt // Beregn sqrt}}
Fordeler med inline monteringDet er mange fordeler med å bruke inline -montering i stedet for en opprinnelig applikasjon av 32 bit av monteringfor eksempel håndteres sending av parametere til funksjonene fullstendig av kompilatoren av C ++ og den vil injisere den nøyaktige mengden maskinkode, slik at vi ikke trenger å bekymre oss for et minneoverløp eller noe sånt.
Men akkurat som vi har fordeler, finner vi også ulemper ved denne kodingen, en av dem er at utvikleren mister litt kontroll over applikasjonen, for eksempel å manipulere bunken eller til og med definere sine egne konvensjoner.
Online montering gir mye fleksibilitet og lar oss komme inn i denne verden raskt og enkelt, men denne kodingsmetoden forhindrer utviklere i å få tilgang til noen Assembly -elementer, derfor er det vanlig å legge til egen og separat kode i prosjektet vårt.
For dette må vi lage filene våre separat og deretter inkludere metodene vi trenger, for å nå målet vårt skal vi følge følgende trinn:
1- Først lager vi et nytt prosjekt, det kan være et prosjekt av typen C ++ eller fra windows app, begge jobber med å legge til filene fra montering.
2- Vi legger til en fil C ++ til prosjektet vårt som vi vil ringe rektor.cpp som har ansvaret for å ringe en prosedyre fra filen vår montering sender den en rekke numeriske verdier og skriver ut hva denne prosedyren returnerer, la oss se innholdet i filen vår rektor.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 << "Det minste tallet er:" << findMinorNum (arr, 10) << endl; cin.get (); returnere 0;}
3- Da høyreklikker vi på prosjektet vårt, det finnes på høyre side av grensesnittet vårt, i delen av Solution Explorer. Vi velger Bygg avhengigheter og senere Bygg tilpasninger. Vi gjør dette for å fastslå hvordan Visual Studio vil håndtere filer med utvidelsen .asmSiden vi ikke vil at C ++ - kompilatoren skal kompilere disse filene, er målet vårt at VS skal levere disse filene til MER M slik at jeg samler dem, og deretter vil disse filene som er knyttet til vår C ++, være ansvarlig for å danne den endelige kjørbare.
4- For å avslutte med avhengighetene velger vi alternativet mer M. som vi kan se på følgende bilde:

FORSTØRRE

Det er viktig å utføre dette trinnet før du legger til filer med Assembly code as Visuelt studio tilordner hva en fil må gjøre når den opprettes, og ikke når den er bygget.
5- Da må vi legge til en annen C ++ - fil, men denne gangen med utvidelsen .asm, for denne opplæringen har jeg kalt det assembler.asm. På samme måte kan vi sette et hvilket som helst navn bortsett fra main.asm siden kompilatoren kan ha problemer med å finne hvor hovedmetoden er.
6- Arkivet vårt assembler.asm Det vil stå for beregningen ut fra en serie numeriske verdier som er den minste verdien blant disse og deretter C ++ Det vil ta seg av å motta verdien for å behandle den gjennom cout, la oss se innholdet i filen vår:
; 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 Ferdig ; MainLoop: cmp dword ptr [edx], eax; cmovl eax, dword ptr [edx]; legg til edx, 4; dec ecx; jnz MainLoop; Ferdig: ret; findNumMinor endpend
Dette lar oss skille filene våre så vel som logikken vår. Realiseringen av denne typen prosedyrer basert på 32 bits er svært lite brukt, men det er viktig å vite alle dens implikasjoner, la oss se nå hvordan vi endrer vår kode for en applikasjon av 64 bit så vel som trinnene vi må ta for å tilpasse miljøet vårt Visuelt studio.
Visual Studio inneholder alle nødvendige verktøy for å legge til den opprinnelige samlingen til prosjektet vårt C ++, men å jobbe ut fra 64 bit vi må gjøre noen flere konfigurasjoner til prosjektet vårt, la oss se:
1- Trinnene for å utføre denne typen koding ligner på vårt tidligere eksempel, men for å tilpasse seg VS vi går til alternativet Bygge og vi velger Konfigurasjonsbehandling:

2- I konfigurasjonsbehandling -skjermen skal vi velge alternativet Ny eller nytt i plattformkolonnen, som vil vise en andre skjerm for å velge prosjektplattformen, velger vi x64 og i alternativet Kopier innstillinger fra vi forlot valgt alternativet Win32. Dette vil gjøre VS endre versjonsbaner fra 32 bit av MER M til det av 64, så alt arbeidet vil bli utført av IDE.

FORSTØRRE

3- Når dette er gjort, kan vi kompilere koden vår og utføre den, men vi må endre filen vår montering siden vi jobber med forskjellige arkitekturer, la oss se den nye koden for filen vår:
; Oppføring: assembler.asm .code; int findMinorNum (int * arr, int count) FindSmallest proc; mov eax, 7fffffffh; cmp edx, 0; jle Ferdig; MainLoop: cmp dword ptr [rcx], eax; cmovl eax, dword ptr [rcx]; tilsett rcx, 4; des edx; jnz MainLoop; Ferdig: ret; FindSmestest endp; slutt;
Med dette fullfører vi denne opplæringen, vi har allerede tatt en første titt på programmering med montering, det kan virke noe komplekst i begynnelsen, men med en skikkelig beherskelse av C ++ og grunnleggende forestillinger om maskinspråk kan vi oppnå interessante og nyttige ting i utviklingen vår.Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave