muzruno.com

Кода на машината като програмен език. Асемблер език

Асемблерният език (или асемблер) е език за програмиране на ниско ниво за компютър или друг програмируем хардуер, в който има връзка между езика и инструкциите на кода на архитектурата на машината. Всеки машинно ориентиран език (в професионалната терминология - "колектор") се отнася до специфична компютърна архитектура. За разлика от това повечето езици за програмиране на високо ниво са междуплатформени, но изискват интерпретация или компилация.

Ориентираният към платформа код може да се нарече символичен език или набор от инструкции, които се изпълняват директно от процесора на компютъра. Всяка програма, изпълнена от процесора, се състои от серия от инструкции. Машинният код по дефиниция е най-ниското ниво на програмиране, което е видимо за програмиста.машинен код

използването на

Много операции изискват един или повече операнди, способни да конструират пълна инструкция, а много асемблери могат да приемат числови изрази и константи, а регистри и етикети като операнди. Това освобождава експерта при програмиране на езика на машинния код от досадни повтарящи се изчисления. В зависимост от архитектурата тези елементи могат да бъдат комбинирани за конкретни инструкции или режими на адресиране, като се използват компенсирания или други данни, както и фиксирани адреси. Много "колектори" предлагат допълнителни механизми за улесняване на разработването на програмата, контролират процеса на създаване и поддържат отстраняване на грешки.

Историческа перспектива

Първият език на асемблера е разработен през 1947 г. от Kathleen Booth за ARC2 в Birkbeck Лондонски университет в процеса на работа с Джон фон Нойман и Херман Голдщайн в Института за напреднали изследвания. SOAP (символична оптимална програма за сглобяване) беше асемблер за IBM PC 650, създаден от Стан Поли през 1955 г.

Исторически много софтуерни решения са написани само в асемблер. Оперативната програма е написана изключително на този език преди въвеждането на Burroughs MCP (1961), написано на езика на ESPOL (Executive Systems Problem Oriented Language). Много комерсиални приложения бяха написани на машинно ориентиран език, включително голям брой софтуерни мейнфрейми на IBM, създадени от ИТ гиганти. COBOL и FORTRAN накрая преодоляха повечето от развитията, въпреки че много големи организации запазиха инфраструктурата за приложения на базата на монтаж през 90-те години на миналия век.това, което е двоичен код

Повечето ранни микрокомпютри се основаваха на асемблер с ръчно кодиране, включително повечето OS и широкомащабни приложения. Това се дължи на факта, че тези машини са имали сериозни ограничения на ресурсите, зареждат индивидуална памет и архитектура на дисплеите и предоставят ограничени системни услуги с грешки. Може би по-важно е липсата на висококачествени компилатори на високо ниво, подходящи за използване в микрокомпютър, което е по-трудно за научаване на кода на машината.

Обхват на приложение

Езиците за сглобяване премахват по-голямата част от проблематичното, досадно и отнемащо време програмиране на асемблерите от първо поколение, изисквани на най-ранните компютри. Това освобождава програмистите от рутина под формата на запаметяване на цифрови кодове и изчисляване на адреси. В началните етапи "колекционери" се използват широко за всички видове програмиране. Въпреки това до края на 80-те години. тяхното приложение е до голяма степен заместено от езици на по-високо ниво в търсене на подобрено представяне на програмите. Днес езикът на асемблера се използва още за директна манипулация на хардуера, достъп до специализирани инструкции за процесора или за решаване на критични проблеми с производителността. Типичните приложения са драйвери на устройства, вградени системи с ниско ниво и параметри в реално време.

Примери за приложение

Типични примери за големи програми за асемблер са операционните системи IBM PC DOS, компилаторът на Turbo Pascal и ранните приложения, като програмата за електронни таблици Lotus 1-2-3.кодовете за транзакции

Машинно ориентираният език е основният език за разработка на много популярни домашни персонални компютри от 80-те и 90-те години на миналия век (като MSX, Sinclair ZX Spectrum, Commodore 64, Commodore Amiga и Atari ST). Това се дължи на факта, че тълкуваните BASIC диалози за тези системи осигуряват ниска скорост на изпълнение, както и ограничени възможности за пълно използване на съществуващото оборудване. Някои системи дори имат интегрирана среда за разработка (IDE) със силно развити отстраняване на грешки и макро обекти. Някои компилатори, налични за Radio Shack TRS-80 и неговите наследници, имаха възможността да комбинират вградения монтажен източник с програми на високо ниво. След компилацията вграденият асемблер създаде вграден двоичен код.

