ასემბლი

**ასემბლი** (ზოგჯერ *ასემბლერი*; ინგ. assembly language) — დაბალი დონის პროგრამირების ენა. იგი აღიქვამს მანქანურ კოდს ადამიანისთვის გასაგებად. მანქანური კოდის  ბიტების კომბინაციიდან არიან შედგენილი «მნემონიკები» (ბერძნულად მნემონიკოს, რომელიც ეხება მეხსიერებას) პროგრამული კოდის ადვილად დასამახსოვრებად. ასემბლერს (ამ შემთხვევაში პროგრამა) ეს მნემონიკები გადაჰყავს მანქანურ კოდში რომ შექმნას გაშვებადი ფაილი ანუ კომპიუტერული პროგრამა.

პირველ კომპიუტერებში, რასაც ასემბლერი აკეთებს, კეთდებოდა ხელით პროგრამისტის მიერ. დღესდღეობით გამოირჩევა ორი ტიპის სინტაქსის მქონე ასემბლერები: Intel და AT&T.

## უპირატესობები და ნაკლოვანობები 
**უპირატესობები**
* ასემბლერი ქმნის ყველაზე მცირე და სწრაფ კოდს, რაც საგრძნობლად ამცირებს პროცესორის და ოპერატიული მეხსიერების დატვირთვას.
* მაღალი დონის პროგრამირების ენებს აქვთ გარკვეული შეზღუდვები, ასემბლერი კი პირდაპირაა დაკავშირებული პროცესორის ინსტრუქციებთან, მისთვის არ არსებობს გადაუჭრელი პრობლემა.
* გამოიყენება დრაივერების და ოპერაციული სისტემების ბირთვების შესაქმნელად.
* ასემბლერით იქმნება ინტერპრეტატორებისა და კომპილატორების უმრავლესობა (ახალი პროგრამირების ენები)
* დიზასემბლერის დახმარებით შესაძლებელია ფაილის პროგრამული კოდის ანალიზი და შეცვლა

**ნაკლოვანებები**
* ასემბლერზე პროგრამირება გაცილებით რთულია ვიდრე მაღალი დონის ენებზე. საჭიროა პროგრამისტის მაღალი კვალიფიკაცია. მეტ დროს მოითხოვს შეცდომების პოვნა და გასწორება.
* როგორც წესი საშუალო დონის პროგრამისტის მიერ დაწერილი კოდი ყოველთვის უფრო დიდი აღმოჩნდება ვიდრე იმავე პროგრამისტის მიერ დაწერილი კოდი მაღალი დონი პროგრამირების ენაზე (თუნდაც C)
* ასემბლერებს ახასიათებთ ბიბლიოთეკების მცირე რაოდენობა
* კოდი "პირდაპირ კავშირშია" პროცესორთან, შესაბამისად ერთი პლატფორმისთვის შექმნილი პროგრამა სხვა პლატფორმაზე ვერ იმუშავებს

## გამოყენება 
დღეისათვის ასემბლერები ნაკლები პოპულარობით სარგებლობენ მაგრამ Hardware–ში მათი წვლილი დიდია.

* დრაივერები
* ვირუსები
* ანტივირუსები
* ოპერაციული სისტემების ბირთვები
* პროგრამირების ენები
იშვიათად, მაგრამ როდესაც მაგალითად კომპიუტერული თამაში ბევრ რესურსს მოითხოვს, პროგრამის აჩქარების მიზნით შესაძლებელია ასემბლერით შეიქმნას კოდის გარკვეული ფრაგმენტი (მაგალითად C ენას აქვს _asm{} დირექტივა)

## სინტაქსი 
ასემბლერის ბრძანებების სია განისაზღვრება პროცესორის შესაძლებლობებით

**ბრძანებების ტიპები**
თითქმის ყველა ასემბლერისთვის დამახასიათებელია რამდენიმე ათეული ბრძანება. მათ შორის:

* მონაცემების მართვა, გადამისამართება (Mov)
* არითმეტიკული ოპერაციები (add, sub, imul, div, inc, dec)
* ლოგიკური ოპერაციები (or, xor, and)
* კოდის შესრულების მართვა, უპირობო და პირობითი  გადასვლები (jmp, loop, jnz, jne, jng...)
* სისტემური ფუნქციები (int)
* შეტანა/გამოტანის პორტი (in, out)

**დირექტივები**
დირექტივები არა პირდაპირ გადადიან მანქანის კოდში, არამედ სწორად წარმართავენ კომპილატორის (ასემბლერის) მუშაობას. მათ რიცხვშია:

* კონსტანტების და ცვლადების გამოცხადება
* გამშვები ფაილის ორგანიზება
* კომპილატორის მუშაობის რეჟიმის მითითება
* ყველანაირი აბსტრაქციები (მაღალი დონი პროგრამირების ელემენტები – ძირითადად პროცედურები და ფუნქციები, იშვიათად – სტრუქტურები)
* მაკროსები

## ასემბლერების სია 
თანამედროვე ასემბლერებია: 

MASM - Microsoft Macro Assembler - ვინდოვსისთვის ყველაზე გავრეცელებული ასემბლერი აქვს მაკრო სინტაქსი და დიდი ბიბლიოთეკა

TASM - Turbo Assembler - MASM-ის კონკურენტი, Borland-ის პროდუქტი. გამოირჩევა IDEAL რეჟიმით.

GAS - GNU Assembler - "ლინუქსის ასემბლერი", აქვს AT&T სინტაქსი

FASM - Flat Assembler - ასემბლერის ნაირსახეობა, აქვს მრავალი დირექტივა. ამ ასემბლერით შეიქმნა პროგრამირების ენა Pascal, ასევე ოპერაციული სისტემები ManuetOS, ColibriOS

NASM - Netwide Assembler - კიდევ ერთი ასემბლერი, აღსანიშნავია, რომ ბიბლიოთეკები (.inc, .lib სახით) არ გააჩნია, ძირითადად ლინუქსისთვის გამოიყენება 

YASM -  NASM-ის "განახლებული" ვარიანტი.

HLASM - High Level Assembler - გამოსადეგია მათთვის ვისაც მაკრო ბრძანებების გამოყება სურს დაბალი დონის პროგრამირებაში.

## იხილეთ აგრეთვე 
* კომპილატორი
* NASM

## რესურსები ინტერნეტში 
*  Randall Hyde's The Art of Assembly Language as HTML and PDF version  
*  Machine language for beginners
*  Introduction to assembly language
*  The ASM Community, a programming resource about assembly including an ASM Book 
*  Intel Assembly 80x86 CodeTable (a cheat sheet reference)
*  Unix Assembly Language Programming 
*  IBM z/Architecture Principles of Operation IBM manuals on mainframe machine language and internals.
*  IBM High Level Assembler IBM manuals on mainframe assembler language.
*  PPR: Learning Assembly Language
*  An Introduction to Writing 32-bit Applications Using the x86 Assembly Language 
*  Assembly Language Programming Examples
*  Authoring Windows Applications In Assembly Language
*  Information on Linux assembly programming 
*  x86 Instruction Set Reference 
*  Iczelion's Win32 Assembly Tutorial 
*  Assembly Optimization Tips  by Mark Larson
*  NASM Manual
*  8086 assembly coding by F.A. Smit
*  Microchip PIC assembly coding basics 

კატეგორია:პროგრამირების ენები