Контакти

Структура програми на асемблері. Основні відомості про мову Асемблер. З дисципліни «Системне програмування Структура команди на мові асемблера містить

1. Архітектура ПК ..................................................................... 5

    1.1. Регістри.

    1.1.1 Регістри загального призначення.

1.1.2. сегментні регістри

1.1.3 Регістр прапорів

1.2. Організація пам'яті.

1.3. Подання даних.

1.3.1 Типи даних

1.3.2 Представлення символів і рядків

2. Оператори програми на асемблері ..........................................

    1. Команди мови асемблера

2.2. Режими адресації і формати машинних команд

3. псевдооператор ...................................................................

3.1 Директиви визначення даних

3.2 Структура програми на асемблері

3.2.1 Програмні сегменти. Директива assume

3.2.3 Спрощена директива сегментації

4. Ассемблирование і компоновка програми ...............................

5. Команди пересилання даних ....................................................

    5.1 Команди загального призначення

    5.2 Команди роботи зі стеком

5.3 Команди вводу-виводу

5.4 Команди пересилання адреси

5.5 Команди пересилання прапорів

6. Арифметичні команди .......................................................

    6.1 Арифметичні операції над цілими двійковими числами

6.1.1 Додавання і віднімання

6.1.2 Команди збільшення і зменшення приймача на одиницю

6.2 Множення і ділення

6.3 Зміна знака

7. Логічні операції ..........................................................

8. Зрушення і циклічні зрушення ................................................

9. Строкові операції .............................................................

10. Логіка і організація програм .............................................

10.1 Безумовні переходи

10.2 Умовні переходи

10.4 Процедури в мові асемблера

10.5 Переривання INT

10.6 Системне програмне забезпечення

10.6.1.1 Читання клавіатури.

10.6.1.2 Висновок символів на екран

10.6.1.3 Завершення програм.

10.6.2.1 Вибір режимів дисплея

11. Дискова пам'ять ..................................................................... ..

11.2 Таблиця розподілу файлів

11.3 Операції введення-виведення на диск

11.3.1 Запис файлу на диск

11.3.1.1 Дані в форматі ASCIIZ

11.3.1.2 Файловий номер

11.3.1.3 Створення дискового файлу

11.3.2 Читання дискового файлу

Вступ

Мова асемблера - це символічне уявлення машинного мови. Всі процеси в персональному комп'ютері (ПК) на найнижчому, апаратному рівні приводяться в дію тільки командами (інструкціями) машинної мови. По-справжньому вирішити проблеми, пов'язані з апаратурою (або навіть, більш того, залежні від апаратури як, наприклад, підвищення швидкодії програми), неможливо без знання асемблера.

Асемблер є зручну форму команд безпосередньо для компонент ПК і вимагає знання властивостей і можливостей інтегральної мікросхеми, що містить ці компоненти, а саме мікропроцесора ПК. Таким чином, мова асемблера безпосередньо пов'язаний з внутрішньою організацією ПК. І не випадково практично всі компілятори мов високого рівня підтримують вихід на асемблерний рівень програмування.

Елементом підготовки програміста-професіонала обов'язково є вивчення асемблера. Це пов'язано з тим, що програмування на асемблері вимагає знання архітектури ПК, що дозволяє створювати більш ефективні програми на інших мовах і об'єднувати їх з програмами на асемблері.

У посібнику розглядаються питання програмування мовою асемблера для комп'ютерів на базі мікропрцессоров фірми Intel.

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

    Архітектура ПК.

Архітектура ЕОМ - це абстрактне уявлення ЕОМ, яке відображає її структурну, схемотехнічних і логічну організацію.

Всі сучасні ЕОМ мають деякими загальними і індивідуальними властивостями архітектури. Індивідуальні властивості притаманні тільки конкретної моделі комп'ютера.

Поняття архітектури ЕОМ включає в себе:

    структурну схему ЕОМ;

    засоби і способи доступу до елементів структурної схеми ЕОМ;

    набір і доступність регістрів;

    організацію і способи адресації;

    спосіб представлення і формат даних ЕОМ;

    набір машинних команд ЕОМ;

    формати машинних команд;

    обробка переривань.

Основні елементи апаратних засобів комп'ютера: системний блок, клавіатура, пристрій відображення, дисководи, які друкують пристрої (принтер) і різні засоби зв'язку. Системний блок складається з системної плати, блоку живлення і осередків розширення для додаткових плат. На системній платі розміщені мікропроцесор, постійна пам'ять (ROM), оперативна пам'ять (RAM) і співпроцесор.

      Регістри.

Усередині мікропроцесора інформація міститься в групі з 32 регістрів (16 призначених для користувача, 16 системних), в тій чи іншій мірі доступних для використання програмістом. Так як посібник присвячено програмування для мікропроцесор 8088-i486, то найлогічніше розпочати цю тему з обговорення внутрішніх регістрів мікропроцесора, доступних для користувача.

