Удзельнік:IshaBarnes/Асэмблер

З Вікіпедыі, свабоднай энцыклапедыі

Мова асэмблера (скарочана ASM або asm) - гэта мова праграмавання нізкага ўзроўню, у якой інструкцыі, зразумелыя чалавеку, адпавядаюць інструкцыям машыннага кода ў пэўнай архітэктуры камп’ютара. Мова асэмблера звычайна мае адзін аператар на машынную інструкцыю, але таксама падтрымлівае канстанты, каментарыі, меткі адрасоў у памяці і іншы дапаможны функцыянал.

Паколькі мова асэмблера залежыць ад інструкцый машыннага кода, для кожнай канкрэтнай архітэктуры камп’ютара існуе ўласная мова асэмблера. Часам існуе некалькі моў асэмблера для адной і той жа архітэктуры, а часам мова асэмблера спецыфічная для аперацыйнай сістэмы або пэўных аперацыйных сістэм. Большасць моў асэмблера можа ўніверсальна выкарыстоўвацца з любой аперацыйнай сістэмай, бо мова дае доступ да ўсіх рэальных магчымасцей працэсара без неабходнасці выкарыстання сістэмных выклікаў. У адрозненне ад праграм на мовах асэмблера, большасць праграм на мовах праграмавання высокага ўзроўню можна перанесці на розныя архітэктуры, але для гэтага патрэбна рэалізаваць інтэрпрэтатар або кампілятар на ўзроўні аперацыйнай сістэмы.

У першыя дзесяцігоддзі стварэння камп’ютарных праграм і сістэмныя, і прыкладныя праграмы звычайна былі напісаны цалкам на мове асэмблера. На цяперашні час мовы асэмблера незаменныя для некаторых мэт, аднак большасць праграм пішуцца на мовах высокага ўзроўню. У кнізе «No Silver Bullet» Фрэд Брукс рэзюмаваў наступствы адыходу ад праграмавання на мовах асэмблера: «Безумоўна, самым моцным штуршком для прадукцыйнасці, надзейнасці і прастаты праграмнага забеспячэння стала прагрэсіўнае выкарыстанне моў высокага ўзроўню для праграмавання. Большасць назіральнікаў звязваюць яго з прынамсі 5-кратным ростам прадукцыйнасці і суправодным ростам надзейнасці, прастаты і зразумеласці».

Сёння невялікая колькасць кода асэмблера выкарыстоўваецца ў вялікіх сістэмах, рэалізаваных на мове больш высокага ўзроўню, для павялічэння прадукцыйнасці або для непасрэднага ўзаемадзеяння з камп’ютарным абсталяваннем, якое немагчыма на мове больш высокага ўзроўню. Напрыклад, ў зыходным кодзе ядра Linux версіі 4.9 мова асэмблера займае крыху менш за 2 %; больш за 97% напісана на C.[1]

Выкарыстанне мовы асэмблера[правіць | правіць зыходнік]

Гістарычны ракурс[правіць | правіць зыходнік]

Мовы асэмблера не былі даступныя ў той час, калі быў прадстаўлены камп'ютар з захаванымі праграмамі . Кэтлін Бут «лічыцца вынаходніцтвам асэмблера» на аснове тэарэтычнай працы, якую яна пачала ў 1947 годзе падчас працы над ARC2 у Біркбеку Лонданскага ўніверсітэта пасля кансультацыі Эндру Бута (пазней яе мужа) з матэматыкам Джонам фон Нойман і фізік Герман Голдстайн з Інстытута перспектыўных даследаванняў .

У канцы 1948 года аўтаматычны калькулятар электроннага захоўвання з затрымкай (EDSAC) меў асэмблер (пад назвай "пачатковыя заказы"), інтэграваны ў праграму загрузкі . Ён выкарыстоўваў адналітарную мнемотэхніку, распрацаваную Дэвідам Уілерам, якога IEEE Computer Society лічыць стваральнікам першага "асэмблера". У справаздачах аб EDSAC быў уведзены тэрмін "зборка" для працэсу аб'яднання палёў у слова інструкцыі. SOAP ( Symbolic Optimal Assembly Program ) — мова асэмблера для кампутара IBM 650, напісаная Стэнам Полі ў 1955 годзе .

