ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Набір команд мікропроцесора.

Система команд мікропроцесора

Системою команд мікропроцесораназивається сукупність команд, які може

виконувати мікропроцесор.

Залежно від сукупності команд, які може виконувати мікропроцесор, вони поділяються

на такі види:

СІSС(Complex Instruction Set Computer) мікропроцесор із повним набором команд

(інструкцій) збільшеної довжини. Для підвищення продуктивності передбачається

збільшувати тактову частоту мікропроцесора;

RISC(Reduced Instruction Set Computer), де застосовано спрощену систему команд

однакового формату. Основними командами є команди типу регістр-регістр. Команди

поділено на поля, тому дешифрування таких команд спрощується;

MISC(Multipurpose Instruction Set Computer), де застосовано поєднання команд типу КІ8С

із мікропрограмним пристроєм пам'яті.

Всю сукупність команд мікропроцесора можна поділити на такі види:

• команди передачі даних;

• команди арифметичних операцій;

Система команд мікропроцесора

• команди логічних операцій і зсувів;

• команди передачі керування;

• ланцюжкові команди;

• команди керування мікропроцесором.

Для виконання команд мікропроцесор використовує регістри операційного пристрою, які

є доступними програмісту для програмування команд. Для зручності регістри

мікропроцесора зручно поділити на групи

Група регістрів загального призначення або регістрів даних складається з таких

двобайтних регістрів: АХ, ВХ,СХ, DХ. Особливістю цих регістрів е те, що старший (Н) і

молодший (L) байти цих регістрів можуть адресуватися окремо.

До складу групи вказівних та індексних регістрів входять двобайтні адресні регістри: SР,

ВР, SI, DI. Вони призначені зберігання двобайтних адрес.

Група сегментних регістрів складається з регістра коду команд СS, регістра даних DS.

регістра стека SS, регістра додаткових даних ЕS.

Останню групу регістрів складають регістр-вказівник команд ІР або програмний

лічильник РС, і регістр ознак.

Біти регістра ознак фіксують властивості результатів арифметичних і логічних операцій,

а також призначені для керування певними діями мікропроцесора. Бітами регістра ознак

фіксуються такі ознаки:

Система команд мікропроцесора

• АF— додатковий перенос із молодшої тетради (молодшого напівбайта) у старшу

тетраду (старший напівбайт);

• СF— перенос, який виникає під час виконання арифметичних і логічних операцій;

• ОF— переповнення, яке виникає під час виконання арифметичних операцій;

• SF— знак результату;

• РF— парність кількості одиниць, які містяться у молодшому байті результату;

• ZF— наявність нульового результату операції;

• DF— визначає напрям перегляду ланцюжкових даних;

• IF — ознака переривання;

• TF— перехід мікропроцесора в покроковий режим.

Використання АРІ-функцій.

Отже, почнемо з декількох загальних положень про програмування в Windows.

Програмування в Windows грунтується на використанні функцій API (Application Program Interface, тобто інтерфейс програмного продукту). їх кількість сягає двох тисяч. Ваша програма в значній мірі буде складатися з таких викликів. Вся взаємодія з зовнішніми пристроями та ресурсами операційної системи буде відбуватися за допомогою таких функцій.

Список функцій АРІ і їх опис найкраще брати з файлу WIN32.HLP, який поставляється, наприклад, з пакетом Borland C + +.

Головним елементом програми в середовищі Windows є вікно. Для кожного вікна визначається своя процедура обробки повідомлень .

Вікно може містити елементи управління: кнопки, списки, вікна редагування та ін Ці елементи, по суті, також є вікнами, але володіють особливими властивостями. Події, що відбуваються з цими елементами (і самим вікном), призводять до приходу повідомлень в процедуру вікна.

Операційна система Windows використовує лінійну модель пам'яті. Іншими словами, всю пам'ять можна розглядати як один сегмент. Для програміста мовою асемблер це означає, що адреса будь- якої комірки пам'яті буде визначатися вмістом одного 32-бітного регістра, наприклад ЕВХ. Операційна система Windows є багатозадачному середовищем. Кожна задача має свій адресний простір і свою чергу повідомлень. Більш того, навіть в рамках однієї програми може бути здійснена багатозадачність - будь-яка процедура може бути запущена як самостійна задача.

Структура програми, приклад простої програми для Windows.

Почнемо з того, як можна викликати функції АРІ. Звернемося до файлу допомоги та виберемо будь-яку функцію АРІ, наприклад, MessageBox:

int MessageBox (HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);

Ця функція виводить на екран вікно з повідомленням і кнопкою (або кнопками) виходу. Зміст параметрів: hWnd-дескриптор вікна, в якому буде з'являтися вікно-повідомлення, IpText - текст, який буде з'являтися в вікні, lpCaption - текст у заголовку вікна, uType - тип вікна, зокрема можна визначити кількість кнопок виходу. Тепер про типи параметрів. Всі вони в дійсності 32-бітні цілі числа: HWND - 32-bit ціле, LPCTSTR - 32-бітний покажчик на рядок, UINT - 32-bit ціле. З причин, про яку буде сказано нижче, до імені функцій нам доведеться додавати суфікс "А", крім того, при використанні MASM необхідно також в кінці імені додати @ 16. Таким чином, виклик зазначеної функції буде виглядати так: CALL MessageBoxA @ 16. А як же бути з параметрами? їх слід акуратно помістити в стек. Запам'ятайте правило: Зліва направо - знизу вгору. Отже, нехай дескриптор вікна розташований за адресою HW, строки - за адресами STR1 і STR2, а тип вікна- повідомлення - це константа. Найпростіший тип має значення 0 і називається MB ОК.

Маємо наступне:

МВ_ОК equ 0

STR1 DB ''Неправильне введення", 0 STR2 DB "Повідомлення про помилку.", 0 HW DWORD?

Push МВ_ОК PUSH OFFSET STR1

PUSH OFFSET STR2

PUSH HW

CALL MessageBoxA @ 16

Результат виконання будь-якої функції - це, як правило, ціле число, яке повертається в регістр! ЕАХ.

Аналогічним чином в Асемблері легко відтворити ті чи інші Сі-структури. Розглянемо, наприклад, структуру, яка визначає системне повідомлення:

typedef struct tagMSG (/ / MSG HWND hwnd;

UINT message;

WPARAM wParam;

LPARAM IParam;

DWORD time;

POINT pt;

) MSG;

На Асемблері ця структура буде мати вигляд:

MSGSTRUCT STRUC MSHWND DD?

MSMESSAGE DD?

MS WPARAM DD?

MSLPARAM DD?

MSTIME DD?

MSPT DD?

MSGSTRUCT ENDS

Тепер звернемося до структури всієї програми. Як я вже казав, в цьому розділі ми будемо розглядати класичну структуру програми під Windows. У такій програмі є головне вікно, а отже, і процедура головного вікна. В цілому, в коді програми можна виділити наступні секції.

Реєстрація класу вікон Створення головного вікна Цикл обробки черги повідомлень Процедура головного вікна

Звичайно, в програмі можуть бути й інші розділи, але дані розділи утворюють основний кістяк програми. Разберем ці розділи по порядку.

Реєстрація класу вікон.Реєстрація класу вікон здійснюється заї лошогою функції RegisterClassA, єдиним параметром якої є покажчик на структуру WNDCLASS, що містить

Стаорення вікна. На основі зареєстрованого класу за допомогою функції CreateWmdowExA (або CreateWindowA) можна створити екземпляр вікна.

Функція GetMessage () "відловлює" чергове повідомлення з ряду повідомлень програми та

TranslateMessage, то її компетенція стосується повідомлень WM KEYDOWN і WMJCEYUP, які транслюються в WMJTHAR і WMDE^CHAR, *а також WM~SYSKEYDOWN і WMJSYSKEYUP, перетворюються у WM_bYbLHAK і WM_SYSDEADCHAR Сенс трансляції полягає не в заміні, а в відправці додаткових повідомлень. Так наприклад, при натисненні і відпускання алфавітно-цифрової клавші у вікно спочатку прииде повідомлення WMJCEYDOWN, потім WMJCEYUP, а потім вже WM_CHAR.

Процедура головного вікна.

Ось прототип функціі вікна на мові С:

LRESULT CALLBACK WindowFunc (HWND hwnd, UINT message. WPARAM wParam, LPARAM IParam)

Звернемо увагу на представлені параметри. Ось зміст цих параметрів: hwnd - ідентифікатор вікна, Message - ідентифікатор повідомлення, wParam і IParam - параметри, уточнюючі зміст повідомлення (для кожного повідомлення можуть грати різні ролі чи не грати ніяку). Всі чотири параметри, як ви, напевно, вже здогадалися, мають тип DWORD.

А тепер розглянемо "скелет" цієї функції на мові асемблер.

WNDPROC PROC PUSH EBP

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти