Свързващ редактор link изпълним файл *. exe *. com



Дата08.06.2017
Размер78.48 Kb.
#23094
1.Символични езици…. Асемблерния език съдържа мнемонично означение на машинни команди, набор от директиви, микроапарат, набор от служебникомади, синтаксис. Той е най-близък домашинния език. Асемблерната програма се асемблира (не се компилира или транслира) като на входа й се подава текстов файл, който съдържа данни и правила и на базата на това, програма извършва асемблирането на сорса до изпълним код.Като резултат е файл с изпълнимия код и листинг - адреси, команди, разположение на памет, отместване спрямо начален адрес и др. Преместваемост на кода – казваме, че един код (блок) е преместваем, ако той съдържа и допълнитена информация, която позволява коректно настройване на програмта, независимо от началния адрес. За независимите програми се използва относителна адресация (непълно указване на адресите). Свързване – процесите на събиране и свързване са различни - схема на свързване:

*.asm -> асемблер -> *.obj -> свързващ редактор link -> изпълним файл *.exe *.com

предимства: 1)позволява модулност – свързваане на много модули; 2)реализира се връзка с различни програмни среди – файла подлежащ на свързване трябв да съдържа информация за нерешените до момента преходи. Изпълнимия файл трябва да съдържа служебна информация за донастройка. В DOS служебната информация се нарича префикс. Такъв префикс се генерира за всички .exe. COM файловете не съдържат етикети за донастройка – всички преходи са относителни и се съдържат в рамките на един сегмент. Асемблерната програма генерира пасове. Пас – последователно обхожане на програмата с цел обрботка. Проблем са преходите напред – всички модули трябва да бъдат преместени в рамките н текущия изпълним асемблер. При еднопасов асемблер програмата се асемблира на един пас. При двупасов – при всеки пас се преглежда таблицта за определеност. Когато се срещне неопределено име трябва да се укаже стойността на атрибута - дължина. Свързващия редактор също работи на пасове. Задачата му е да определи всички външни преходи в рамките на паса и да ги разнесе в кода. Съществуват два вида свързване – статично и динамично. 1)статично – всички библиотечни модули трябва да се подадат на свързващия редактор. 2)динамично – схема, която в Windows среда е стандарт. Това са библиотеки съдържащи данни или код за многократо използване. Динамичното свързване е задължително за многозадачните среди.

2. Архитектурни и… Конвейрна обработка – всяка асемблерна инструкция може да се раздели на стъпала ( извличане на следваща инструкция, изчислявне на адрес, извършване на операции, съхранение, и др.). Така процесора може да е реализиран в отделни устройства. Кеш памет – оперативна памет, вградена в чипа на процесора. Използва се за временно съхранение на: данни, които се използват често; инструкции получени в резултат на предварително извличане; адресни преобразувания. Съществуват три вида адресация на кеш паметта: асоциативна – част от полетата на адреса се интерпретират като признаци и се използват за хардуерно търсене на съответния ред в кеш таблицата; директна – няколко бита от адреса се използват за да адресират ред в кеш паметта; смесено – комбинация на асоциативно и директно. Трябва да има съответствие между съдържанието на кеш-паметта и оперативната памет – опресняване. Проблема се решава на ниско ниво – промените в кеш-паметта в някои архитектури са забранени, или съществува флаг за актуалност. Виртуална памет – приравняване с оперативната памет. Задачат на системата за управление на виртуалната памет е да осигури достъп до тази памет на програмиста. Това се реализира с механизма на прекъсванията. Управление на паметта – при директно адресиране винаги се налага работа с директния адрес. Решението е да се работи с част от адреса. Облекчава се модулното програмиране, защитата на паметта, управлението на преходите (лесно се проверява, дали програмата адресира пространство извън даденото), подпомага се преместваемостта, използва се многозадачно програмиране (всяка задача работи в свое адресно пространство)


ЛА - логически адрес, указан в полето на инструкцията;

Р- размер;

З – защита;

Н – начален адрес – сочи базата;

ЛА- сочи отместването спрямо базата;

ЛА не се интерпретира като отместване. Механизма на странициране уплътнява паметта, но не е съобразен с данните. Паметта не се попълва добре. Регистъра съдържа началните адреси на всички страници.Триоперанден асемблер: Пример1:

Example()

{int i,k,n;

………

n=i+5;


………

k=i-4;}


3 оп.асемблер

(Ir0=I; Ir1=k; Ir2=n; Ir3-помощен)

sll Ir3,Ir0,2

add Ir2,Ir3,Ir0

sll Ir1,Ir0,2

2 оп.асемблер

(r0=i; r1=k;r2=n)

mov r2,r0

sll r2,2

add r2,r0

mov r1,r0

sll r1,2


3. Програмен модел…. Програмен модел – съставен е от регистри програмно достъпни (16 bit). Разделят се на: 1) с общо предназначение – всеки регистър освен като 16 битов може да работи и като 8 битов. AX – акумулатор – може да се раздели на два 8 битови – AH,AL – участва по задължение в някои аритметични операции. BX(BH,BL) – базов регистър – участва в някои адресации. По подразбиране участва в някои трансформации. CX(CH,CL) – брояч – по подразбиране се използва като брояч на цикли. Части от него се използват като броячи на ротции. DX(DH,DL) – даннов регистър – при аритметични операции; 2) индексно-указателни – SI –source index. DI – destination index. SP – Stack pointer. BP-base pointer. SI,DI – индексни регистри – индексират масиви, низове, и др. При операции със стрингове, SI сочи източника. SP-върха на стека;.BP – много близък до SP. Той се асоцира при използване на със стека. Различен е по това, че не се инкреметира или декрементира автоматично. Служи за репер в стека. Много от процесорите имат повече от един BP. Извикващата функция започва да изразходва пространство от стека. Софтуерно се организира брояч, който при всяка операция със стека, се инкрементира и и актуализира разстоянието м/у SP и BP. 3) сегментни – CS-code segment. DS – data segment. SS – stack segment. ES – extern segment. Сегмент – блок от паметта за съхраняване на определен тип данни . Всеки сегмент следва да се сочи от съответния регментен регистър. Сегмента се структурира от прогрмиста. Базата на сегмента се сочи от CS, а текущата изпълявана инструкция от IP. Границите на еди сегмент са от 0 byte до 64Kb. Образуване на физически адрес. ЕФ+отместване=ФА. FLAGS- съдържа набор от флагове, които се установяват от програмиста и влияят върху изчислителния процес или се установяват в резултата от изчисления във вид на статус. C-carry-отразява преноса; OF – overflow- препълване; AF – отразява преход от младша тетрада на резултат към следващ бит; DF – при аритметика със знак; S-sign – отразява съдържанието на старшия бит; P – parity - при четен брой единици се установява в H; Z-zero- вдига се ако резулатата е 0; D-direction- програмиста го установява – вляе в/у посоката на обхождане на масив от стрингове; T – trap – управление на стъпковия режим на работa; I – interrupt- забранява маскируемите прекъсвания.

4. Стек и случаи…..

Стек – организация на данните, характеризираща се с определен алгоритъм на запълване и изпразване. Всяка асемблерна програма, трябва да структурира стек. Връх – сочи последната заета клетка от стека при процесори от фамилия Intel (при Motorola – последната свободна). Стека се ползва за 1) вкарване и изкарване на данни (PUSH,POP); 2) за съхранениена информация, необходима за коректно възстановяване на хода на програма при прекъсване. Трябва да се има в предвид обема на тази информация – за да не се получи препълване на стека. 3) при прекъсване в многозадачен режим, се съхранява блок такава информация наречена – frame; 4) за съхраняване на параметри при викане на процедури и функции; 5) езиците от високо ниво (Pascal,C) ползват стека за поставяне на определени променливи (пр. C – за автоматични променливи); 6) при рекурсия – при всяко викане на рекурсивната програма, тя записва данни в стека. Програмен модел на процесори (i386+): Процесорите i386+ имат три режим на работа: 1) Real Mode – всички разширения се свиват и стават 16 разредни; 2) Protected – цяката конфигураця използва 32 разряда; 3) комбиниран – допускат се многозадачност, като някоя от задачите може да е в Real Mode, а друга в Protected. В Protected, 8-те регистъра (EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP) стават равнопоставени. LDTR – Local Decriptor Table Register; GDTR – Global Decriptor Table Register; IDTR – Interrupt Descriptor Table Register. Появяват се три управляващи регистъра – участват в механизма на странициране. Появяват се 8 DR регистъра (Debug Register) – 1 за настройка, 2 за прекъсване. DR6 – дава информация от процесора към нас ( има ли точка на прекъсван, за коя точка). DR7 – ние указваме режима на debug (прекъсване само при запис, само четене, сравнение по байтове)



9. Директиви за …

Директивата Record дефинира структурата от данни. Името, което се дава в Record, се превръща в нова директива за асемблера. Това име на запис може да се използва от програмиста за дефиниране на конкретни обекти от данни. В директивата Record обектите се дефинират на ниво битове. Тя наименува всички полета, като задава дължината на всяко поле в битове и може да се използва за генериране на полета от битове с обща дължина 16 бита. Тъй като при една дума на състоянието отделните битове трябва да може да бъдат проверявани селективно, независимо един от друг, всички други битове трябва да се направят “невидими”. Този процес се нарича “маскиране”. Така тук е необходимо да бъде видим само желаня бит от оригинала (думата на състоянието), а всички други битове се установяват на 0. В разгледания пример:

mov ax,date

and ax, mask a

mov cl,a

shr ax,cl

mov bx,al

непосредствен операнд тук е MASK A, тъй като променливата ‘а’ представлява едно поле вътре в записа, операндът MASK дава стойност която отделя променливата ‘а’ от цялата дума. Операцията MASK A дава стойност 1 или 0, тази стойност на маската съответсва на битовете, които формират стойността ‘а’ в думата. Логическото сумиране на тази стоиност с останалата част на записа записва само полето ‘а’Директивата RECORD има и някой др. възможности. Да разгледаме една символна табл. на асемблирането тази табл. показва информацията, с която разполага асемблерат за всяко от полетата на записа :

Name shift width mask initial

D_Word ...0010 0003

‘A’ ………0009 0007 FE00 0000

‘B’……… 0005 0004 01E0 0000



“shift mask initial”(изместване ,дулжина, маска и начална стойност)Data_Word-генерира 16 битова обл. за данни и има 2 полета . Всяко от полетата има 4 признака (атрибута). Асемлера разполага с информация за дължината на всички полета в записа. Дължината на дадено поле може да се определи по време на асемблирането с оператора WIDTH в резултат от изпълнението на инструкцията MOV AL, WIDTH A. В регистъра AL за разглеждания пример се записва стойността 7. Колоната за началните стойности в символната таблица показва какви стойности записва асемблера в съответните полета, когато създава записа. Могат да се задават записи с начални стойности различни от нула. Тези стойности могат да бъдат изместени от други в момента на генериране на областта на данните


Сподели с приятели:




©obuch.info 2024
отнасят до администрацията

    Начална страница