Що таке мова Асамблеї?

Іноді називається збірка або 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.

 глобальний _main extern _printf розділ .text _main: виклик push-повідомлення _printf add esp, 4 ret повідомлення: db 'Привіт, світ!', 10, 0 

Для початку відкрийте Блокнот. Скопіюйте та вставте вищевказаний код у новий текстовий файл і збережіть файл як hello.asm .

Щоб скласти збірку, ми будемо використовувати NASM, Netwide Assembler. Його можна завантажити за адресою //www.nasm.us/.

 nasm -f win32 hello.asm 

Під час виконання цієї команди NASM створює об'єктний файл. Об'єктний файл містить машинний код, але не зовсім виконуваний файл. Наш об'єктний файл називається hello.obj .

Щоб створити виконуваний файл, ми будемо використовувати 32-розрядну версію MinGW (Minimal GNU for 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; Почати секцію коду global main; стандартна точка входу gcc основна:; мітку програми для точки входу push rbp; встановити кадр стека, повинен бути вирівняний mov rdi, fmt mov rsi, msg mov rax, 0; також може бути: xor rax, rax виклик printf; Виклик функції C printf pop rbp; відновлення стека mov rax, 0; нормальна, відсутність помилки, повернення значення ret; повернення 

Скопіюйте та вставте цю програму в новий файл з назвою hello.asm .

Потім скомпілюйте збірку з NASM, яку ви можете встановити разом з менеджером пакетів. Наприклад, на Ubuntu або Debian можна встановити NASM за допомогою apt:

 sudo apt оновлення & & sudo apt install nasm 

Запустіть цю команду для створення об'єктного файлу:

 nasm -f elf64 hello.asm 

Об'єктний файл названий hello.o .

Далі скористайтеся gcc, щоб зв'язати цей об'єктний файл із необхідними бібліотеками на вашому комп'ютері, і скомпілювати його у виконуваний файл з назвою hello :

 gcc hello.o -o привіт 

Нарешті запустіть виконуваний файл:

 ./Здрастуйте 
 Привіт Світ! 

Для довідки це та сама програма, написана на мові C:

 #include int main () {char msg [] = "Привіт, світ!" printf ("% s", msg); return 0; } 

  • Див. Процедури відлагодження для інших прикладів коду збірки з низьким рівнем та додаткову інформацію про те, що робить кожна підпрограма.
  • Додаткові приклади мови асемблера див. На веб-сайті Happy Codings.

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