Призначені для користувача регістри використовуються програмістом для написання програм. До цих регістрів належать:

    вісім 32-бітових регістрів (регістри загального призначення) EAX / AX / AH / AL, EBX / BX / BH / BL, ECX / CX / CH / CL, EDX / DX / DLH / DL, EBP / BP, ESI / SI, EDI / DI, ESP / SP;

    шість 16 -, бітових регістрів сегментів: CS, DS, SS, ES, FS, GS;

    регістри стану і управління: регістр прапорів EFLAGS / FLAGS, і регістр покажчика команди EIP / IP.

Через похилу риску наведені частини одного 32-розрядного регістра. Приставка E (Extended) позначає використання 32-разраядного регістра. Для роботи з байтами використовуються регістри з приставками L (low) і H (high), наприклад, AL, CH - позначають молодший і старший байти 16-розрядних частин регістрів.

        Регістри загального призначення.

EAX / AX / AH / AL (Accumulator register) - акумулятор. Використовуються при множенні і діленні, в операціях введення-виведення і в деяких операціях над рядками.

EBX / BX / BH / BL - базовий регістр (Base register), часто використовується при адресації даних в пам'яті.

ECX / CX / CH / CL - лічильник (Count register), використовується як лічильник числа повторень циклу.

EDX / DX / DH / DL - регістр даних (Data register), використовується для зберігання проміжних даних. У деяких командах використання його обов'язково.

Всі регістри цієї групи дозволяють звертатися до своїх «молодшим» частинам. Використання для самостійної адресації можна лише молодші 16- і 8-бітові частини цих регістрів. Старші 16 біт цих регістрів як самостійні об'єкти недоступні.

Для підтримки команд обробки рядків, що дозволяють виробляти послідовну обробку ланцюжків елементів мають довжину 32, 16 або 8 біт використовуються:

ESI / SI (source index register) - індекс джерела. Містить адреса поточного елемента джерела.

EDI / DI (distination index register) - індекс приймача (Одержувача). Містить поточну адресу в рядку приймачі.

В архітектурі мікропрцессора на програмно-апаратному рівні підтримується структура даних - стек. Для роботи зі стеком є \u200b\u200bспеціальні команди і спеціальні регістри. Слід зазначити, що стек заповнюється в сторону менших адрес.

ESP / SP (stack poINTer register) - регістр покажчика стека. Містить покажчик вершини стека в поточному сегменті стека.

EBP / BP (base poINTer register) - регістр покажчика бази стека. Призначений для організації довільного доступу до даних усередині стека.

1.1.2. сегментні регістри

У програмній моделі мікропроцесора є шість сегментних регістрів: CS, SS, DS, ES, GS, FS. Їх існування обумовлене специфікою організації та використання оперативної пам'яті мікропроцесорами Intel. Мікропроцесор апаратно підтримує структурну організацію програми складається з сегментів. Для вказівки сегментів доступних в даний момент призначені сегментні регістри. Мікропроцесор підтримує наступні типи сегментів:

    Сегмент коду.Містить команди програми Для доступу до цього сегменту служить регістр CS (code segment register) - сегментний регістр коду. Він містить адресу сегмента з машинними командами, до якого має доступ мікропроцесор.

    Сегмент даних. Містить оброблювані програмою дані. Для доступу до цього сегменту служить регістр DS (data segment register) - сегментний регістр даних, Який зберігає адресу сегмента даних поточної програми.

    Сегмент стека. Цей сегмент являє собою область пам'яті, звану стеком. Мікропроцесор організує стек за принципом - перший «прийшов», перший «пішов». Для доступу до стека служить регістр SS (stack segment register) - сегментний регістр стека, Що містить адресу сегмента стека.

    Додатковий сегмент даних. Оброблювані дані можуть знаходитися ще в трьох додаткових сегментах даних. За умовчанням передбачається, що дані знаходяться в сегменті даних. При використанні додаткових сегментів даних їх адреси потрібно вказати явно за допомогою спеціальних префіксів перевизначення сегментів в команді. Адреси додаткових сегментів даних повинні міститися в регістрах ES, GS, FS (extenSIon data segment registers).

        Регістри управління і стану

Мікропроцесор містить кілька регістрів, які містять інформацію про стан, як самого мікропроцесора, так і програми, команди якої в даний момент завантажені в конвеєр. це:

Регістр покажчика команд EIP / IP;

    регістр прапорів EFLAGS / FLAGS.

Використовуючи ці регістри, можна отримувати інформацію про результати виконання команд і впливати на стан самого мікропроцесора.

EIP / IP (instruction poINTer register) - покажчик команд. Регістр EIP / IP має розрядність 32 або 16 біт і містить зсув наступної виконуваної команди щодо вмісту сегментного регістра CS в поточному сегменті команд. Цей регістр безпосередньо недоступний, але зміна його виробляється командами переходу.