Мовы асэмблера ліквідуюць вялікую частку схільнага да памылак, стомнага і працаёмкага праграмавання першага пакалення, неабходнага для самых ранніх кампутараў, вызваляючы праграмістаў ад нуды, такой як запамінанне лікавых кодаў і вылічэнне адрасоў. Калісьці яны шырока выкарыстоўваліся для рознага роду праграмавання. Аднак да канца 1950-х гг.  іх выкарыстанне было ў значнай ступені выцеснена мовамі больш высокага ўзроўню ў пошуках павышэння прадукцыйнасці праграмавання . Сёння мова асэмблера па-ранейшаму выкарыстоўваецца для прамога маніпулявання абсталяваннем, доступу да спецыялізаваных інструкцый працэсара або для вырашэння крытычных праблем з прадукцыйнасцю. [2] Тыповае выкарыстанне драйвераў прылад, нізкаўзроўневых убудаваных сістэм і сістэм рэальнага часу (гл. § Бягучае выкарыстанне ).

Гістарычна склалася, што шматлікія праграмы былі напісаны цалкам на мове асэмблера. Burroughs MCP (1961) быў першым кампутарам, для якога аперацыйная сістэма не была распрацавана цалкам на мове асэмблера; ён быў напісаны на праблемна-арыентаванай мове выканаўчых сістэм (ESPOL), дыялекце алгола. Шмат камерцыйных прыкладанняў таксама было напісана на мове асэмблера, у тым ліку вялікая колькасць праграмнага забеспячэння для мэйнфрэймаў IBM, напісанага буйнымі карпарацыямі. COBOL, FORTRAN і некаторыя PL/I у канчатковым выніку выцеснілі вялікую частку гэтай працы, хоць шэраг буйных арганізацый захавалі інфраструктуру прыкладанняў на асэмблеры нават у 1990-я гады.

Мова асэмблера доўгі час была асноўнай мовай распрацоўкі многіх папулярных хатніх кампутараў 1980-х і 1990-х гадоў (такіх як MSX, Sinclair ZX Spectrum, Commodore 64, Commodore Amiga і Atari ST ). Гэта адбылося ў значнай ступені з-за таго, што інтэрпрэтаваныя дыялекты BASIC у гэтых сістэмах забяспечвалі недастатковую хуткасць выканання, а таксама недастатковыя магчымасці для поўнага выкарыстання даступнага абсталявання ў гэтых сістэмах. Некаторыя сістэмы нават маюць інтэграванае асяроддзе распрацоўкі (IDE) з высокаразвітымі сродкамі адладкі і макрасаў. Некаторыя кампілятары, даступныя для Radio Shack TRS-80 і яго пераемнікаў, мелі магчымасць камбінаваць убудаваны зыходны код зборкі з аператарамі праграмы высокага ўзроўню. Пасля кампіляцыі ўбудаваны асэмблер ствараў убудаваны машынны код.

Бягучае выкарыстанне[правіць | правіць зыходнік]

Вядуцца дэбаты наконт карыснасці і прадукцыйнасці асэмблера ў параўнанні з мовамі высокага ўзроўню.

Нягледзячы на тое, што мова асэмблера мае асаблівае нішавае выкарыстанне там, дзе гэта важна (гл. ніжэй), існуюць і іншыя інструменты для аптымізацыі.

на пуста 7 года, the TIOBE index of programming language popularity ranks assembly language at 11, ahead of Visual Basic, for example. Assembler can be used to optimize for speed or optimize for size. In the case of speed optimization, modern optimizing compilers are claimed to render high-level languages into code that can run as fast as hand-written assembly, despite the counter-examples that can be found. The complexity of modern processors and memory sub-systems makes effective optimization increasingly difficult for compilers, as well as for assembly programmers. Moreover, increasing processor performance has meant that most CPUs sit idle most of the time, with delays caused by predictable bottlenecks such as cache misses, I/O operations and paging. This has made raw code execution speed a non-issue for many programmers.

