Асемблери - Теми 20, 21, 22, 23, 25
| Информационни технологии | 2009-12-04 | 93 сваляния |
20. Структура и методика.
Визуално програмиране предвид се има Visual C++. Базира се на MFC класовете, които капсулират API функциите. Използваните библиотеки са MFC, APL. Програмите на Java са платформено независими и защитени. Има ограничения при работата с файлове и адреси. Java е аналог а Visual C в Internet. Основни компоненети на Visual C: Работната среда е Visual Studiо. Работи се основно с project файлове, които специфират начина на обработка. Visual Sudio съдържа: 1) редактор на ресурси създаване на диалози, менюта, икони. Създава текстов аналог на ресурса; 2) компилатор за C, CPP; 3) ресурсен компилатор за компилиране на ресурси; 4)линкер свързва компилираните ресурси, .obj файлове и библиотеки; 5)дебъгер за поставяне и изследване точки на прекъсване, динамично наблюдение на променливи, стъпково изпълнение на прогрмата, промяна на сорс кода по врее на трасиране;6) AppWizard водеща среда за структуриране на скелета на приложението, на базата на указана от нас серия; 7) набор от wizard-и за улесняване програмирането; 8) развойна среда с макроси за съдаване на wizard-и отделно от пакета; 9) ClassWizard възможност за модифициране на класовете, създаване на нови класове. Тук се генерира кода за обработка, добавят се функции. 10) SourceBrowser при работа с чужд проект. За всяка функция, обект, клас може да се види къде е дефиниран. Каква е йерархията на класа, откъде има повикване на функцията. 11) Help среда чрез HTML страници е оформен help-а. 12) тест за диагностика запаралелизма и неговото разпределение, средствта за следене движението на съобщенията, работа с версии на сорсовете. Структура, методика и изграждане на Windows приложение. При разработване на дадено приложение под DOS съществуват следните недостатъци: 1) графична среда; 2) подразбира се винаги изход на екрана; 3) непостоянно място на текст (следва курсора) 4)липсват средства за еднотипнио изпълнение. 5) на екрана остава нещо и се припокрива с други приложения. Windows еквивлент: 1) създава се прозорец на екрана; 2) съзадав се меню; 3) изписва се текст на определено място на екрана; 4) лесна работа с цветве.
21. Методика на изграждане..Пример:
Програмата се състои от две части WinMain и WinProc WinMain се поражда. Започва се с декларации (стандартен header фаил windows.h).Следва прототип на Proc функцията, която единствена се вика от Windows (т.нар. разквартируема /скрита/ функция) има параметри прозорец, съобщение и съпътстващи параметри word, wParam и др; 2) Main функцията има параметри handle към програмата. Handle се счита за индекс (число), служебно изброено и изработено към таблица на дескриптори на обекти, като Windows непрекъснато актуализира съдържанието. Обект е менюто, програмата и др. Ако има handle то обекта може да работи. Handle към предишния обект показва, че нещо се работи при първото стартиране. Третия параметър LongPointerStringZero (lpsZ) съдържа командните параметри (Param), с което се стартира програмата; int число което получава стойности, предефинирани като модификатори и показва начина на стартиране на прозореца icon, window,и др. След това следват дефиниции име напрограмата, message , WindowsClass. Прави се проверка дали се намираме в първото копие на instance - if(!hInstance) ако резултата е истина, то трябва да се инициализират полетата на класа (wndclass.style) стил на програмата , чиито идентификатори са получени от windows.hbg-BG"> дирекрива за прерисуването на приложението хоризонтално или вертикално. Прерисуването става по няколко начина longpointerfunk дълъг указател към Proc функцията дава се името нa Proc функцията, такава, каквато сме я декларирали; Extra помощни полета, hInstance инициализира се проявлението, hIcon инициализатор за приложението да се свие до икона. ClassName името на класа ще се появи в командния ред на прозореца (szAppName); RegisterClass - регистрира се класа, след което полетата се инициализират и създават. На базата на един клас могат да се създадат няколко прозореца. Функцията CrateWindow генерира съобщнение WindowsMessage. Четирите параметъра на тази функция описват координатите на прозореца. Първия Null параметър е за родителски прозорец, а втория за менюто. Последния NULL е за параметри на програмата; ShowWindow първия параметър е към прозореца, а втория как да се изобрази. Показва прозореца с фона.; UpdateWindow предизвиква прерисуване а прозореца. Генерира съобщение WM_Paint, което се прихваща; Whilе цикъла е безкраен. От него се излиза след получаване съобщението WM_QUIT. Извлича се поредното съобщение от опашката (GetMessage), попълва се структурата &msg. Тялото преобразува структурата message и пренастройва Windows-a (DispachMessage).
WndProc не се вика явно Първия параметър е handle към прозореца, а останалите са съобщения. Всяко съобщение се модифицира с число. Има и два съпътстващи параметъра (wParam и lParam) Следват декларации. Създава се device context (hDC). PAINTSTRUCT и RECT са стандартни типове. Същинската част е swich_a. Когато се предаде съобщение в този swich то се анализира. WM_PAINT се генерира при началното рисуване на екран, при прерисуване на екран и при промяна на параметрите на екрана. BeginPaint инициализира device context; GetClient изобразява се клиентската област; DrawText изписва текст към устройството, към което имаме handle към DC. Последния параметър показва как да бъде изписан текста. DC е ресурс и той трябва да се освободи с EndPoint. Задъжително трябва да има .def файл. STUB описва се .exe файл, който би се стартирал, ако програмата се пусне под DOS.
Message структурата съдържа handle към прозореца; параметрите на генериране на съобщения; точката на генериране; самото съобщение; WM_PAINT когато се припокрива 1аст от прозореца, то той се унищожава и след това се пречертава отново; в опашката се прави обобщение на всяко съобщение. Порядък на четене и обработка на съобщенията от GetMessage: 1) четат се тези, които изпреварват опащката; 2) извличат се обикновенните съобщениея; 3) проверява се дали има нормализирана област и ако има се влага функция, коато генерира WM_PAINT; 4) проверява се за вдигнат флаг за таймер, и ако има се генерира съобщение и се поставя в опашката, след което се преминава към 1).
MFC класове 1) общи класове управление на файлове, низове, изключителни ситуации, стандартни типове; 2) класове управляващи видимостите работят с менюта, контроли, прозорци, графика; 3) класове, свързани с приложенията общо структурират приложенията, изображенията; 4) OLE класове; 5) класове за интеграция с БД (ODBC); 6) контроли бутони, листове, карета и др; 6) класове свързани с Internet; Пример:
Предимствата на визуалната среда са че тя поема тривиалната работа описания, връзки и т.н. Всяко приложение се структурира в две части: 1) документ свързан с документни класове; 2) изображение свързано с класове за изображение. Може дасъществува едно изображение над много данни. Трябва да се укаже структурата на тези класове. Различават се следните класове в едно приложение: 1) документен клас; 2) клас изображение методите му работят по диалога с потребителя; 3) клас frame рамката на изображението; 4) клас на приложение това е връзката със средата; Основни са две понятия: 1) SDI в даден момент програмата работи с един документ; 2) MDI - работи се с много документи; За да се структурира едно приложение се използва AppWizard. Създават се автоматично .CPP файлове. Нанасят се корекции върху .CPP файла.Намираме метода
void ChelloView::OnDraw(CDC_DC)
{
ChelloDoc -> proc Get (Document C);
ASSERT_VALID (proc);
Crect rcClient;
GetClientRect(rcClient);
*(добавя се) BDC -> DrawText (Hello:, rcClient, DT_SINGLEUNE, DT_CENTER,DT_VCENTER);
22. Основи на входно-изходните ..
Работа с текст: 1) трябва да се изработи DC и с header към него да се подаде извеждащата функция. Задават се цветове, шрифтове, област на извеждане, координати. Те се съпоставят на реалните координати с режим mapping mode. Преди да се направи (hDC), който след това се освобождава.
Case WM_PAINT:
HDC=BeginPaint(head, &ps);
..
EndPaint(..) освобождава header-a
Break;
Typedef struct tagPAINTSTRUCT стандартно дефииранена структура
{
} PAINTSTRUCT;
-
поле за DC; 2) правоъгълна област, вкоято ще извежда полето. Начини за получаване на DC: 1) GetDC(); 2) ReleaseDC(.).
Скролиране когато информацията не може да се побере в рамките на клиентския прозорец. Това може да стане и при преместване на прозореца или свиване. Нужна е информацията за текущите размери на потребителкската област при обработка на съобщениетоWM_SIZE. То се поражда при всички случаи в които има промяна в размерите на прозореца. Използват се параметъра lParam.
Case WM_SIZE:
cxClient=LOWORD(lParam); -младша част
cyClient=HIWORD(lParam); - старша част
Трябва да се постави scroll bar като не енеобходимо той да се описва изцяло. Това става като: 1) предизвикване появата му; 2) Windows поема управлението му управление на мишката; - ефектите по придвижване на маркера; - изпращане на съобщение към Proc функцията, които са свързани със събитията на scroll bar-а (къде е натиснала мишката над или под показалеца, и др.) Събитията се вземат от WM_SCROLL чрез параметър wParam(носи информация в коя област е натисната мишката). 3) трабва да се направи начална инициализация (позициониране на показалеца, установява се мащаба на показалеца зависи от дискретите на преместване). Има функции, които извършват скролирането scrollwindow. Като параметър се подава headerкъм прозореца, дали се скролира хоризонтално или вертикално или и в двете посоки, дали се скролира целия прозорец или само правоъгълната част от него.
Клавиатура съобщенията от клавиатурата се поставят в опашка и се подават само на фокусирания прозорец. Има няколко основни съобщения: WM_KEYDOWN; WM_SYSDOWN; WM_KEYUP; WM_SYSUP. Информацията се извлича от съпътващите параметри lParam и wParam. За да се направи функционална зависимост между мишка и клавиатура се използва SendMessage (hWnd, message, wParam, lParam). Възможно е освен обработка на виртуалните клавиши (case VK_HOME) да се обработват ASCII кодове (case b)
23. Входно/изходен интерфейс:.
Мишка изпраща съобщеия не само към фокусирания прозорец, а към всеки през когото мине. Съобщенията са сързани с движение на показалеца и натискане на бутоните. Параметрите дават информация за координатите и за времето на натискане. Таймер използва се за: 1) отчитане на врме; 2) програми, които през приблизително еднакви интервали провеждат измервания; 3) при многозадачна работа да се попречи на една програма да притежава ресурсите за произволно дълго време; 4) при периодично съхранение (autosave); 5) при анимации фиксира стъпките. Задава се име на таймера и времетраене. Когато достигне стойността, която сме задали, генерира съобщение WM_TIMER. CALL BACK функции: В едно Windows приложение може да има повече от една Proc функция. Тези функции се викат от CALL BACK функциите. Трябва да създадем втора Proc функция. Тази функция се вика от средата, а не от нашата програма. В .def се добавя EXPORT WinProc <</SPAN>име на 2-та функция>. Трябва да свържем втората функция със съобщение. Вместо NULLсе поставя адреса на втората функция. За да можем да поставим адрес (името не е адрес) и да го свържем с съответните данни таблици и променливи, трябва да напишем: FAR PASCAL lpfn <име> - далечен указател. Lpfn <</SPAN>име> {съдържа адреса}: MakeProcInstance (hwnd,hInstance); Дъщерни контроли множество прозорци, обединени в един. Те се унищожават заедно с прозореца родител. Нямат собствени съобщения, а използват тези на родителя. 1) Бутони като за отделен клас Cbutton; 2) Edit контрол клас Cedit поема всички редакторски действия по въвеждане на низ; 3) listbox клас ClistBox; 4) ScrollBars клас CscrollBar; 5) прогрес контрол (при инсталация на продукти); 6) Combobox I ComboBoxExtended (може да избира предварително въведени стойности) 7) date and time; 8)Calendar Прихващане на функции: да се промени действието на някоя стандартна функция: 1) да се намери адреса й; 2) да се замести адреса с адреса на заместващата функция. 3) да се изработи адреса на заместващата функция 4) да се съьрани адреса на API функцията; 5) да се подаде изработения адрес;
25. Управление на паметта..
Допълнение при чисто многозадачна среда NT. Тук се използва възможността на големите Intel процесоди за управление на виртуалната памет и собствено адресно пространство. Всички процесори използват адресно пространство от 4GB(виртуално) или 232(в protected mode). 2GB за потребител + 2 GB за Kernel. Отказвме се от силната сегментация, т.е. работим с линейно адресно пространство (с пълен адрес, а не с отместване). От всичко това системата работи по-стабилно, не забива, защото всеки процес може да повреди само собственото си адресно пространство. Освен това има времеделене, което пречи на един процес да стнане монополист на ресурсите. За един процес е възможно да се поддържат 1 млрд стр. За стр. -> 2 вида: 1) всяко обръщение към код/данни предизвиква генериране на прекъсване. 2) заделяне на памет блоковете памет са shared (общи за процесите) или protected. Заделянето на памет става на две стъпки за всяка има функции: 1) резервиране указване на VirtMemManager, че ни трябва такава памет; 2) реално заделяне (commit) pMem VirtualAlloc() функция. Резервиране на по-големи блокове: 1) commit на по-малко, за да е по-ефективно; 2) guarded page има възможност, когато се commit-ва блокове памет от 2 стр., горната я наричаме Guarded. Когато реално се ползва, до тази пзмет се генерира exception, което е свързано с достъп до охранителната страница и това събитие (което се генерира от NT към програмта) се прихваща от програмата и се взема решение: 1) да се изиска още, за да се запълни стойността; 2) да се заемат още няколко стр. И да се качи guarded page по-горе. Shared blokowe общи за всички процеси, т.е. те са в адресното пространство на повече от един процес. Сегмента попада в дескрипторната таблица на повече от 1 процес, но адресите са различни. Има механизъм Copy overwrite, свързан с общите блокове. Ако единия процес опита да актуализира блок, NT структурира копие във физическата памет на блока, вкойто процес иска да прави промени и насочва промените към копието. Когато реално се записва в паметта, се копира (асоцира) в shared (отлагане на записа).
Тагове от реферата: асембери, руктура, предвид, програмиране, МЕТОДИКА











