СИСТЕМА ПРОГРАМУВАННЯ НА АСЕМБЛЕРІ

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра САПР

Інформація про роботу

Рік:
2012
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Системне програмування

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ Національний університет „Львівська політехніка” Кафедра САПР Звіт Про лабораторної роботи №3 На тему: “СИСТЕМА ПРОГРАМУВАННЯ НА АСЕМБЛЕРІ” З курсу „Системне програмування та операційні системи” МЕТА РОБОТИ Мета роботи - вивчення системи програмування на Асемблері ІВМ РС. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ Асемблер є мовою програмування низького рівня. Він забезпечує написання, відладку та виконання програм на рівні близькому до машинних команд. Основна область застосування Асемблера - написання високоефективних програм системного характеру (драйверів, динамічна відеографіка, обробка сигналів в режимі реального часу, тощо). Програмування на Асемблері базується на системі програмування, яка забезпечує перехід від початкового файлу з текстом програми до завантажуваного файлу, готового до виконання (інтерпретації мікропроцесором). Реалізація програми на Асемблері охоплює такі етапи: - написання програми на мові Асемблера, ввід та оформлення її у вигляді початкового файлу за допомогою текстового редактора (наприклад, Nогtоn Соmmander); - трансляція початкового файлу в об'єктний файл; - редагування зв'язків на основі декількох об'єктних файлів і формування завантажуваного файлу для інтерпретації мікропроцесором. Така схема забезпечує незалежне асемблювання кількох початкових файлів з подальшим їх об'єднанням на рівні об'єктних файлів в один завантажуваний. Вказаний підхід реалізує концепції модульного програмування (розробка та реалізація програм по частинах - модулях). Відповідно розглядають початковий модуль, об'єктний модуль та завантажуваний модуль. Відомі і простіші схеми асемблювання, які забезпечують, перехід, від рівня початкових файлів до завантажуваних. 2.1. Структура програми на Асемблері Програма. на Асемблері складається з модулів. Модулі складаються з сегментів. Сегменти складаються з процедур, команд та директив. Початковий програмний модуль складається з операторів. Виділяються оператори трьох типів: команди, директиви, коментар. Оператори команд визначають операції, які виконує процесор. Директиви вказують Асемблеру та Редактору зв'язків як оформляти (об'єднувати) команди та модулі в програму. Директиви також забезпечують розподіл пам'яті та визначення даних. Оператори команд складаються з символічного імені, коду операції, поля операндів та коментаря. Код операції визначає команду і відрізняє її від директиви. При написанні програми на Асемблері символічне ім’я ставиться перед кодом операції через двокрапку і називається міткою (внутрішньою). Мітка визначає адресу команди в оперативній пам'яті, що може використовуватись, наприклад, операторами переходу. Операнди (два, один, або відсутні) визначають дані над якими виконуються операції процесором. Операнди відділяються один від одного комою, а від коду команди - пропуском. Коментар відділяється від полів команди та операндів пропуском та крапкою з комою. Він не приймає участі в асемблюванні і служить лише для документування програми. Оператори директив складаються з символічного імені, коду псевдооперації, поля операндів та коментаря. Структура директиви аналогічна структурі команди. Код псевдооперації визначає зміст директиви. Операндів директиви може бути декілька і вони розділяються комами, а від коду псевдооперації відділяються пропуском. Символічне ім'я, яке стоїть на початку директиви розподілу пам'яті (директиви визначення) називається змінною. Символічне ім'я директиви відділяється від коду пропуском, а не двокрапкою, як мітка. Коментар записується через пропуск та крапку з комою. Програма складається з модулів, які можуть бути паралельно розроблені та реалізовані. Кожний модуль складається з операторів, які обробляються (транслюються) Асемблером. Для транслятора признаком кінця операторів модуля є директива - ЕND (Кінець). Крім того операнд директиви END визначає точку входу програми. Кожний модуль поділяється на окремі частини директивами сегментації, які визначають початок (SEGMENT) та кінець (ENDS) сегмента. Кожен із сегментів (типів сегментів) має певні функції і забезпечує структуризацію програм. Всі сегменти поіменовані (SSEG - стековий сегмент, CSEG - програмний сегмент, DSEG - сегмент даних, ESEG - додатковий сегмент даних). Директива ASSUME зв'язує довільні імена з сегментами відповідного типу. Типи сегментів визначають функції, що вони виконують (SS, ES та-DS - визначення даних, CS - послідовність команд, а також, директив, що групують ці команди у блоки). Програмний сегмент поділяється на частини директивами визначення процедур (по іменованих). Процедури близькі до підпрограм, але вони знаходяться, у складі початкового модуля. Основні складові програми вказані на прикладі CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,ES:ESEG,SS:SSEG START PROC FAR PUSH DS PAD: MOV BX,DSEG CALL MAIN MOV AX,4C00H INT 21H START ENDP MAIN PROC NEAR MOV AM,CATS . . . RET MAIN ENDP CSEG ENDS END START 2.2. Структура операндів Виділяють два основних типи операндів: регістровий та операнд в оперативній пам'яті. Команда може мати 0,1,2 операнди. Якщо операнд один, то він або регістровий, або в оперативній пам'яті. Якщо їх два, то один регістровий, а інший в оперативній пам'яті. Операнд в регістрі визначається ім'ям цього регістра. Операнд в оперативній пам'яті визначається вмістом регістрів, поіменованих символічними іменами, областями оперативної пам'яті та константами - це визначає спосіб адресації. 2.3. Способи адресації Безпосередня адресація: MOV DX,3451H ; (3451H - абсолютна адреса) MOV DX,OFFSET CATS ; адреса, змінної CATS відносно початку сегмента) Індексна адресація: MOV DX,[SI] ; (посередня адресація) Відносна адресація: MOV DX,[BX] ; (посередняадресація) Адресація з індексацією та базуванням: MOV [DX+SI] ; (посередня адресація) Пряма адресація: MOV DX,CATS Пряма адресація з індексацією: MOV DX,CATS[SI] Пряма адресація з базуванням: MOV DX,CATS[BX] Пряма адресація з індексацією та базуванням: MOV DX,CATS[BX+SI] Якщо операнд заданий константою (безпосередня адресація), то він обробляється, як дані (при трансляції підставляється адреса цієї константи). Якщо в операнді вказане ім'я, то це - різновидність прямої адресації. Якщо в операнді імені немає, а є регістри (індексний чи базовий) в квадратних дужках, то це - посередня, адресація, бо адреса визначається через вміст регістрів. Коли є ім’я і регістри, то це пряма адресація з базуванням та індексуванням. 2.4. Класифікація команд: Команди передачі даних MOV Приклади: MOV AH,CATS MOV AX,BX MOV AH,AL MOV AH,6 Команди порівняння CMP, TEST, умовного JE, JG, JL, JNE, та безумовного JMP переходу Приклади: JMP FAD CMP AH,01 JE C1 CMP AH,01 JNE C2 Команди виклику та повернення з процедури (підпрограми) CALL, RET Приклад: CALL PG RET 4 Команди роботи зі стеком PUSH, POP Приклад: PUSH AX POP Команди роботи зі стрічковими даними LOADSB, MOVSB Приклад: MOV SI, OFFSET CATS MOV DI, OFFSET RATS MOV CX,3 REP MOVSB Команда циклу LOOP Приклад: MOV CX,14 MOV SI,0 DAD: MOV AX,CAT[SI] . . . INC SI LOOP DAD . . . MOV CX,10 C1: PUSH CH MOV CX,20 C2: PUSH CX MOV CX,30 C3: MOV AX,B2 LOOP C3 POP CX LOOP C2 POP CX LOOP C1 Команди побітової обробки AND AX,OFFOOH ; (логічне множення) OR AX,OFFOOH ; (логічне додавання) XOR AH,OF1H TEST AX,BX ; (виконується аналогічно AND, однак операнди не міняються) Команди зсуву SHR AL,1 ; (вправо) MOV CL,3 SHL AL,CL ; (вліво) SAR AL,1 ; (арифметичний зсув вправо) ROR AL,1 ; (циклічний зсув вправо) ROR AL,1 ; (циклічний зсув вправо з переносом) Арифметичні команди ADD AX,DX ; (додавання) SUB AX,AX ; (віднімання) MUL BX ; (множення) DIV BX ; (ділення) Команди переривання INT, STI, CLI Команди вводу/виводу IN AX,DX OUT DX,AX Команди роботи з прапорцями (признаками) TEST AX,01100B Команди керування HLT,WAIT Команди завантаження сегментів LDS, LES Текст учбової підпрограми на Асемблері title date+ time frame struc savep dw ? saveret dd ? jdl dd ? jdh dd ? jcx dd ? jal dd ? jah dd ? frame ends code segment ‘code’ assume cs:code eldati proc far public eldati push bp mov bp, sp push si les si,[bp]. jah mov ah, es:[si] cmp ah, 02bh je c2 cmp ah, 02dh je c2 c1: int 21h les si, [bp]. jal mov es:[si], al mov al, 0 mov es:[si+1], al les si,[bp]. jcx mov es:[si], cx les si,[bp]. jdh mov es:[si], dh mov es:[si+1], al les si,[bp]. jdl mov es:[si], dl mov es:[si+1], al jmp c3 c2: les si,[bp]. jcx mov cx,es:[si] les si,[bp]. jdh mov dh, es:[si] les si,[bp]. jdl mov dl,es:[si] int 21h les si,[bp]. jal mov es:[si], al mov al, 0 mov es:[si+1],al c3: pop si mov sp, bp pop bp ret 20 eldati endp code ends end
Антиботан аватар за замовчуванням

30.04.2013 23:04-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!