Машинен код за манекени. терминология

Програмата за асемблер създава операционни кодове, като превежда mnemonic комбинации и синтаксисни правила за операции и режими на адресиране в техните числови еквиваленти. Това представяне обикновено включва операционен код, както и други бита и данни за управление. Assembler също изчислява постоянните изрази и определя символните имена за местата на паметта и други обекти.

Машинни кодове асемблерни команди може да изпълнява и някои прости видове оптимизация, в зависимост от набора от команди. Един от конкретните примери за това могат да бъдат популярните "колектори" x86 от различни доставчици. Повечето от тях могат да извършват промени в командата за смяна в произволен брой пасове при поискване. Те също така могат да извършват просто пренареждане или вмъкване на инструкции, като например някои строители за RISC архитектури, които могат да помогнат за оптимизирането на интелигентното планиране на командите, за да се постигне максимално използване на газопровода на процесора.

Подобно на ранните езици за програмиране като Fortran, Algol, Cobol и Lisp, колекционери са на разположение от 50-те години на миналия век, както и първите поколения текстови компютърни интерфейси. Но колекционерите се появиха първи, защото те са много по-лесни за писане от компилаторите за езиците на високо ниво. Това се дължи на факта, че всеки мнемоничен, както и режимите за адресиране и операндите на инструкциите се превеждат в цифрови представяния на всяка конкретна инструкция без много контекст или анализ. Съществуват и редица класове преводачи и полуавтоматични кодови генератори със свойства, подобни на двете групи и езици на високо ниво, а кодът за скорост може да бъде един от най-известните примери.

Брой на пропуските

Има два вида програмиране на асемблер, въз основа на броя на пропусканията през източника (по броя на опитите за четене), за да се създаде обектния файл.

компютърен езикЕдиничните проби преминават през изходния код веднъж. Всеки знак, използван преди него, ще изисква грешка в края на обектния код.
Асемблерите с множество пасове създават таблици с всички знаци и техните стойности в първите пасажи и след това прилагат таблицата в следващите пасажи, за да генерират кода.

Първоначалната причина за използването на еднопосочни колектори е скоростта на сглобяване - често се изисква второто преминаване да се пренавие и отново да се прочете източника на програмата на лентата. По-късно компютрите с много по-голямо количество памет (особено за дисково съхранение) разполагаха с достатъчно пространство за извършване на цялата необходима обработка, без да се налага да четат отново. Предимството на многопроцесния асемблер е, че липсата на грешки води до факта, че процесът на свързване (или натоварването на програмата, ако асемблерът директно създава изпълнимия код) е по-бърз.

Какво представлява двоичен код?

Програма, написана на асемблер, се състои от серия от мнемонични инструкции за процесора и мета-оператори (известни като директиви, псевдоинженери и псевдо-операции), коментари и данни. Инструкциите за езика на асемблера обикновено се състоят от мнемоничния код на операцията. То е последвано от списък с данни, аргументи или параметри. Те се превеждат от асистента в инструкции на машинния език, които се зареждат в паметта и се изпълняват.



Например, следната декларация указва на процесора x86 / IA-32 да премести 8-битовата стойност в регистъра. Двоичният код за тази команда е 10110, последван от 3-битов идентификатор, за който се използва регистърът. AL идентификаторът е 000, така че следният код зарежда AL регистъра с данните 01100001.

Възниква въпросът: какво е двоичен код? Това е кодираща система, използваща двоични цифри "0" и "1" за представяне на буква, число или друг символ на компютър или друго електронно устройство.

Пример за машинен код: 10110000 01100001.

Технически характеристики

Преобразуването на езика на монтажа в кода на машината е задача за асемблер. Обратният процес се осъществява с помощта на демонтаж. За разлика от езиците на високо ниво, има кореспонденция "един към един" между множеството прости монтажни оператори и инструкциите на езика на машината. В някои случаи обаче, асемблерът може да осигури псевдоинструкции (макроси). Те се отнасят за няколко инструкции за машинен език, за да осигурят обичайно необходимата функционалност. Повечето пълномощни асемблери осигуряват и богат език на макроси, който се използва от продавачите и програмистите за генериране на по-сложни кодове и последователности от данни.монтажно програмиране

