Съдържание
Монтаж е език на ниско ниво, чиято функция е да осигури всички необходими елементи за програмиране на архитектурата на настолни компютри или лаптопи. Кривата му на обучение е малко стръмна и много малко концепции могат да бъдат приложени от езици на високо ниво, като напр Python, Ruby или JavaТова обаче е най -мощният език за програмиране на архитектури, базирани на x64.Въпреки че е сложен език, в най-новите си версии той оставя настрана използването на шестнадесетични знаци и ги заменя с конвенции за именуване, които са по-лесни за запомняне и четене, в допълнение към по-високи характеристики, като например позволява използването на макроси и включване, дефинирани от потребителя типове данни.
Когато процесът на разработка приключи, тези редове код се четат от програмата за сглобяване и след това се превеждат в машинен код чрез процес, подобен на този на компилация на езици на високо ниво, но тук се нарича присъединяване.
За целите на този урок първо ще видим как протича процесът на кодиране 32 бита, тъй като това е фундаментална стъпка за постигане на по -добро разбиране на езика и процеса на кодиране в приложения на 64 бита, това чрез споделяне на много характеристики с архитектурата x86 64-битов.
Има много начини да започнете кодирането Монтаж за 32-битови приложения, но един от най-лесните и практични начини да го направите е чрез Визуално студио тъй като има нещо, наречено събрани онлайн където кодът на Монтаж е вграден в C ++ нормално и текущо, това може да стане в един ред или в кодови блокове със запазената дума __asm.
ВажноКлючовата дума __asm може да се използва с единична долна черта. Това е стара директива, използвана за осигуряване на съвместимост в по -малко съвременни приложения.
След като изяснихме това, първото нещо, което трябва да направим, е да получим Визуално студио, за този урок използвахме версията Експрес кодът обаче е валиден и в двете версии на SDI. Изтегляме в следната връзка нашата SDI и изпълняваме в инсталатора:
След приключване на инсталационния процес можем да започнем кодирането Монтаж, за това ще направим малък пример, където ще демонстрираме как можем да вградим кода на Монтаж в C ++ със запазената дума __asm, където всеки кодов сегмент до тази дума ще бъде третиран като собствен код от Монтаж от компилатора C ++.
Отваряме нашето Visual Studio и създаваме нов тип проект Конзолно приложение Win32, бутаме добре и ще се покаже съветникът за създаване на проект, който ще ни попита какъв тип проект искаме и ако искаме празен, препоръчваме да оставите всички опции по подразбиране и да натиснете Завършете:
Увеличете
Съветникът ще създаде основен код за нашия проект, който ще съдържа библиотека и основния метод, той трябва да изглежда така:#include "stdafx.h" int _tmain (int argc, _TCHAR * argv []) {връщане 0;}Като имаме базовия код сега, трябва да добавим нашата линия от Монтаж, освен това трябва да добавим библиотеката, за да можем да печатаме от конзолата и пространство на имената за да работи всичко правилно, нека видим крайния код:
#include "stdafx.h" #include using namespace std; int _tmain (int argc, _TCHAR * argv []) {int x = 0; _asm mov x, 25 cout << "Стойността за x е:" <<>Това, което направихме тук, е да дефинираме променлива, наречена x, и след това чрез код Монтаж присвояваме му стойността 25, за да го отпечатаме накрая cout, както виждаме, това е доста прост процес за вграждане на Код за сглобяване, сега трябва само да стартираме нашата малка програма, за това можем да натиснем Ctrl + F5 където нашата програма ще бъде компилирана и изпълнена, нека видим как изглежда тази операция:
Увеличете
Освен това можем да включим няколко реда код от Монтаж в нашия код C ++, което можем да постигнем, като поставим запазената дума __asm и отваряйки блок код, нека видим как постигаме това:float Sqrt (float f) {__asm {fld f // Поставете f върху стека на операциите fsqrt // Изчислете sqrt}}Предимства на вградения монтажИма много предимства от използването на вграден монтаж вместо родно приложение на 32 бита на Монтаж, например изпращането на параметри към функциите се обработва изцяло от компилатора на C ++ и ще инжектира точното количество машинен код, така че не трябва да се притесняваме от препълване на паметта или нещо подобно.
Но точно както имаме предимства, ние откриваме и недостатъци в този начин на кодиране, едно от тях е, че разработчикът губи малко контрол над приложението, като например манипулиране на стека или дори определяне на собствените им конвенции.
Онлайн сглобяването предлага много гъвкавост и ни позволява да влезем в този свят бързо и лесно, но този метод на кодиране не позволява на разработчиците да имат достъп до някои елементи на Асемблера, поради което е обичайно да добавяме естествен и отделен код към нашия проект.
За това трябва да създадем нашите файлове отделно и след това да включим необходимите ни методи, за да постигнем целта си, ще следваме следните стъпки:
1- Първо създаваме нов проект, той може да бъде проект от тип C ++ или от приложение за windows, и двете работят за добавяне на файловете Монтаж.
2- Добавяме файл C ++ към нашия проект, който ще наричаме principal.cpp който ще отговаря за извикването на процедура от нашия файл Монтаж изпращайки му масив от числови стойности и след това отпечатвайки какво връща тази процедура, нека видим съдържанието на нашия файл principal.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 << "Най -малкото число е:" << findMinorNum (arr, 10) << endl; cin.get (); връщане 0;}3- След това щракваме с десния бутон върху нашия проект, той се намира от дясната страна на нашия интерфейс, в раздела на Solution Explorer. Избираме Изградете зависимости и по-късно Изградете персонализации. Правим това, за да установим как Visual Studio ще обработва файлове с разширението .асмТъй като не искаме компилаторът на C ++ да компилира тези файлове, нашата цел е VS да предостави тези файлове на ОЩЕ М така че да ги сглобя и след това тези файлове, свързани с нашия C ++, ще бъдат отговорни за формирането на крайния изпълним файл.
4- За да завършим с зависимостите, избираме опцията на още М. както можем да видим на следното изображение:
Увеличете
Важно е да изпълните тази стъпка, преди да добавите файлове с код на сглобяване като Визуално студио задава какво трябва да направи файл, когато е създаден, а не когато е създаден.5- След това трябва да добавим друг C ++ файл, но този път с разширението .асм, за този урок го нарекох assembler.asm. По същия начин можем да му поставим всяко име, освен main.asm, тъй като компилаторът може да има проблеми с намирането на вашия основен метод.
6- Нашият архив assembler.asm Той ще отговаря за изчисляването от поредица от числови стойности, която е най -малката стойност между тях и след това C ++ Ще се погрижи за получаване на стойността, за да я обработи чрез cout, нека видим съдържанието на нашия файл:
; 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 Завършен ; MainLoop: cmp dword ptr [edx], eax; cmovl eax, dword ptr [edx]; add edx, 4; dec ecx; jnz MainLoop; Готово: ret; findNumMinor endpendТова ни позволява да разделим нашите файлове, както и нашата логика. Реализацията на този тип процедури, базирани на 32 бита, се използва много малко, но е важно да се знаят всичките му последици, нека видим сега как ще променим нашия код за приложение на 64 бита както и стъпките, които трябва да предприемем, за да адаптираме нашата среда Визуално студио.
Visual Studio включва всички необходими инструменти за добавяне на родния монтаж към нашия проект C ++, но да се работи въз основа на 64 бита трябва да направим някои допълнителни конфигурации на нашия проект, нека видим:
1- Стъпките за извършване на този тип кодиране са подобни на предишния ни пример, но за адаптиране СРЕЩУ отиваме към опцията Изграждане и ние избираме Конфигурационен мениджър:
2- В екрана на мениджъра на конфигурации ще изберем опцията Ново или ново в колоната на платформата, която ще покаже втори екран за избор на платформата на проекта, ние избираме x64 и във опцията Копирайте настройките от оставихме избраната опция на Win32. Това ще направи СРЕЩУ промяна на пътищата на версията от 32 бита на ОЩЕ М към тази на 64, така че цялата работа ще бъде извършена от IDE.
Увеличете
3- След като това бъде направено, можем да компилираме нашия код и да го изпълним, но трябва да променим нашия файл Монтаж тъй като работим по различни архитектури, нека видим новия код за нашия файл:; Обява: assembler.asm .code; int findMinorNum (int * arr, int count) FindSmallest proc; mov eax, 7fffffffh; cmp edx, 0; jle Завършен; MainLoop: cmp dword ptr [rcx], eax; cmovl eax, dword ptr [rcx]; добавете rcx, 4; dec edx; jnz MainLoop; Завършен: ret; FindSmallest endp; край;С това приключваме този урок, вече разгледахме за първи път програмирането с Монтаж, може да изглежда малко сложно в началото, но с подходящо овладяване на C ++ и основните понятия за машинен език можем да постигнем интересни и полезни неща в нашите разработки.Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка