Полезно за вас: Речник | Игри | Новини | Фирми | Рецепти | Обяви
Начало на реферати

Асемблери - Теми 14, 15, 17, 28


Информационни технологии | 2009-12-04 | 141 сваляния

14. Деклариране на

В асемблер е възможно да се структурират обекти. Може да се дефинира метод, поле и др. Обект съвкупност от данни и методи над данните. Асемблер дава възможност да се използват определени имена да структури и обекти.

Пр.:

Деклариране на обекти (instance). Декларирането предизвиква следните действия: 1) деклариране на структурата от данни; 2) създаване на таблица от тип TABLE за статичните методи. При виртуалните методи се създава отделна таблица отпада необходимостта от статична таблица. Виртуалната таблица съдържа адресите на виртуалните методи. За всеки обект от освен структурата се поражда отделна виртуална таблица.

Деклариране на методи: Методите са процедури, но като първи параметър изискват да се подава указател към обекта (в С указател this). Методите са статични и виртуални. Преходите към виртуалните методи са косвени (реализират се динамично). Прехвърлянето към статичните методи се осъществява по време на компилацията.

Виртуална метод таблица (VMT) Полетата от нея са адресите н процедурите, които реализират виртуалните методи. Всеки обект трябва да има собствена VMT. Тя стои в данновия сегмент. С директивата TB_INST се описват обектите по един във файл. В метода init се прави инициализиране на указателя към обекта. За това има директива TB<</SPAN>INIT. Пр.: TB<</SPAN>INIT ds,si инициализиранена първия елемент от структурата (*VMT). Инициализирането не може да бъде виртуален метод.

Обръщение към методи: 1) към статичен метод с инструкция CALL; 2) към виртуален метод също с CALL, но сработва механизма за косвено адресиране. CALL се разширява в две инструкции. Първата е mov, която в двойка регистри ще зареди адреса на VMT и след това с косвена адресация CALL (чрез регистър и метод) се предава управлението към метода.

Викане на родителски виртуален метод. Съществуват няколко основни проблема : 1) за кой обект от йерархията се отнася повикването; 2) как да стане повикването от таблицата VMT (постига се безкраен цикъл възможно е при статичните обекти). Адреса на родителската VMT трабва да се зареди реално































15. Междуезикови връзки.

За коректно осъществяване на междуезикови връзки, трябва да са изяснени няколко неща: 1) конвенция за имената различава ли се малка и голяма буква, осъществява ли се преобразуване от малки в големи букви, съществува ли модифициране на имената (CPP-компилатора поставя водещо долно тире на всички имена. При имена на процедури, се прави преобразуване към името се добавя наставка, която определя броя и типа на предаваните параметри. Пр.: CPP: test(void); Asm: _test@qv); 2) Предаване на параметри и връщане на резултати. Съществуват C-конвенция и Pascal-конвенция. Аргументите се предават чрез стек. Поставянето в стека е отляво надяснио или обратно. В Windows се използва Pascal конвенцията. При CPP предимство е предаването на променлив брой аргументи. Върха на стека съдържа число показващо броя на предадените параметри. Pascal-конвенцията изисква ответстващата страна да се грижи за коректното изпразване на стека. В CPP извикващата страна се грижи за почистването на стека. 3) връщане на резултати в CPP съществува таблица, описваща връщането на резултатите. Ако резултата е байт или дума, той се поставя в AX, ако е по-голям в DX(старша), AX(младша). 4) правилна интерпретация на предадените параметри дали се осъществява с адрес или стойност. Ако се предава име на масив, или функция, то се предава като адрес и трябва да се обработва като адрес. 5) съответствие на моделите памет компилацията поражда определена структура на програмата, определен вид а сегментите и подразбиращите се преходи (указатели).Ако е нужно един сегмент на асемблер да се слее с сегмент на CPP, те трябва да се именоват по един и същ начин. В Pascal преходите са винаги far.



















































