Реалізації апаратних преривань
Структура програми на assembler, сегменти, дані, команди. Команди мови програмування, мінімальна одиниця тексту програми. Програма для рисування прямокутника вказаним кольором та заданого розміру, робота з файлами і каталогами. Результат роботи програми.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | украинский |
Дата добавления | 27.12.2014 |
Размер файла | 245,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Розрахунково-графічна робота
з курсу «Системне програмування»
Виконала студентка:
групи КН-25
Боровик Ангеліна
Перевірив:
Мазур В.В.
Варіант №1
Львів-2014
МЕТА РОБОТИ
Детальне ознайомлення з схемою реалізації апаратних переривань. Застосування отриманих знань, з курсу «Системне програмування», для написання программ на Ассемблері.
КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
програма мова assembler
Структура програми на assembler, сегменти, дані, команди
Приведемо основні директиви, які використовуються і програмі на мові асемблера. Тепер використовуються спрощені способи опису сегментів.
Сегменти - це частини програми (сегменти даних). Текст програми можна набирати великими або малими буквами, програма асемблера самостійно переводить текст у верхній регістр. Обов'язково у тексті програми писати коментарі. Текст який стоїть за символом “;” є коментарем, він ігнорується при асемблюванні програми. Директива яка як правило йде з початку програми dosseg описує розташування сегментів. Директива mode small - директива опису моделі пам'яті, наприклад в цьому випадку говорять, що модель пам'яті типу small, тобто є один сегмент коду і один сегмент коду і один сегмент даних. Директива .stack 100 - директива, яка задає початок сегменту стеку. В стеці зберігаються тимчасові змінні і адреси повернення з підпрограми або переривань. Як правило будь-яка програма має сегмент стеку. В даному випадку такий запис директиви .stack 100 позначає, що стек має довжину 100байтів. Точну величину стеку визначає число викликів підпрограм та системних ф-цій, стек треба збільшувати. В кінцевому підсумку розмір стеку підбирають експериментально, коли програма вже написана і відлагоджена. Директива .data - директива початку сегменту ініціалізованих даних, після цього рядка поміщають змінні значення яких відоме (ініціалізовані змінні). Директива .data ? - директива початку сегменту неініціалізованих даних. Директива .code - початок сегменту коду. Сегмент коду - це частина коду яка містить команди МП, власне це й є сама програма. В деяких випадках в цей сегмент можна поміщати не тільки команди, а й дані. Наприклад у підпрограмах обробки переривань. Директива .startup - точка початку виконання програми. З наступного після даного рядка починається виконання програми після її завантаження в пам'ять, ця директива повинн0пбути обов'язково всередині сегмента коду, але не обов'язково н0пйого початку. Директива .exit 0. - це директива закінчення програми при виконанні цього рядка управління буде передане ОС. Таких директив в програмі може бути кілька, число після директиви може приймати кілька значень, це число після закінчення програми присвоюється змінній ОС з назвою ERRORLEVEL, ця змінна використовується в командних файлах. Є спеціальні команди для роботи з цією змінною. Використовуючи різні числа можна повідомляти ОС, яка причина закінчення програми. Директиви початку і закінчення програми є по суті макровизначеними, вони визначають необхідний код який автоматично додається на початок і кінець програми. Цей код можна подивитись у файлі лістингу після асемблювання. End - директива закінчення тексту програми на мові асемблера. Рядки які розміщені після директиви end можна писати коментар в довільній формі.
Команди мови асемблера.
Мінімальна одиниця тексту програми на мові асемблера - це рядок. Асемблер проглядає програму порядкові зверху в низ, кожний рядок закінчується символом переведення рядка, його довжина в більшості випадків не може перевищувати 255 символів, однак зручно обмежувати довжину рядка широкою екрану (80 символів). При необхідності вводити в програмі довгі рядки їх можна об'єднувати, в кінець рядка при цьому потрібно включати символ \.
Рядок 1 \
Рядок 2 Рядок 1 Рядок 2.
В текст програми можна вставляти порожні рядки, які складаються тільки із розділювачів. В мові асемблера розділювачами служать символи пропуску та горизонтальна табуляція. При допомозі пустих рядків зручно розділяти логічні частини програми. Рядок може складатись тільки із коментарів, в такому випадку перший символ рядка обов'язково ;. В кожному рядку може розміщуватись або команда мікропроцесора, яка записана у мнемонічному (словом) вигляді, або директива, директиви інакше називають псевдооператорами. Команда мікропроцесора - це інструкція яку мікропроцесор буде виконувати в процесі виконання програми. Асемблер переводить рядки з мнемоніками (буквеними записами команд) у послідовності байт, які безпосередньо може виконувати процесор. Директиви служать для визначення даних, які використовуються в програмі і для управління процесом асемблювання. Рядок у програмі на мові асемблера може складатися з 4 полів:
1. Поле мітки (поле імені);
2. Поле оператора (або псевдооператора);
3. Поле операндів;
4. Поле коментарів.
Обов'язковим є тільки поле оператора або псевдо оператора, всі решту полів можуть бути відсутні. Мітка є спрощеною мнемонічною формою запису адреси команди в сегменті коду. Так саме ім'я є спрощеною формою запису вмісту деякої переважно в сегменті даних. Отже рядки в програмі записуються в такому загальному вигляді:
[< мітка >]: < команда > < операнди >; коментарі
< ім'я > <директива < операнди >; коментарі
Потрібно звернути увагу на відсутність “:” після імені. Поля в рядках мови асемблера розділяються між собою на крайній мірі одним пропуском. Розглянемо поля детальніше. Поле мітки. При визначенні в програмі мітки або імені змінної можна використовувати букви латинського алфавіту великі або малі, а також символи :? _ @ $. Максимальна к-сть символів з яких може складатись мітка або ім'я 255, але відрізняються мітки та імена по перших 32символах. Доцільно в програмі використовувати осмислені імена. Зручно і програмі для швидкого розпізнавання міток від імені починати всі мітки з букви L і записувати їх тільки великими буквами. При записі імен змінних зручно використовувати префікс, який означає тип змінної, наприклад : skp_byte. При програмуванні з використанням асемблера masm, або tasmможна використовувати будь-яке число локальних міток @@. Для переходу до таких міток треба використовувати зарезервовані слова: @F - forward; @B - backward. Перш @F - це перехід до наступної мітки, @B - це перехід до попередньої мітки. Мітка або ім'я змінної не повинна бути зарезервованим словом.
ВИКОНАННЯ ІНДИВІДУАЛЬНОГО ЗАВДАННЯ
Варіант 1
Задача 1. Написати з використанням циклів і оформити згідно вимог програму на асемблері для рисування вказаним кольором прямокутника заданого розміру у місці екрану, заданому координатами лівої верхньої вершини за допомогою мишки. Ширина 10, висота 55, колір 4.
Початок програми:
[ 1] : sseg segment stack
[ 2] 0000: [??} 00 db 256 dup(?)
[ 3] : sseg ends
[ 4] : dseg segment
[ 5] 0100: 00 00 cx0 dw ?
[ 6] : dseg ends
[ 7] : cseg segment
[ 8] : assume cs:cseg,ds:dseg,ss:sseg
[ 9] 0110: EB 00 start: jmp main
[ 10] 0112: 1E main: push ds
[ 11] 0113: B8 00 00 mov ax,0
[ 12] 0116: 50 push ax
[ 13] 0117: B8 10 00 mov ax,dseg
[ 14] 011A: 8E D8 mov ds,ax
[ 15] :
[ 16] 011C: B8 12 00 mov ax,0012h
[ 17] 011F: CD 10 int 10h
[ 18] :
[ 19] 0121: B8 00 00 mov ax,0
[ 20] 0124: CD 33 int 33h
[ 21] :
[ 22] 0126: B8 01 00 mov ax,1
[ 23] 0129: CD 33 int 33h
[ 24] 012B: B8 03 00 c: mov ax,3
[ 25] 012E: CD 33 int 33h
[ 26] :
[ 27] 0130: F7 C2 01 00 test dx,001b
[ 28] 0134: 74 F5 jz c
[ 29] :
[ 30] 0136: B8 02 00 mov ax,2
[ 31] 0139: CD 33 int 33h
[ 32] :
[ 33] 013B: 89 0E 00 00 mov cx0,cx
[ 34] 013F: 8B F1 mov si,cx
[ 35] 0141: 83 C6 3C add si,10
[ 36] :
[ 37] 0144: 8B FA mov di,dx
[ 38] 0146: 83 C7 1E add di,55
[ 39] :
[ 40] 0149: B7 00 mov bh,0
[ 41] 014B: B0 0A mov al,4
[ 42] 014D: B4 0C mov ah,0ch
[ 43] 014F: 8B 0E 00 00 e: mov cx,cx0
[ 44] 0153: CD 10 d: int 10h
[ 45] 0155: 41 inc cx
[ 46] 0156: 3B CE cmp cx,si
[ 47] 0158: 7C F9 jl d
[ 48] 015A: 42 inc dx
[ 49] 015B: 3B D7 cmp dx,di
[ 50] 015D: 7C F0 jl e
[ 51] :
[ 52] 015F: B4 08 mov ah,08h
[ 53] 0161: CD 21 int 21h
[ 54] :
[ 55] 0163: B8 00 4C exit: mov ax,4c00h
[ 56] 0166: CD 21 int 21h
[ 57] :
[ 58] : cseg ends
[ 59] : end start
[ 60] :
THE SYMBOL TABLE > lab1.exe - emu8086 assembler version: 4.08
Name Offset Size Type Segment
SSEG 00000 -5 SEGMENT (ITSELF)
DSEG 00010 -5 SEGMENT (ITSELF)
CX0 00000 2 VAR dseg
CSEG 00011 -5 SEGMENT (ITSELF)
START 00000 -1 LABEL cseg
MAIN 00002 -1 LABEL cseg
C 0001B -1 LABEL cseg
E 0003F -1 LABEL cseg
D 00043 -1 LABEL cseg
EXIT 00053 -1 LABEL cseg
<END>
Задача 2. Написати програму для роботи з файлами і каталогами. Створити каталог (Borovuk), створити файл з іменем Angelina, записати (Rostuslav), закрити файл і перейти в кореневий каталог.
lab2.exe - emu8086 assembler version: 4.08
[LINE] LOC: MACHINE CODE SOURCE
[ 1] : ssegsegmentstack
[ 2] 0000: [0 ?? 0] db 256 dup (?)
[ 3] : ssegends
[ 4] :
[ 5] : dseg segment
[ 6] 0100: 5C 5A 61 68 61 6B 61 79 6C 6F 00 newcatdb '\Borovuk',0
[ 7] 010B: 56 6F 6C 6F 64 79 6D 79 72 00 newfiledb 'Angelina',0
[ 8] 0115: 52 6F 73 74 75 73 6C 61 76 textbufdb'Rostuslav'
[ 9] 011E: 43 3A 5C 00 rootcat db 'C:\',0
[ 10] 0122: 65 72 72 6F 72 24 errordb'error$'
[ 11] : dsegends
[ 12] :
[ 13] : cseg segment
[ 14] : assumecs:cseg;ds:dseg;ss:sseg
[ 15] 0130: EB 00 start:jmpmain
[ 16] 0132: 1E main:pushds
[ 17] 0133: B8 00 00 movax,0
[ 18] 0136: 50 pushax
[ 19] 0137: B8 10 00 movax,dseg
[ 20] 013A: 8E D8 movds,ax
[ 21] 013C: BA 00 00 movdx,offset newcat
[ 22] 013F: B4 39 movah,39h
[ 23] 0141: CD 21 int21h
[ 24] 0143: 72 37 jcerop
[ 25] 0145: BA 00 00 movdx,offset newcat
[ 26] 0148: B4 3B movah,3bh
[ 27] 014A: CD 21 int21h
[ 28] 014C: 72 2E jcerop
[ 29] 014E: BA 0B 00 movdx,offset newfile
[ 30] 0151: B9 00 00 movcx,0
[ 31] 0154: B4 5B movah,5bh
[ 32] 0156: CD 21 int21h
[ 33] 0158: 72 22 jcerop
[ 34] 015A: 8B D8 movbx,ax
[ 35] 015C: BA 15 00 movdx,offset textbuf
[ 36] 015F: B9 09 00 movcx,9
[ 37] 0162: B4 40 movah,40h
[ 38] 0164: CD 21 int21h
[ 39] 0166: 72 14 jcerop
[ 40] 0168: B4 3E movah,3eh
[ 41] 016A: CD 21 int21h
[ 42] 016C: 72 0E jcerop
[ 43] 016E: BA 1E 00 mov dx,offset rootcat
[ 44] 0171: B4 3B mov ah,3bh
[ 45] 0173: CD 21 int 21h
[ 46] 0175: 72 05 jcerop
[ 47] 0177: B8 00 4C exit:movax,4c00h
[ 48] 017A: CD 21 int21h
[ 49] 017C: BA 22 00 erop:movdx,offset error
[ 50] 017F: B4 09 movah,9
[ 51] 0181: CD 21 int21h
[ 52] 0183: EB F2 jmpexit
[ 53] : csegends
[ 54] : endstart
< THE SYMBOL TABLE > lab2.exe -- emu8086 assembler version: 4.08
Name Offset Size Type Segment
SSEG 00000 -5 SEGMENT (ITSELF)
DSEG 00010 -5 SEGMENT (ITSELF)
NEWCAT 00000 1 VAR dseg
ERROR 00022 1 VAR dseg
CSEG 00013 -5 SEGMENT (ITSELF)
START 00000 -1 LABEL cseg
MAIN 00002 -1 LABEL cseg
EXIT 00047 -1 LABEL cseg
EROP 0004C -1 LABEL cseg
< END >
Результат роботи програми
ВИСНОВОК
На основі даної розрахункової роботи я поглиблено дізналася про структуру програми на асемблері, сегменти, дані та команди, закріпила навички з програмування графічних програм, а також роботи з файлами і каталогами.
Размещено на Allbest.ru
...Подобные документы
Алгоритм реалізації та функціонування програми, яка імітує команду DOS dir. Засоби мови Assembler, що використовуються в програмі: команди, директиви, переривання. Функціонування програми; інтерфейс, який застосовується при спілкуванні з користувачем.
курсовая работа [27,9 K], добавлен 18.01.2013Мова Асемблера, її можливості та команди. Розробка алгоритму програми, його реалізація в програмі на мові Асемблера. Введення елементів матриці та обчислення cуми елементів, у яких молодший біт дорівнює нулю. Методи створення програми роботи з матрицями.
контрольная работа [50,3 K], добавлен 12.08.2012Програма на мові програмування С++. Аналіз стану технологій програмування та обґрунтування теми. Розробка програми виконання завдання, методу вирішення задачі. Робота з файлами, обробка числової інформації і робота з графікою. Розробка програми меню.
курсовая работа [41,0 K], добавлен 17.02.2009Програмування під DOS мовою низького рівня Асемблер (ASM-86). Функції програми: виведення в довільне місце екрану тексту заданого стилю та кольору, змінення шрифту, розміру літер та напрямку їх виводу. Алгоритм програми, системні вимоги до комп'ютера.
курсовая работа [47,4 K], добавлен 03.06.2009Принципи технології створення програмних продуктів. Набір файлів, необхідних для створення програми в Delphi, варіанти роботи з ними. Програмування графічного інтерфейсу користувача. Зовнішній вигляд і лістинг програми, використані команди і компоненти.
курсовая работа [550,5 K], добавлен 03.01.2014Програми і мови програмування. Алфавіт мови програмування. Лексеми, зарезервовані слова мови Pascal. Ідентифікатори, типи даних. Арифметичні вирази, операції. Стандартні функції, структура програми. Процедури введення-виведення. Правила написання команд.
лекция [445,0 K], добавлен 24.07.2014Проектування архітектури гри "Тетріс". Аналіз вимог до неї. Вивчення особливостей реалізації, кодування та тестування програми. Алгоритм побудови робочого поля. Вибір мови програмування. Розробка і налагодження тексту програми. Інструкції з експлуатації.
курсовая работа [460,9 K], добавлен 04.03.2014Програма, що модифікує деякі команди для того, щоб вони могли працювати в захищеному режимі роботи мікропроцесора. Вимоги до надійності, маркування і пакування. Умови експлуатації. Стадії і етапи розробки програми. Опис і розробка алгоритму рішення.
курсовая работа [42,4 K], добавлен 20.01.2009Поняття мови програмування С++, її сутність та особливості, призначення та використання. Структура програми, її основні елементи та загальні правила роботи. Охорона праці при роботі з обчислювальною технікою. Апаратні вимоги для виконання програми.
курсовая работа [126,2 K], добавлен 29.03.2009Прості та умовні оператори мови С++. Робота з двовимірними масивами. Пошук та сортування даних. Робота з файлами та з динамічними структурами даних. Опис мови програмування Delphi. Складення програми до розроблених алгоритмів. Організація циклів.
отчет по практике [4,3 M], добавлен 28.08.2014Мови програмування, на яких написана програма побудови замкнутих багатокутників. Функціональні обмеження на застосування. Методи та елементи, що використовуються. Структура програми з описом функцій складових частин. Зв'язок програми з іншими програмами.
курсовая работа [76,6 K], добавлен 01.04.2016Розробка програми на мові програмування С++ з використанням об’єктно-орієнтованого програмування, яка включає в себе роботу з файлами, класами, обробку числової інформації і роботу з графікою. Структура класів і об’єктів. Лістинг та алгоритм програми.
курсовая работа [104,4 K], добавлен 14.03.2013Розробка програми автоматизації роботи з матрицями. Оформлення даних у вигляді матриць цілих чисел. Перелік операцій над матрицями, які реалізуються у програмі. Програмне забезпечення, мови програмування. Опис логічної структури та алгоритм програми.
курсовая работа [312,2 K], добавлен 01.04.2016Інструменти середовища C++Builder, які були використані в програмі. Робота з файлами, їх відкриття, відображення та закриття. Розробка основних функцій для реалізації програми. Тестування програмного забезпечення. Блок-схема та алгоритм програми.
курсовая работа [924,3 K], добавлен 14.01.2014Базові конструкції мови програмування С++ з позиції об’єктного програмування. Розробка програми для автоматизації обліку товарів на складі магазину парфумів. Реалізація програми в середовищі Visual Studio C++. Розробка інтерфейсу і тестування програми.
дипломная работа [907,9 K], добавлен 01.04.2016Програма клавіатурний тренажер. Застосування C++ BUILDER для створення інтерфейсних програм. Опис VCL компонентів. Робота з графікою GDI. Опис роботи та лістинг програми. Результат роботи програми. Інтегроване середовище розробки. Компоненти закладок.
курсовая работа [2,7 M], добавлен 24.03.2009Огляд існуючих методів розробки компіляторів, детальний опис мови. Характеристика та специфіка процесу розробки програми компілятора на рівні блок-схем і тексту програми. Подання тексту компілятора, а також результатів тестування розробленої програми.
курсовая работа [510,2 K], добавлен 03.06.2011Створення програми з нетривіальною логікою на мові Асемблер, реалізуючи запропонований алгоритм за допомогою команд розгалуження та циклу. Механізми передачі керування та зміна послідовності виконання команд. Типи адресації. Команди умовного переходу.
лабораторная работа [390,3 K], добавлен 27.02.2013Робота з цілими значеннями за допомогою арифметичних команд. Механізм роботи команд передачі керування мови Assembler. Типи даних "FPU" та система регістрів. Програма та її структура на мові Assembler, робота з директивами. Текстовий режим відеоадаптера.
лабораторная работа [1,7 M], добавлен 31.05.2014Написання програми для виведення чисел Фібоначчі. Загальна характеристика мови Паскаль. Науковий доробок Леонардо Фібоначчі. Історія і властивості послідовності. Особливості програмування мовою Turbo Pascal. Відкалібрування та синхронізування програми.
курсовая работа [325,1 K], добавлен 09.10.2013