Ёсць некаторыя сітуацыі, у якіх распрацоўшчыкі могуць выбраць мову асэмблера:

  • Напісанне кода для сістэм са older processors , якія маюць абмежаваныя варыянты мовы высокага ўзроўню, такія як Atari 2600, Commodore 64 і графічны калькулятар . Праграмы для гэтых кампутараў 1970-х і 1980-х гадоў часта пішуцца ў кантэксце дэмасцэны або рэтрагульнявых субкультур.
  • Код, які павінен непасрэдна ўзаемадзейнічаць з абсталяваннем, напрыклад, у драйверах прылад і апрацоўшчыках перапыненняў .
  • Ва ўбудаваным працэсары або DSP перапыненні з вялікай колькасцю паўтораў патрабуюць найменшай колькасці цыклаў на перапыненне, напрыклад, перапыненне, якое адбываецца 1000 або 10000 разоў у секунду.
  • Праграмы, якія патрабуюць выкарыстання спецыфічных інструкцый працэсара, не рэалізаваных у кампілятары. Распаўсюджаным прыкладам з'яўляецца інструкцыя паразраднага павароту ў аснове многіх алгарытмаў шыфравання, а таксама запыт цотнасці байта або 4-бітнага пераносу дапаўнення.
  • Патрабуецца аўтаномны выканальны файл кампактнага памеру, які павінен працаваць без звароту да кампанентаў часу выканання або бібліятэк, звязаных з мовай высокага ўзроўню. Прыклады ўключаюць прашыўкі для тэлефонаў, аўтамабільных паліўных сістэм і сістэм запальвання, сістэм кіравання кандыцыянаваннем паветра, сістэм бяспекі і датчыкаў.
  • Праграмы з унутранымі цыкламі, якія залежаць ад прадукцыйнасці, дзе мова асэмблера забяспечвае магчымасці аптымізацыі, якіх цяжка дасягнуць на мове высокага ўзроўню. Напрыклад, лінейная алгебра з BLAS або дыскрэтнае пераўтварэнне косінуса (напр. Версія зборкі SIMD ад x264 ).
  • Праграмы, якія ствараюць вектарызаваныя функцыі для праграм на мовах больш высокага ўзроўню, такіх як C. У мове больш высокага ўзроўню гэтаму часам спрыяюць унутраныя функцыі кампілятара, якія адлюстроўваюцца непасрэдна ў мнемоніку SIMD, але, тым не менш, прыводзяць да пераўтварэння зборкі адзін-да-аднаму для дадзенага вектарнага працэсара.
  • Праграмы ў рэжыме рэальнага часу, такія як мадэляванне, палётныя навігацыйныя сістэмы і медыцынскае абсталяванне. Напрыклад, у сістэме бесправадной сувязі тэлеметрыя павінна інтэрпрэтавацца і дзейнічаць у строгіх часовых абмежаваннях. Такія сістэмы павінны ліквідаваць крыніцы непрадказальных затрымак, якія могуць быць створаны (некаторымі) інтэрпрэтаванымі мовамі, аўтаматычным зборам смецця, аперацыямі падпампоўкі або прэвентыўнай шматзадачнасцю . Аднак некаторыя мовы больш высокага ўзроўню ўключаюць у сябе кампаненты часу выканання і інтэрфейсы аперацыйнай сістэмы, якія могуць выклікаць такія затрымкі. Выбар асэмблера або моў ніжэйшага ўзроўню для такіх сістэм дае праграмістам большую бачнасць і кантроль над дэталямі апрацоўкі.
  • Крыптаграфічныя алгарытмы, выкананне якіх заўсёды павінна займаць аднолькавы час, што прадухіляе атакі па часе .
  • Змяняйце і пашырайце стары код, напісаны для мэйнфрэймаў IBM. [3]
  • Сітуацыі, калі патрабуецца поўны кантроль над навакольным асяроддзем, у сітуацыях з надзвычай высокім узроўнем бяспекі, калі нічога нельга прымаць як належнае .
  • Камп'ютэрныя вірусы, загрузнікі, пэўныя драйверы прылад або іншыя прадметы, вельмі блізкія да абсталявання або нізкаўзроўневай аперацыйнай сістэмы.
  • Сімулятары набораў інструкцый для маніторынгу, адсочвання і адладкі, дзе дадатковыя выдаткі зведзены да мінімуму.
  • Сітуацыі, калі не існуе мовы высокага ўзроўню, на новым або спецыялізаваным працэсары, для якога недаступны крос-кампілятар .
  • Зваротнае праектаванне і змяненне праграмных файлаў, такіх як:
    • існуючыя двайковыя файлы, якія першапачаткова былі напісаны або не былі напісаны на мове высокага ўзроўню, напрыклад, пры спробе ўзнавіць праграмы, для якіх зыходны код недаступны або быў страчаны, або пры ўзломе абароны ад капіравання прапрыетарнага праграмнага забеспячэння.
    • Відэагульні (таксама званыя ўзломам ПЗУ ), якія можна зрабіць некалькімі метадамі. Найбольш шырока выкарыстоўваным метадам з'яўляецца змяненне праграмнага кода на ўзроўні асэмблера.