Всяка компютърна архитектура има свой собствен език на машината. Компютрите се отличават с броя и видовете операции, които поддържат, с различни размери и брой регистри, както и с представянето на данни в хранилището. Докато повечето PC с общо предназначение могат да изпълняват почти една и съща функционалност, начините, по които те правят, са различни. Съответните езици на асемблера отразяват тези различия.

Много набори от мнемонични или синтаксиси в асемблер могат да съществуват за един набор команди, обикновено създадени в различни програми. В тези случаи най-популярен е обикновено този, който се предоставя от производителя и се използва в неговата документация.

Език на дизайна

Съществува голяма степен на разнообразие в това, как авторите на колекционерите класифицират приложенията и номенклатурата, която използват. По-специално, някои описват всичко, което се различава от машината или разширените мнемоники, като псевдо-операция. Основният речник на събранието се състои от командна система - трите основни типа инструкции, които се използват за дефиниране на програмните операции:

  • мнемониките на опкода;
  • дефиниции на данни;
  • директиви на колектора.

Мнемоничен код и разширени мнемоники

Инструкциите, написани на асемблер, са елементарни, за разлика от езиците на високо ниво. Като правило мнемониката (произволни символи) е символично означение за една изпълнима кодирана инструкция. Всяка команда обикновено се състои от операционен код плюс нула или повече операнди. Повечето команди се отнасят до една или две стойности.

Разширените мнемоники често се използват за специализирано изпълнение на инструкции - за цели, които не са очевидни от името на ръководството. Например, много процесори нямат изрична инструкция NOP, но имат вградени алгоритми, които се използват за тази цел.платформен код

Много строители поддържат основни вградени макроси, които могат да генерират две или повече инструкции за машината.

Директиви за данни

Има инструкции, използвани за дефиниране на елементи за съхранение на данни и променливи. Те определят типа данни, дължината и подравняването. Тези инструкции могат също да определят наличието на информация за външни програми (събирани отделно) или само за програмата, в която е дефиниран дялът за данни. Някои сглобяващи ги определят като псевдо-оператори.

Директиви за събранията

Директивите за колектора, наречени също псевдокодове или псевдо-операции, са инструкции, предоставени на асемблера, и насочват ги за извършване на операции, различни от инструкциите за монтаж. Директивите засягат монтажната работа и могат да повлияят на обектния код, таблицата със символи, файла с регистрационни файлове и стойностите на параметрите на вътрешния асемблер. Понякога терминът "псевдокод" е запазен за директивите, които генерират обектния код.

Имената на псевдо-операциите често започват от точка, за да се различават от инструкциите на машината. Друга често срещана употреба на псевдо-операциите е да се запазят зоните за съхранение на данните за времето на изпълнение и евентуално да се инициализира съдържанието им до известни стойности.командната система

Самостоятелно документиращ код

Символните сглобяващи устройства позволяват на програмистите да свързват произволни имена (етикети или символи) с клетки от паметта и различни константи. Често всяка константа и променлива имат определено име, така че инструкциите могат да се отнасят до тези местоположения по име, като по този начин допринасят за кода за само документиране. В изпълним код, името на всяка подпрограма е свързано с входната точка, така че всички повиквания към подпрограмата могат да използват името си. В рамките на подпрограмите са назначени GOTO етикети. Много строители поддържат местни знаци, които са лексикално различни от обикновените знаци.

тип монтажници NASM осигуряват гъвкаво управление символ, което позволява на програмистите да управляват различни пространства от имена, автоматично изчисляване на отклонението в структурите от данни и възлага етикети, които се отнасят до буквални стойности или в резултат на прости изчисления, извършени от асемблер. Етикетите могат да се използват и за инициализиране на константи и променливи, използващи роуминг адреси.

Асемблерните езици, като повечето други компютърни езици, ви позволяват да добавяте коментари към изходния код на програмата, които ще бъдат игнорирани по време на процеса на създаване. Съдебното коментиране е важно в програмите за асемблер, тъй като е трудно да се определи и присвои поредица от двоични инструкции за машината. Езикът на асемблера "без ръкопляскане" (без коментиране), създаден от компилатори или разглобяване, е трудно да се чете, когато е необходимо да се правят промени.

Споделяне в социалните мрежи:

сроден