EFLAGS / FLAGS (Flag register) - регістр прапорів. Розрядність 32/16 біт. Окремі біти даного регістра мають певне функціональне призначення і називаються прапорами. Прапор - це біт, що приймає значення 1 ( "прапор встановлений"), якщо виконано деякий умова, і значення 0 ( "прапор скинутий") в іншому випадку. Молодша частина цього регістра повністю аналогічна регістру FLAGS для i8086.

1.1.3 Регістр прапорів

Регістр прапорів є 32-розрядним, має ім'я EFLAGS (рис.1). Окремі біти регістра мають певне функціональне призначення і називаються прапорами. Кожному з них присвоєно певне ім'я (ZF, CF і т.д). Молодші 16 біт EFLAGS представляють 16-розрядний регістр прапорів FLAGS, будуть застосовані до запланованого програм, написаних для мікропроцесора i086 і i286.

Рис.1 Регістр прапорів

Деякі прапори прийнято називати прапорами умов; вони автоматично змінюються при виконанні команд і фіксують ті чи інші властивості їх результату (наприклад, дорівнює він нулю). Інші прапори називаються прапорами станів; вони змінюються з програми і впливають на подальшу поведінку процесора (наприклад, блокують переривання).

Прапори умов:

CF (carry flag) - прапор переносу. Приймає значення 1, якщо при додаванні цілих чисел з'явилася одиниця переносу, не «влазити" в розрядну сітку, або якщо при відніманні чисел без знака перше з них було менше другого. У командах зрушення в CF заноситься біт, що вийшов за розрядну сітку. CF фіксує також особливості команди множення.

OF (overflow flag) - прапор переповнення. Встановлюється в 1, якщо при додаванні або вирахуванні цілих чисел зі знаком вийшов результат, по модулю перевершує допустиму величину (сталося переповнення мантиси і вона "залізла" в знаковий розряд).

ZF (zero flag) - прапор нуля. Встановлюється в 1, якщо результат команди виявився рівним 0.

SF (SIgn flag) - прапор знака. Встановлюється в 1, якщо в операції над знаковими числами вийшов негативний результат.

PF (parity flag) - прапор парності. Дорівнює 1, якщо результат чергової команди містить парна кількість двійкових одиниць. Враховується звичайно тільки при операціях вводу-виводу.

AF (auxiliary carry flag) - прапор додаткового перенесення. Фіксує особливості виконання операцій над двійковій-десятковими числами.

Прапори станів:

DF (direction flag) - прапор напрямки. Встановлює напрямок перегляду рядків у строкових командах: при DF \u003d 0 рядки проглядаються "вперед" (від початку до кінця), при DF \u003d 1 - в зворотному напрямку.

IOPL (input / output privilege level) - рівень привілеїв введення-виведення.Використовується в захищеному режимі роботи мікропроцесора, для контролю доступу до команд вводу-виводу, в залежності від привілейованості задачі.

NT (nested task) - прапор вкладеності завдання.Використовується в захищеному режимі роботи мікропроцесора для фіксації того факту, що одна задача вкладена в іншу.

Системні прапор:

IF (INTerrupt flag) - прапор переривань. При IF \u003d 0 процесор перестає реагувати на вступники щодо нього переривання, при IF \u003d 1 блокування переривань знімається.

TF (trap flag) - прапор трасування. При TF \u003d 1 після виконання кожної команди процесор робить переривання (з номером 1), чим можна скористатися при налагодженні програми для її трасування.

RF (resume flag) - прапор відновлення. Використовується при обробці переривань від регістрів налагодження.

VM (virtuAL 8086 mode) - прапор віртуального 8086. 1-процесор працює в режимі віртуального 8086. 0- процесор працює в реальному або захищеному режимі.

AC (ALignment check) - прапор контролю вирівнювання. Призначений для дозволу контролю вирівнювання при зверненні до пам'яті.

      Організація пам'яті.

