ПредишенСледващото

556 Глава 7. Ниво Assembler

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

асемблер. и за въвеждане на език - монтаж език. или просто асемблер. Ако езикът на въвеждане е език от високо ниво (например, Java, или C) и целевия език е или цифров машинен език, символично представяне на последните, преводачът нарича компилатор.

Какво е "асемблер"?

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

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

Познаването на асемблер 557

Rathore асемблер и машинни команди (ние вече говорихме за това). На второ място, програмист писане на асемблер, достъп до всички съоръжения и екипи от целевата машина. Програмистът, който пише езици от високо ниво, като свобода не го прави. Например, ако целевата машина съдържа преливане малко, асемблер програма може да го проверите и Java-програма - не. Assembler програма може да изпълнява всяка команда от командния набор от целевата машина, програмен език на високо ниво - не. С една дума, всичко, което може да бъде направено в машинен език, и може да бъде направено на асемблер, но в същото време, програмисти пишат програми на езици от високо ниво, не са на разположение, много отбори, регистри и други обекти. Система програмни езици (например, С) често заемат междинно положение. Въпреки, че те имат по синтаксис, присъщи на езици от високо ниво, от гледна точка на възможностите за достъп до по-близо до асемблер.

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

назначаване монтаж

Работа с асемблер не е лесно. Писане и съща програма на асемблер отнема много повече време, отколкото на езика на високо ниво. В допълнение, много от времето, необходимо за отстраняване на грешки и код подкрепа изисква много повече усилия.

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

В крайна сметка, някой трябва да напише компилатор (и асемблер). На второ място, асемблер дава отлична представа за реалната машина-

не. За тези, които учат на архитектурата на компютрите, писане асемблер код - единственият начин да разберете какво колата е в архитектурно ниво.

558 Глава 7. Ниво Assembler

Формат изявления на асемблер

Въпреки че структурата на оператора на монтаж отразява структурата на съответната инструкция машина, монтаж на езици за различни машини и различни нива до голяма степен сходни, което предполага, че езикът събрание като цяло. Предложения 7,1-7,3 програма фрагмент е показано на x86 асемблер, изчислява формула N = I + J. оператори по празен ред памет са запазени за променливата I. J и N. т.е. не са символни представяния на машинни инструкции.

Обявата 7.1. Изчисляване на експресия N = I + x86 асемблер ЮНА

; и тяхната стойност за инициализация 0

За компютри Intel семейство (т.е. x86), има няколко монтажници, които са различни един от друг синтаксис. В тази глава ние ще използваме езика монтаж Microsoft MASM. Има и много асемблер за ARM процесори, но те са в близост до x86 сглобяването й синтаксис, така че един пример би бил достатъчен.

Обявата настоящия пример тагове: ФОРМУЛА, I, J и N. MASM дебелото черво на асемблер се поставя само след команда маркери, но не и след етикетите на данни. Тази разлика не е изобщо нещо фундаментално, просто

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

В някои монтажници отбележат дължина е ограничена до 6 или 8 символа. В същото време, в повечето езици от високо ниво, дължината на произволни имена. Дълги и добре подбрани имена правят по-лесно за четене и разбиране на програмата.

Всяка кола има няколко регистри, но имената им са напълно различни. Регистри Core i7 нарича EAX, EBX, ECX, и така нататък. Г.

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

Познаването на асемблер 559

Различни разработчиците ги наричат ​​по различен начин. MASM монтажен разработчиците са решили да използват наименованието и MOV да се зареди от регистъра на паметта и съхранява регистрирате в паметта. Със същия успех биха могли да използват MOVE двойка с товар или магазин.

Програми в асемблер често се изисква да резервират място за данни. MASM разработчиците, избрани за това име операция DD (Дефинирайте два пъти - определят двойна дума) като текстообработваща програма 8088 имат дължина от 16 бита.

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

Таблица 7.1. Някои директиви монтажен MASM

директива СЕГМЕНТ започва нов сегмент, както и директивата краищата го завърши. Текст сегмент може да бъде стартиран, а след това да започне сегмента на данни и след това да се върне в сегмента на текст, и така нататък. Г.

директива EQU дава символично име на определен израз. Например, след като на следващия директивата символ BASE може да се използва в програмата вместо от стойността на 1000:

Изразът, който следва директива об. може да съдържа няколко символи, знаци свързан аритметика и други операции, като например:

Повечето монтажници включително MASM, изискват, че характерът е определен в програмата, преди неговата поява в такива условия, тъй като е.

Директива DB. DD. DW и DQ памет за един или повече променливи на 1, 2, 4 и 8 байта, съответно. Например:

TABLE DB 11, 23, 49,

PROC и ENDP, определят началото и в края на процедурите за монтажен. Процедури на асемблер изпълнява същата роля, както в езиците за програмиране от високо ниво. MACRO директива и ENDM определи началото и края на макроса. За макроси ще бъдат обсъдени в следващия раздел.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!