Реалізації апаратних преривань

Структура програми на 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.