Мова зборкі па-ранейшаму выкладаецца ў большасці праграм інфарматыкі і электроннай тэхнікі . Хаця нешматлікія праграмісты сёння рэгулярна працуюць з асэмблерам як інструментам, асноўныя канцэпцыі застаюцца важнымі. Такія фундаментальныя тэмы, як двайковая арыфметыка, размеркаванне памяці, апрацоўка стэка, кадаванне набору сімвалаў, апрацоўка перапыненняў і канструкцыя кампілятара, было б цяжка вывучыць у дэталях без разумення таго, як кампутар працуе на апаратным узроўні. Паколькі паводзіны кампутара ў асноўным вызначаюцца яго наборам інструкцый, лагічным спосабам вывучэння такіх паняццяў з'яўляецца вывучэнне мовы асэмблера. Большасць сучасных кампутараў маюць падобныя наборы інструкцый. Такім чынам, вывучэння адной мовы асэмблера дастаткова, каб вывучыць: I) асноўныя паняцці; II) распазнаваць сітуацыі, калі выкарыстанне асэмблера можа быць мэтазгодным; і III), каб убачыць, наколькі эфектыўны выкананы код можна стварыць з моў высокага ўзроўню.

Тыповыя прыкладанні[правіць | правіць зыходнік]

  • Мова асэмблера звычайна выкарыстоўваецца ў кодзе загрузкі сістэмы, нізкаўзроўневым кодзе, які ініцыялізуе і тэстуе апаратнае забеспячэнне сістэмы перад загрузкай аперацыйнай сістэмы і часта захоўваецца ў ПЗУ . (У якасці прыкладу можна прывесці BIOS на IBM-сумяшчальных ПК і CP/M . )
  • Мова асэмблера часта выкарыстоўваецца для нізкаўзроўневага кода, напрыклад, для ядраў аперацыйных сістэм, якія не могуць абапірацца на наяўнасць ужо існуючых сістэмных выклікаў і сапраўды павінны рэалізаваць іх для канкрэтнай архітэктуры працэсара, на якім будзе працаваць сістэма.
  • Некаторыя кампілятары спачатку перакладаюць мовы высокага ўзроўню ў зборку перад поўнай кампіляцыяй, што дазваляе праглядаць код зборкі ў мэтах адладкі і аптымізацыі.
  • Некаторыя кампілятары для моў адносна нізкага ўзроўню, такіх як Pascal або C, дазваляюць праграмісту ўбудоўваць мову асэмблера непасрэдна ў зыходны код (так званая ўбудаваная зборка ). Праграмы, якія выкарыстоўваюць такія магчымасці, могуць ствараць абстракцыі з выкарыстаннем розных моў зборкі на кожнай апаратнай платформе. Затым партатыўны код сістэмы можа выкарыстоўваць гэтыя спецыфічныя для працэсара кампаненты праз адзіны інтэрфейс.
  • Мова асэмблера карысная ў зваротнай распрацоўцы . Многія праграмы распаўсюджваюцца толькі ў выглядзе машыннага кода, які лёгка перавесці на мову асэмблера з дапамогай дызассемблера, але цяжэй перавесці на мову больш высокага ўзроўню з дапамогай дэкампілятара . Такія інструменты, як Interactive Disassembler, шырока выкарыстоўваюць для гэтай мэты разборку. Гэты метад выкарыстоўваецца хакерамі для ўзлому камерцыйнага праграмнага забеспячэння, а таксама канкурэнтамі для вытворчасці праграмнага забеспячэння з аналагічнымі вынікамі ад канкуруючых кампаній.
  • Мова асэмблера выкарыстоўваецца для павышэння хуткасці выканання, асабліва ў першых персанальных кампутарах з абмежаванай вылічальнай магутнасцю і аператыўнай памяццю.
  • Асэмблеры могуць быць выкарыстаны для стварэння блокаў даных, без моўных выдаткаў высокага ўзроўню, з адфарматаванага і закаментаванага зыходнага кода, якія будуць выкарыстоўвацца іншым кодам.

Глядзіце таксама[правіць | правіць зыходнік]

  • Складальнік
  • Параўнанне зборшчыкаў
  • Дызассемблер
  • Шаснаццатковая
  • Архітэктура набору інструкцый
  • Little Man Computer – навучальная мадэль кампутара з асэмблерам Base-10
  • Грызці
  • Тыпаваная мова асэмблера

Знешнія спасылкі[правіць | правіць зыходнік]

[[Катэгорыя:Старонкі з недагледжанымі перакладамі]]

  1. linux kernel mainline 4.9 sloccount.txt (англ.). Gist. Праверана 5 студзеня 2023.
  2. "The Origins of Informatics". {{cite journal}}: Шаблон цытавання journal патрабуе |journal= (даведка)
  3. Неабходна задаць archiveurl= і archivedate= для шаблона {{cite web}}. z/OS Version 2 Release 3 DFSMS Macro Instructions for Data Sets. live (15 лютага 2019). [ Архівавана] з першакрыніцы https://web.archive.org/web/20210625140314/https://www-01.ibm.com/servers/resourcelink/svc00100.nsf/pages/zOSV2R3sc236852/$file/idad500_v2r3.pdf.