ასემბლი

ასემბლი (ზოგჯერ ასემბლერი; ინგ. 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
პროგრამირების ენები
pl:Asembler#Język asemblera