ასემბლი

ასემბლი (ზოგჯერ ასემბლერი; ინგ. 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 დაარქივებული 2011-01-28 საიტზე Wayback Machine. (ინგლისური) Machine language for beginners(ინგლისური) Introduction to assembly language(ინგლისური) The ASM Community, a programming resource about assembly including an ASM Book დაარქივებული 2013-06-02 საიტზე Wayback Machine. (ინგლისური) Intel Assembly 80x86 CodeTable (a cheat sheet reference)(ინგლისური) Unix Assembly Language Programming დაარქივებული 2020-02-17 საიტზე Wayback Machine. (ინგლისური) 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 დაარქივებული 2010-01-16 საიტზე Wayback Machine. (ინგლისური) Assembly Language Programming Examples(ინგლისური) Authoring Windows Applications In Assembly Language(ინგლისური) Information on Linux assembly programming(ინგლისური) x86 Instruction Set Reference დაარქივებული 2009-02-19 საიტზე Wayback Machine. (ინგლისური) Iczelion's Win32 Assembly Tutorial დაარქივებული 2008-03-08 საიტზე Wayback Machine. (ინგლისური) Assembly Optimization Tips დაარქივებული 2019-05-07 საიტზე Wayback Machine. by Mark Larson(ინგლისური) NASM Manual(ინგლისური) 8086 assembly coding by F.A. Smit(ინგლისური) Microchip PIC assembly coding basics დაარქივებული 2010-03-31 საიტზე Wayback Machine. (ინგლისური)