Какво е Асемблер?

Понякога се нарича монтаж или ASM, асемблерният език е език за програмиране от ниско ниво.

Програми, написани на асемблер, се съставят от асемблер. Всеки асемблер има свой собствен асемблер, който е предназначен за една специфична компютърна архитектура.

Машинен език е само поредица от числа, която не е лесна за четене от хората. Използвайки ASM, програмистите могат да пишат прочетени от човека програми, които съответстват почти точно на машинния език.

Недостатъкът е, че всичко, което прави компютърът, трябва да бъде описано изрично, с точни детайли. Предимството е, че програмистът има максимален контрол над това, което прави компютърът.

Защо ASM е език на ниско ниво?

Събранието се нарича език за програмиране от ниско ниво, защото има (почти) връзка един към един между това, което казва на компютъра, и какво прави компютърът. По принцип, един ред от сборна програма съдържа максимум една инструкция за компютъра.

Как се различава ASM от езика на високо ниво?

Езиците на високо ниво осигуряват абстракции от операции на ниско ниво, които позволяват на програмиста да се съсредоточи повече върху описанието на това, което искат, и по-малко върху това как трябва да се направи . Програмирането по този начин е по-удобно и прави програмите по-лесни за четене при жертва на ниско ниво на контрол.

Програмите, написани на езици на високо ниво, никога няма да съответстват на суровата скорост и ефективност на програмите, написани на сглобяването. Примери за езици на високо ниво включват Python, Java, JavaScript, Clojure и Lisp.

Какво е "средно ниво"?

Езиците от средно или по-ниско ниво осигуряват някои абстракции на високо ниво, за да улеснят живота на програмиста, като същевременно осигуряват достъп до операции на ниско ниво. Те често се използват за писане на операционни системи, така че понякога те се наричат езици за системно програмиране .

Програмите, написани на езици на средно ниво, също могат да изпълняват или почти същото като програми, написани на асемблер. Примери за езици за програмиране от средно ниво включват C, C ++, Ada, Nim и Rust.

Преносим ли е ASM?

Не. Тъй като асемблерните езици са свързани с една специфична компютърна архитектура, те не са преносими. Програмата, написана на един асемблер, трябва да бъде пренаписана напълно, за да може да се изпълнява на друг тип машина.

Преносимостта е едно от основните предимства на езиците на по-високо ниво. C език за програмиране често се нарича "преносим монтаж", защото C компилаторите съществуват за почти всяка модерна системна архитектура. Програма, написана на С, може да изисква някои промени, преди да бъде компилирана на друг компютър, но основният език е преносим.

Най-общо казано, по-високото ниво на езика е, толкова по-малко промени трябва да бъдат направени, за да работи на друга архитектура. Езиците с най-ниско ниво - машинен език и асемблер - не са преносими.

Пример: Здравейте, Свят! в 32-битова система за Windows

Ето "Hello, World", написано за 32-битов Intel процесор. Той също ще работи на 64-битов процесор. Ние ще го компилираме и стартираме на Windows 10.

 global _main extern _printf раздел .text _main: push съобщение call _printf добави esp, 4 ret съобщение: db 'Здравейте, свят!', 10, 0 

За да започнете, отворете Notepad. Копирайте и поставете горния код в нов текстов файл и го запишете като hello.asm .

За да съставим събранието, ще използваме NASM, Netwide Assembler. Тя може да бъде изтеглена на адрес: //www.nasm.us/.

 nasm -f win32 hello.asm 

Когато изпълните тази команда, NASM създава обектен файл. Обектният файл съдържа машинен код, но не е изпълним файл. Нашият обектен файл се нарича hello.obj .

За да създадем изпълнимия файл, ще използваме 32-битовата версия на MinGW (Минимално GNU за Windows), която ще осигури компилатора на gcc. Тя може да бъде изтеглена от: //www.mingw.org/.

 gcc -o hello.exe hello.obj 
 Здравейте 
 Здравей свят! 

Пример: Здравейте, Свят! в 64-битова система за Linux

Ето "Hello, World", написано за 64-битов Intel процесор. Ще го компилираме и стартираме на 64-битова Linux.

 extern printf; функцията C printf, наречена раздел .data; Секция данни, инициализирани променливи msg: db "Здравей, свят!", 0; C низ завършва с 0 fmt: db "% s", 10, 0; Форматът printf, "n", "0" раздел .text; Започнете секцията с кода на глобалния main; стандартната входна точка на gcc main:; етикета на програмата за въвеждане на точка за въвеждане rbp; създаде стека рамка, трябва да бъдат подравнени MOV RDI, FMT MOV RSI, MSG MOV Rax, 0; може също да бъде: xor rax, rax call printf; Обадете се на функцията C printf pop rbp; възстановяване на стак mov rax, 0; нормално, без грешка, връщане на стойност ret; връщане 

Копирайте и поставете тази програма в нов файл, наречен hello.asm .

След това компилирайте сборката с NASM, която можете да инсталирате с мениджъра на пакети. Например в Ubuntu или Debian можете да инсталирате NASM с помощта на apt:

 sudo apt update & & sudo може да инсталира nasm 

Изпълнете тази команда, за да създадете обектния си файл:

 nasm -f elf64 hello.asm 

Обектният файл се нарича hello.o .

След това използвайте gcc, за да свържете този обективен файл с необходимите библиотеки на компютъра и да го компилирате в изпълним файл, наречен hello :

 gcc hello.o -o здравей 

Накрая изпълнете изпълнимия файл:

 ./Здравейте 
 Здравей свят! 

За справка, това е същата програма, написана на C:

 #include int main () {char msg [] = "Здравей, свят!"; ФОРМАТ ( "% S \ п", съоб); return 0; } 

  • Вижте рутинни процедури за отстраняване на грешки за други примери на код за сглобяване на ниско ниво и допълнителна информация за това какво прави всяка рутина.
  • За допълнителни примери на асемблер вижте уебсайта на Happy Codings.

2GL, асемблер, език на ниско ниво, машинен език, програмни термини