Фізична пам'ять, до якої мікропроцесор має доступ, називається оперативною пам'яттю (або оперативним запам'ятовуючим пристроєм - ОЗУ). ОЗУ є ланцюжком байтів, що мають свою унікальну адресу (його номер), званий фізичним. Діапазон значень фізичних адрес від 0 до 4 Гбайт. Механізм управління пам'яттю повністю апаратний.

Мікропроцесор апаратно підтримує кілька моделей використання оперативної пам'яті:

    сегментированную модель. У цій моделі пам'ять для програм ділиться на безперервні області пам'яті (сегменти), а сама програма може звертатися тільки до даних, які знаходяться в цих сегментах;

    сторінкову модель. В цьому випадку оперативна пам'ять розглядається як сукупність блоків фіксованого розміру 4 Кбайта. Основне застосування цієї моделі пов'язане з організацією віртуальної пам'яті, що дозволяє використовувати для роботи програм простір пам'яті більше, ніж обсяг фізичної пам'яті. Для мікропроцесора Pentium розмір можливої \u200b\u200bвіртуальної пам'яті може досягати 4 Тбайта.

Використання і реалізація цих моделей залежить від режиму роботи мікропроцесора:

    Режим реальних адрес (реальний режим). Режим аналогічний роботі i8086 процесора. Необхідний для функціонування програм, розроблених для ранніх моделей процесорів.

    Захищений режим. У захищеному режимі з'являється можливість багатозадачного обробки інформації, захисту пам'яті за допомогою четирехуровнего механізму привілеїв і її сторінкової організації.

    Режим віртуального 8086. У цьому режимі з'являється можливість роботи декількох програм для i8086. При цьому можлива робота програм реального режиму.

Сегментація - механізм адресації, що забезпечує існування декількох незалежних адресних просторів. Сегмент являє собою незалежний, підтримуваний на апаратному рівні блок пам'яті.

Кожна програма в загальному випадку може складатися з будь-якої кількості сегментів, але безпосередній доступ вона має до трьох основних: коду, даних і стека - і від одного до трьох додаткових сегментів даних. Операційна система розміщує сегменти програми в оперативній пам'яті по певним фізичним адресами, після чого поміщає значення цих адрес у відповідні регістри. Всередині сегмента програма звертається до адресами щодо початку сегмента лінійно, тобто починаючи з адреси 0 і закінчуючи адресою, рівним розміру сегмента. Відносний адресу або зміщення,який мікропроцесор використовує для доступу до даних усередині сегмента, називається ефективним.

Формування фізичної адреси в реальному режимі

У реальному режимі діапазон зміни фізичної адреси від 0 до 1 Мбайт. Максимальний розмір сегмента 64 Кбайт. При зверненні до конкретного фізичній адресою оперативної пам'яті визначається адреса початку сегмента і зміщення всередині сегменту. Адреса початку сегмента береться з відповідного сегментного регістра. При цьому в сегментному регістрі містяться тільки старші 16 біт фізичної адреси початку сегменту. Відсутні молодші чотири біта 20-бітного адреси виходять зрушенням значення сегментного регістра вліво на 4 розряди. Операція зсуву виконується апаратно. Отримане 20-бітове значення і є справжнім фізичною адресою, відповідним початку сегмента. Тобто фізична адреса задається як пара "сегмент: зсув", де "сегмент" (segment) - це первие16 бітів початкового адресасегмента пам'яті, якому прінадлежітячейка, а "зсув" - 16-бітову адресу цього осередку, відрахований від початку даного сегмента пам'яті (величина 16 * сегмент + зсув дає абсолютний адреса осередку). Якщо, наприклад, в регістрі CS зберігається величина 1234h, тоді адресна пара 1234h: 507h визначає абсолютний адреса, рівний 16 * 1234h + 507h \u003d 12340h + 507h \u003d 12847h. Така пара записується у вигляді подвійного слова, причому (як і для чисел) в "перевернутому" вигляді: в першому слові розміщується зміщення, а по-друге - сегмент, причому кожне з цих словв свою чергу представлено в "перевернутому" вигляді. Наприклад, пара 1234h: 5678h буде записана так: | 78 | 56 | 34 | 12 |.

Даний механізм утворення фізичної адреси дозволяє зробити програмне забезпечення, що переміщується, тобто не залежних від конкретних адрес завантаження його в оперативній пам'яті.

За призначенням можна виділити команди (в дужках наводяться приклади мнемонічних кодів операцій команд асемблера ПК типу IBM PC):

l виконання арифметичних операцій (ADD і ADC - складання та складання з перенесенням, SUB і SBB - віднімання і віднімання з позичкою, MUL і IMUL - множення без знака і зі знаком, DIV і IDIV - ділення без знака і зі знаком, CMP - порівняння і т.д.);

l виконання логічних операцій (OR, AND, NOT, XOR, TEST і т. д.);

l пересилання даних (MOV - переслати, XCHG - обміняти, IN - ввести в мікропроцесор, OUT - вивести з мікропроцесора і т. д.);

l передачі управління (розгалуження програми: JMP - безумовного переходу, CALL - виклику процедури, RET - повернення з процедури, J * - умовного переходу, LOOP - управління циклом і т. д.);

l обробки рядків символів (MOVS - пересилання, CMPS - порівняння, LODS - завантаження, SCAS - сканування. Ці команди зазвичай використовуються з префіксом (модифікатором повторення) REP;

l переривання роботи програми (INT - програмні переривання, INTO - умовного переривання при переповненні, IRET - повернення з переривання);

l управління мікропроцесором (ST * і CL * - установки і скидання прапорів, HLT - зупинки, WAIT - очікування, NOP - холостого ходу і т. д.).

З повним списком команд асемблера можна познайомитися в роботах.

Команди пересилання даних

l MOV dst, src - пересилання даних (move - переслати з src в dst).

Пересилає: один байт (якщо src і dst мають формат байта) або одне слово (якщо src і dst мають формат слова) між регістрами або між регістром і пам'яттю, а також заносить безпосереднє значення в регістр або в пам'ять.

Операнди dst і src повинні мати однаковий формат - байт або слово.

Src можуть мати тип: r (register) - регістр, m (memory) - пам'ять, i (impedance) - безпосереднє значення. Dst можуть бути типу r, m. Не можна в одній команді використовувати операнди: rsegm спільно з i; два операнда типу m і два операнда типу rsegm). Операнд i може бути і простим виразом:

mov AX, (152 + 101B) / 15

Обчислення виразу виконується тільки при трансляції. Прапори не змінює.

l PUSH src - занесення слова в стек (push - проштовхнути; записати в стек ізsrc). Поміщає в вершину стека вміст src - будь-якого 16-бітового регістра (в тому числі і сегментного) або двох елементів пам'яті, що містять 16-бітове слово. Прапори не міняються;

l POP dst - витяг слова з стека (pop - виштовхнути; вважати з стека в dst). Знімає слово з вершини стека і поміщає його в dst - будь-який 16-бітовий регістр (в тому числі і сегментний) або в два відділення пам'яті. Прапори не міняються.

Тема 2.5 Основи програмування процесора

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

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

Мова асемблер - це мова, в якому кожен вислів відповідає рівно однієї машинної команді.

асемблюванні називається перетворення програми з мови асемблера, т. е. підготовка програми на машинній мові шляхом заміни символічних імен операцій на машинні коди, а символічних адрес - на абсолютні або відносні номера, а також включення бібліотечних програм і генерація послідовностей символічних команд шляхом зазначення конкретних параметрів в мікрокоманда. Дана програма зазвичай розміщується в ПЗУ або вводиться в ОЗУ з деякого зовнішнього носія.

Мова асемблер має кілька особливостей, що відрізняють його від мов високого рівня:

1. Це взаємно однозначна відповідність між висловлюваннями мови асемблера і машинними командами.

2. Програміст на мові асемблера має доступ до всіх об'єктів і командам, присутнім на цільовій машині.

Подання про основи програмування на машинно-орієнтованих мовах корисно для:



Кращого розуміння архітектури ПК і більш грамотного використання комп'ютерів;

Для розробки більш раціональних структур алгоритмів програм вирішення прикладних завдань;

Можливості перегляду і коригування виконуваних програм з расшіреніем.exe і.com, компілювати з будь-яких мов високого рівня, в разі втрати вихідних програм (викликавши зазначені програми в відладчик програми DEBUG і декомпілювати їх відображення на мові асемблера);

Складання програм рішення найбільш відповідальних завдань (програма, складена на машинно-орієнтованої мови, зазвичай ефективніше - коротше і швидше відсотків на 30-60 програм, отриманих в результаті трансляції з мов високого рівня)

Для реалізації процедур, що включаються в основну програму у вигляді окремих фрагментів в тому випадку, якщо вони не можуть бути реалізовані ні на використовувану мову високого рівня, ні з використанням службових процедур ОС.

Програма на мові асемблера може працювати тільки на ЕОМ одного сімейства, а програма, написана на мові високого рівня, потенційно може працювати на різних машинах.

Алфавіт мови асемблера складають символи ASCII.

Числа тільки цілі. розрізняють:

Двійкові числа, закінчуються буквою В;

Десяткові числа, закінчуються буквою D;

Шістнадцятиричні числа, закінчуються буквою Н.

Оперативна пам'ять, регістри, представлення даних

Для певної серії МП використовується індивідуальний мову складання програм - мова асемблер.

Мова асемблер займає проміжне положення між машинними кодами і мовами високого рівня. Програмувати на цій мові простіше. Програма на мові асемблер більш раціонально використовує можливості конкретної машини (точніше МП), ніж програма на мові високого рівня (який більш простий для програміста, ніж асемблер). Основні принципи програмування на машинно-орієнтованих мовах розглянемо на прикладі мови асемблер для МП КР580ВМ80. Для програмування на мові використовується загальна методика. Конкретні ж технічні прийоми запису програм пов'язані з особливостями архітектури та системи команд цільового МП.

Програмна модель мікропроцесорної системи на основі МП КР580ВМ80

Програмна модель МПС відповідно до малюнком 1

МП Порти Пам'ять

S Z AC P C

Малюнок 1

З точки зору програміста МП КР580ВМ80 має наступні програмно-доступні регістри.

А- 8-бітовий регістр акумулятор. Є головним регістром МП. Будь-яка операція, яка виконується в АЛП, передбачає розміщення одного з операндів, що підлягають обробці, в акумуляторі. Результат операції в АЛП теж зазвичай зберігається в А.

B, C, D, E, H, L - 8-бітові регістри загального призначення (РОН). Внутрішня пам'ять МП. Призначені для зберігання оброблюваної інформації, а також результатів операції. При обробці 16-розрядних слів з регістрів утворюють пари BC, DE, HL, причому здвоєний регістр називається першою літерою - B, D, H. В реєстрової парі старшим є перший регістр. Особливою властивістю володіють регістри H, L, використовувані як для зберігання даних, так і для зберігання 16-розрядних адрес осередків ОЗУ.

FL- регістр прапорів (реєстр ознак) 8-бітовий регістр, в якому зберігаються п'ять ознак результату виконання арифметичних і логічних операцій в МП. Формат FL відповідно до малюнком

Розряд С (CY - carry) - перенесення, встановлюється в 1, якщо був перенесення з старшого розряду байта при виконанні арифметичних операцій.

Розряд Р (parity) - парність, встановлюється в 1, якщо число одиниць в розрядах результату парне.

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

Розряд Z (нуль) - встановлюється в 1, якщо результат операції дорівнює 0.

Розряд S (знак) - встановлюється в 1, якщо результат негативний, і в 0, якщо результат позитивний.

SP- покажчик стека, 16-розрядний регістр, призначений для зберігання адреси осередки пам'яті, куди був записаний останній введений в стек байт.

РС - програмний лічильник (лічильник команд), 16-розрядний регістр, призначений для зберігання адреси наступної виконуваної команди. Вміст лічильника команд автоматично збільшується на 1 відразу ж після вибірки чергового байта команди.

У початковій області пам'яті адреси 0000Н - 07FF розташовується керуюча програма та демонстраційні програми. Це область ПЗУ.

0800 - 0АFF - область адрес для запису досліджуваних програм. (ОЗУ).

0В00 - 0ВВ0 - область адрес для запису даних. (ОЗУ).

0ВВ0 - початкова адреса стека. (ОЗУ).

Стек - спеціально організована область ОЗУ, призначена для тимчасового зберігання даних або адрес. Число, записане в стек останнім, витягується з нього першим. Покажчик стека зберігає адресу останньої клітинки стека, в якій записана інформація. При виклику підпрограми в стеці автоматично зберігається адреса повернення в основну програму. Як правило, на початку кожної підпрограми зберігаються в стеці вміст всіх задіяних при її виконанні регістрів, а в кінці підпрограми відновлюють їх з стека.

Формат даних і структура команд мови асемблер

Пам'ять МП КР580ВМ80 являє собою масив 8-ьітних слів, званих байтами, Кожен байт має свій 16-розрядний адреса, що визначає його положення в послідовності осередків пам'яті. МП може адресувати 65536 байт пам'яті, яка може містити як в ПЗУ, так і в ОЗУ.

формат даних

Дані зберігаються в пам'яті у вигляді 8-бітних слів:

D7 D6 D5 D4 D3 D2 D1 D0

Молодшим бітом є біт 0, старшим - біт 7.

Команда характеризується форматом, т. Е. Числом відведених для неї розрядів, які розділені побайтно на певні функціональні поля.

формат команд

Команди МП КР580ВМ80 мають одне, двох або трехбайтний формат. Багатобайтові команди повинні бути розміщені в сусідніх ЯП. Формат команди залежить від особливостей виконуваної операції.

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

Він визначає формат команди і ті дії, які повинні бути виконані МП над даними в процесі її виконання, і спосіб адресації, а також може містити інформацію про знаходження даних.

У другому і третьому байтах можуть перебувати дані, над якими проводяться операції, або адреси, що вказують місцезнаходження даних. Дані, над якими виробляються дії, називаються операндами.

Формат однобайтового команди відповідно до малюнком 2

малюнок 4

У командах на мові асемблера код операції має скорочену форму запису англійських слів - мнемонічне позначення. Мнемоніка (від грецького mnemonic - мистецтво запам'ятовування) дозволяє легше запам'ятати команди по їх функціональному призначенню.

Перед виконанням вихідна програма перекладається за допомогою програми трансляції, званої ассемблером, на мову кодових комбінацій - машинний мову, в такому вигляді розміщується в пам'яті МП і далі використовується при виконанні команди.


методи адресації

Всі коди операндів (вхідні та вихідні) повинні десь розташовуватися. Вони можуть перебувати у внутрішніх регістрах МП (найбільш зручний і швидкий варіант). Вони можуть розташовуватися в системній пам'яті (найпоширеніший варіант). Нарешті, вони можуть перебувати в пристроях введення-виведення (найбільш рідкісний випадок). Визначення місця положення операндів проводиться кодом команди. Існують різні методи, за допомогою яких код команди може визначити, звідки брати вхідний операнд і куди поміщати вихідний операнд. Ці методи називаються методами адресації.

Для МП КР580ВМ80 існують такі методи адресації:

безпосередня;

реєстрова;

непряма;

Стекова.

безпосередня адресація передбачає, що операнд (вхідний) знаходиться в пам'яті безпосередньо за кодом команди. Операнд зазвичай являє собою константу, яку треба кудись переслати, до чогось додати і т. Д. Дані містяться в другому або в другому і третьому байтах команди, причому молодший байт даних знаходиться в другому байті команди, а старший - в третьому байті команди.

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

реєстрова адресація передбачає, що операнд (вхідний або вихідний) знаходиться у внутрішньому регістрі МП. Використовується в однобайтових командах

непряма (Неявна) адресація передбачає, що у внутрішньому регістрі МП знаходиться не сам операнд, а його адреса в пам'яті.

стекова адресація передбачає, що команда не містить адресу. Адресація до осередків пам'яті по вмісту 16-розрядного регістра SP (покажчика стека).

система команд

Система команд МП - це повний перелік елементарних дій, які здатний виробляти МП. Керований цими командами МП виконує прості дії, такі як елементарні арифметичні і логічні операції, пересилання даних, порівняння двох величин і ін. Число команд МП КР580ВМ80 - 78 (з урахуванням модифікацій 244).

Розрізняють такі групи команд:

Передачі даних;

арифметичні;

Логічні;

Команди переходу;

Команди вводу-виводу, управління і роботи зі стеком.


Символи та скорочення, що застосовуються при описі команд і складанні програм

символ скорочення
ADDR 16-бітову адресу
DATA 8-бітові дані
DATA 16 16-бітові дані
PORT 8-бітову адресу УВВ (пристрої введення-виведення)
BYTE 2 Другий байт команди
BYTE 3 Третій байт команди
R, R1, R2 Один з регістрів: A, B, C, D, E, H, L
RP Одна з реєстрових пар: В - задає пару ВС; D - задає пару DE; H - задає пару HL
RH Перший регістр пари
RL Другий регістр пари
Λ логічне множення
V роз'єднання
Додавання за модулем два
М Осередок пам'яті, адреса якої задає вміст реєстрової пари HL, т. Е. М \u003d (HL)

Курсова робота

З дисципліни «Системне програмування»

Тема №4: «Рішення задач на процедури»

Варіант 2

СХІДНО-Сибірський державний університет

ТЕХНОЛОГІЙ І УПРАВЛІННЯ

____________________________________________________________________

ТЕХНОЛОГІЧНИЙ КОЛЕДЖ

ЗАВДАННЯ

на курсову роботу

дисципліна:
Тема: Рішення задач на процедури
Виконавець (і): Главінская Аріна Олександрівна
Керівник: ДамбаеваСесегма Вікторівна
Короткий зміст роботи: вивчення підпрограм на мові Асемблера,
рішення задач з використанням підпрограм
1. Теоретична частина: Основні відомості про мову Асемблер (набір
команд і т.д.), Організація підпрограм, Способи передачі впараметров
в підпрограма
2. Практична частина: Розробити дві підпрограми, одна з яких перетворює будь-яку задану букву в заголовну (в тому числі для російських букв), а інша перетворює букву в малу.
перетворює будь-яку задану букву в заголовну, а інша перетворює букву в малу.
перетворює букву в малу.
Терміни виконання проекту за графіком:
1. Теоретична частина - 30% до 7 тижня.
2. Практична частина - 70% до 11 тижня.
3. Захист - 100% до 14 тижня.
Вимоги до оформлення:
1. Розрахунково-пояснювальна записка курсового проекту повинна бути представлена \u200b\u200bв
електронної та твердої копіях.
2. Обсяг звіту повинен бути не менше 20 машинописних сторінок без урахування додатків.
3. РПЗ оформлюється за ГОСТом 7.32-91 і підписується у керівника.

Керівник роботи __________________

виконавець __________________

Дата видачі " 26 " вересня 2017 м


Вступ. 2

1.1 Основні відомості про мову Асемблер. 3

1.1.1 Набір команд. 4

1.2 Організація підпрограм в мові Асемблер. 4

1.3 Способи передачі параметрів в підпрограма. 6

1.3.1 Передача параметрів через регістри .. 6

1.3.2 Передача параметрів через стек. 7

2 ПРАКТИЧНИЙ РОЗДІЛ .. 9

2.1 Постановка завдання. 9

2.2 Опис рішення задачі. 9

2.3 Тестування програми .. 7

Висновок. 8

Список літератури .. 9


Вступ

Загальновідомо, що програмувати на Асемблері важко. Як Ви знаєте, зараз існує багато різних мов високого рівня, Які дозволяють витрачати набагато менше зусиль при написанні програм. Природно, виникає питання, коли у програміста може виникнути необхідність використовувати Асемблер при написанні програм. В даний час можна вказати дві області, в яких використання мови Асемблера виправдано, а часто і необхідно.

По-перше, це так звані машинно-залежні системні програми, зазвичай вони управляють різними пристроями комп'ютера (такі програми називаються драйверами). У цих системних програмах використовуються спеціальні машинні команди, які немає необхідності застосовувати в звичайних (або, як кажуть прикладних) Програмах. Ці команди неможливо або дуже важко поставити в мові високого рівня.

Друга область застосування Ассемблера пов'язана з оптимізацією виконання програм. Дуже часто програми-перекладачі (компілятори) з мов високого рівня дають вельми неефективну програму на машинній мові. Зазвичай це стосується програм обчислювального характеру, в яких більшу частину часу виконується дуже невеликий (близько 3-5%) ділянку програми (головний цикл). Для вирішення цієї проблеми можуть використовуватися так звані багатомовні системи програмування, які дозволяють записувати частини програми на різних мовах. Зазвичай основна частина програми записується на мові програмування високого рівня (Фортране, Паскалі, С і т.д.), а критичні за часом виконання ділянки програми - на Асемблері. Швидкість роботи всієї програми при цьому може значно збільшитися. Часто це єдиний спосіб змусити програму дати результат за прийнятний час.

Метою даної курсової роботи є отримання практичних навичок роботи програмування на мові асемблера.

Завдання роботи:

1. Вивчити основні відомості про мову Асемблер (структура і компоненти програми на Асемблері, формат команд, організація підпрограм і ін.);

2. Вивчити види бітових операцій, формат і логіку роботи логічних команд Асемблера;

3. Вирішити індивідуальну завдання на застосування підпрограм в Асемблері;

4 .. Сформулювати висновок про виконану роботу.

1 ТЕОРЕТИЧНИЙ РОЗДІЛ

Основні відомості про мову Асемблер

Assembler - мова програмування низького рівня, що представляє собою формат запису машинних команд, зручний для сприйняття людиною.

Команди мови асемблера один в один відповідають командам процесора і, фактично, є зручну символьну форму запису (мнемокод) команд і їх аргументів. Також мова асемблера забезпечує базові програмні абстракції: зв'язування частин програми і даних через мітки з символьними іменами і директиви.

Директиви асемблера дозволяють включати в програму блоки даних (описані явно або лічені з файлу); повторити певний фрагмент вказане число раз; компілювати фрагмент за умовою; задавати адресу виконання фрагмента, змінювати значення міток в процесі компіляції; використовувати макроозначення з параметрами і ін.

Гідності й недоліки

· Мінімальна кількість надлишкового коду (використання меншої кількості команд і звернень в пам'ять). Як наслідок - велика швидкість і менший розмір програми;

· Великі обсяги коду, велике число додаткових дрібних завдань;

· Погана читабельність коду, труднощі підтримки (налагодження, додавання можливостей);

· Труднощі реалізації парадигм програмування та будь-яких інших скільки-небудь складних конвенцій, складність спільної розробки;

· Меншу кількість доступних бібліотек, їх мала сумісність;

· Безпосередній доступ до апаратури: портам вводу-виводу, особливим регістрів процесора;

· Максимальна «підгонка» для потрібної платформи (використання спеціальних інструкцій, технічних особливостей «заліза»);

· Непереносимість на інші платформи (крім двійковій сумісних).

Крім інструкцій, програма може містити директиви: команди, які не переводяться безпосередньо в машинні інструкції, а керують роботою компілятора. Набір і синтаксис їх значно різняться і залежать не від апаратної платформи, а від використовуваного компілятора (породжуючи діалекти мов в межах одного сімейства архітектур). Як набору директив можна виділити:

· Визначення даних (констант і змінних);

· Управління організацією програми в пам'яті і параметрами вихідного файлу;

· Завдання режиму роботи компілятора;

· Всілякі абстракції (тобто елементи мов високого рівня) - від оформлення процедур і функцій (для спрощення реалізації парадигми процедурного програмування) до умовних конструкцій і циклів (для парадигми структурного програмування);

· Макроси.

набір команд

Типовими командами мови асемблера є:

· Команди пересилання даних (mov і ін.)

· Арифметичні команди (add, sub, imul і ін.)

· Логічні та побітові операції (or, and, xor, shr і ін.)

· Команди управління ходом виконання програми (jmp, loop, ret і ін.)

· Команди виклику переривань (іноді відносять до команд управління): int

· Команди вводу-виводу в порти (in, out)

Для мікроконтролерів і мікрокомп'ютерів характерні також команди, що виконують перевірку і перехід по умові, наприклад:

· Jne - перейти, якщо не дорівнює;

· Jge - перейти, якщо більше або равнo.



Сподобалася стаття? поділіться їй