17 Управление на Управление на паметта: В С съществуват три вида указатели: near 16 битова стойност. Съдържа само сегменти (offset), far- състои се от две части: база и отместване (т.е. 32 бита като две отделни части) когато над far указатели се извършват логически операции се сравняват само offsetите. Тези операции не дават смислен резултат. Аритметичните операции с far указатели са циклични, huge има структура на far,но не се допуска отместването да бъде по-голямо от 16 байта. Т.е. сегментите са задължително до 16 байта. Компилатора формира физическия адрес на двете части. Логическите операции дават валидни стойности. Не съществува проблем с цикличността при аритметичните операции.С huge указатели се дефинират структури, чиято дължина не надхвърля 64К.


Програмата се структурира в един сегмент(код и данни). Сегментните регистри се инициализират с някаква стойност (обединени са в група). Тази структура е добра за мали програми пр. .com

Поражда два сегмента- за данни и за групи. Подходяща е за най-често срещаните програми.

Много кодови сегменти и една група за код.

За прогрми с малък код.





За програми с голям обем код и голям обем данни структури > 64К


Ако изберем small модела подразбираме близки преходи. Ако съществуващата програма се прекомпилира в друг модел функцията работи с far указател, нo main() има указател near , т.е. няма да работи коректно. При разделно компилиране, е подобна ситуацията на несъответствие. Трябва да има съответствие на типовете. Това се постига с #include файловете. Могат да се включват и библиотечни функции.



28. Съвети при работа.

Работа с динамична памет (32бита): Трябва да се мисли за свободна памет и фрагментация механизма за заделяне и освобождаване е различен при работа с малки и големи блокове. Поради фрагментацията е по-добре да се заема / освобождава глобално блок. Трябва да се следи стека да не се препълни за конвенционални програми (поради линейна адресация). Всички те са в 2 Gb адресно пространство, което се разглежда като един сегмент. Стремежа в 32 битова среда е да има колкото може повече неща в стека; За използване на Swap файла той също е ресурс и се изчерпва. Стремежа е да се увеличат данните и кода, но не са в swap и се асоцират с него (т.е. няма да има промени в тях). Трябва да знаем какво можем да прикачим към едно .exe (за инициализиране на константни данни използвамемеханизма, типичен за еье-то): const char a[]=my const; - инициализация; -обявяване за константа. Компилатора обособява всички инициализирани констани в една секция, съхраняваща се заедно с .exe. Тези данни се приравняват към кода, но констукто на обект не трябва да се обявява за константа. Const CRECT myrect (0,0,50,50) не са в секцията за инциализирани константни данни, а секцията за неинициализирани. Const cstring mystring (my string) изпълянва се: 1) обекта се вкарва в секцията BSS за неинициализирани данни; 2) компилатора ще пази my string в data segment; 3) копие от тези данни ще се предаде в пространството на всеки процес, който го използва.









































































































Асемблери - Теми 14, 15, 17, 28

Добави своя коментар:



Тагове от реферата: , , , , ,

Изтегли в DOC | PDF | ZIP

Подобни материали


ОСНОВНИ ИНФОРМАЦИОННИ ДЕЙНОСТИ. ИНФОРМАТИКА Информационни технологии | 2010-08-07 | 135 прочитания
Системи за международни разплащания Информационни технологии | 2010-08-07 | 87 прочитания
Класификация на компютрите Информационни технологии | 2010-08-07 | 77 прочитания
Същност на средите за разработка Информационни технологии | 2010-08-07 | 60 прочитания
Инструменти за наблюдение, управление и отсраняване на неизправности Информационни технологии | 2010-11-12 | 61 прочитания
Предпроцесор Информационни технологии | 2010-11-12 | 48 прочитания
Процесор на компютъра Информационни технологии | 2010-11-12 | 68 прочитания
Състав и функции на операционната система.Файлова система Информационни технологии | 2010-11-12 | 69 прочитания
Периферни устройства(4) Информационни технологии | 2010-11-12 | 214 прочитания
Проект по информатика (решени задачи) Информационни технологии | 2010-11-12 | 176 прочитания