ასემბლი

ასემბლი (ზოგჯერ ასემბლერი; ინგ. 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