Асемблер

програмски језик

Асемблер (асемблерски језик)[1][2][3][4] је програмски језик који машински језик, специфичне процесорске архитектуре, представља у људима читљивом облику. Из тога произилази да свака процесорска архитектура поседује свој асемблер.[5][6][7]

Асемблер
Листинг Motorola MC6800 асемблера
Појавио се1949. год.; пре 75 година (1949)

Први асемблерски код у коме се језик користи за представљање инструкција машинског кода налази се у раду Катлин и Ендру Доналда Бута из 1947. Кодирање за А.Р.Ц..[8] Асемблерски код се конвертује у извршни машински код помоћу услужног програма који се назива асемблер. Термин „асемблер“ се генерално приписује Вилксу, Вилеру и Гилу у њиховој књизи „Припрема програма за електронски дигитални рачунар“ из 1951. године,[9] који су, међутим, користили термин да значи „програм који саставља други програм који се састоји од неколико секција у један програм“.[10] Процес конверзије се назива асемблер, као и састављање изворног кода. Рачунски корак када асемблер обрађује програм назива се асемблерско време. Пошто асемблер зависи од инструкција машинског кода, сваки асемблерски језик[nb 1] је специфичан за одређену архитектуру рачунара.[11][12][13]

Програм у асемблеру се често означава и као асемблер код. Тај код се путем специјалног компајлера претвара у машински код који процесор може да директно изврши. Обрнути процес претварања машинског у асемблер код назива се дисасемблирање. При том процесу је спашавање свих пређашњих дијелова асемблер кода немогуће, пошто се они (нпр. коментари) при компилирању неповратно бришу. Због тога је дисасемблирани код тешко разумљив. Асемблер обично има једну изјаву по машинској инструкцији, али коментари и изјаве који су асемблерске директиве[14], макрои[15][1], и симболичке ознаке програма и меморијских локација се често подржавају.

Програми написани у асемблеру се одликују могућношћу слања директних команди процесору као и искоришћавању цијелог дијапазона рачунарске архитектуре. Пошто ти програми раде практично на нивоу машинског кода, и са собом немају помоћне конструкције, генерализације кода и за машину сличне небитне ствари, много су мањи и бржи од програма написаних у неком конвенционалном програмском језику.

Неке од главних мана таквих програма су лоша читљивост, што је посебно изражено при великим пројектима и комплексности кода, као и практична немогућност конвертовања истог кода на другу процесорску архитектуру.[16] Због тих мана се асемблер данас користи само у временски критичним програмима (брзина) као што су машински адаптери (енгл. driver) за графичке карте или у просторно критичним програмима (величина) у интегрисаним системима (енгл. Embedded Systems). Примери таквих система су микроконтролери. У контрасту са асемблером, већина програмских језика високог нивоа су генерално портабилни преко више архитектура, али захтевају интерпретирање или компајлирање. Асемблер се такође може назвати симболичким машинским кодом.[17][18]

Данас се типично користити мале количине кода асемблерског језика у оквиру већих система имплементираних на језику вишег нивоа, из разлога перформанси или за директну интеракцију са хардвером на начине који језик вишег нивоа не подржава. На пример, нешто мање од 2% верзије 4.9 изворног кода Линукс кернела је написано у асемблеру; више од 97% је написано у Ц.[19]

Notes уреди

  1. ^ Other than meta-assemblers

Референце уреди

  1. ^ а б „Assembler language”. 
  2. ^ „Assembly: Review” (PDF). Computer Science and Engineering. College of Engineering, Ohio State University. 2016. Архивирано (PDF) из оригинала 2020-03-24. г. Приступљено 2020-03-24. 
  3. ^ Archer, Benjamin (новембар 2016). Assembly Language For Students. North Charleston, South Carolina, USA: CreateSpace Independent Publishing. ISBN 978-1-5403-7071-6. „Assembly language may also be called symbolic machine code. 
  4. ^ Streib, James T. (2020). „Guide to Assembly Language”. Undergraduate Topics in Computer Science. Cham: Springer International Publishing. ISBN 978-3-030-35638-5. ISSN 1863-7310. S2CID 195930813. doi:10.1007/978-3-030-35639-2. „Programming in assembly language has the same benefits as programming in machine language, except it is easier. 
  5. ^ Saxon, James; Plette, William (1962). Programming the IBM 1401. Prentice-Hall. LCCN 62-20615 — преко HathiTrust.  [use of the term assembly program]
  6. ^ „Macro instructions”. High Level Assembler for z/OS & z/VM & z/VSE Language Reference Version 1 Release 6. IBM. 2014 [1990]. SC26-4940-06. 
  7. ^ „Assembler language”. High Level Assembler for z/OS & z/VM & z/VSE Language Reference Version 1 Release 6. IBM. 2014 [1990]. SC26-4940-06. 
  8. ^ Booth, Andrew D; Britten, Kathleen HV (1947). Coding for A.R.C. (PDF). Institute for Advanced Study, Princeton. Приступљено 4. 11. 2022. 
  9. ^ Wilkes, Maurice Vincent; Wheeler, David John; Gill, Stanley J. (1951). The preparation of programs for an electronic digital computer (Reprint 1982 изд.). Tomash Publishers. ISBN 978-0-93822803-5. OCLC 313593586. 
  10. ^ Fairhead, Harry (2017-11-16). „History of Computer Languages - The Classical Decade, 1950s”. I Programmer. Архивирано из оригинала 2020-01-02. г. Приступљено 2020-03-06. 
  11. ^ „How do assembly languages depend on operating systems?”. Stack Exchange. Stack Exchange Inc. 2011-07-28. Архивирано из оригинала 2020-03-24. г. Приступљено 2020-03-24.  (NB. System calls often vary, e.g. for MVS vs. VSE vs. VM/CMS; the binary/executable formats for different operating systems may also vary.)
  12. ^ Austerlitz, Howard (2003). „Computer Programming Languages”. Data Acquisition Techniques Using PCs. Elsevier. стр. 326—360. ISBN 9780120683772. doi:10.1016/b978-012068377-2/50013-9. „Assembly language (or Assembler) is a compiled, low-level computer language. It is processor-dependent since it basically translates the Assembler's mnemonics directly into the commands a particular CPU understands, on a one-to-one basis. These Assembler mnemonics are the instruction set for that processor. 
  13. ^ Carnes, Beau (2022-04-27). „Learn Assembly Language Programming with ARM”. freeCodeCamp.org. Приступљено 2022-06-21. „Assembly language is often specific to a particular computer architecture so there are multiple types of assembly languages. ARM is an increasingly popular assembly language. 
  14. ^ „High Level Assembler - Opcodes overview, Assembler Directives”. 
  15. ^ „Macro instructions”. 
  16. ^ System calls often vary, e.g. for MVS vs. VSE vs. VM/CMS; the binary/executable formats for different operating systems may also vary. „How do assembly languages depend on operating systems?”. 
  17. ^ „Assembly: Review - The Ohio State University” (PDF). 2016. 
  18. ^ B. Archer. „Assembly Language For Students”. „Assembly language may also be called symbolic machine code. 
  19. ^ Anguiano, Ricardo. „linux kernel mainline 4.9 sloccount.txt”. Gist (на језику: енглески). Приступљено 2022-05-04. 

Литература уреди


Спољашње везе уреди