Розробка програми на мові Асемблера
По-справжньому розв’язати проблеми, пов’язані з апаратурою (або навіть, більш того, залежні від апаратури як, наприклад, підвищення швидкодії програм), неможливо без знання асемблера. Яким би розумним не був програміст, якщо б хорошою не була мова, на якій він пише свою програму, без знання асемблера йому не обійтись. І не випадково практично всі компілятори мов високого рівня містять засоби… Читати ще >
Розробка програми на мові Асемблера (реферат, курсова, диплом, контрольна)
Міністерство освіти і науки України КОЛЕДЖ ЕЛЕКТРОННИХ ПРИЛАДІВ
Івано-Франківського національного технічного університету
нафти і газу
Циклова комісія комп’ютерних дисциплін
КУРСОВА РОБОТА
Розробка програми на мові Асемблера
ПОЯСНЮВАЛЬНА ЗАПИСКА
ІВАНО-ФРАНКІВСЬК
Зміст
Вступ
1. Постановка задачі
2. Метод розв’язування
3. Блок-схема алгоритму та його опис
4. Таблиця ідентифікаторів
5. Програма та її опис
6. Контрольний приклад
Висновок
Список використаної літератури
Вступ
Колись асемблер був мовою, без знання якої не можна було примусити комп’ютер зробити що-небудь корисне. Поступово ситуація мінялася. З’являлися більш зручні засоби спілкування з комп’тером. Але, на відміну від інших мов, асемблер не вмер.
Мова асемблера — це символічне представлення машинної мови.
Всі процеси в машині на найнижчому, апаратному рівні приводяться в дію тільки командами (інструкціями) машинної мови. Звідси зрозуміло, що, не дивлячись на загальну назву, мова асемблера для кожного типу комп’ютера своя. Це торкається і зовнішнього вигляду програм, написаних на асемблері, і ідей, віддзеркаленням яких ця мова є.
По-справжньому розв’язати проблеми, пов’язані з апаратурою (або навіть, більш того, залежні від апаратури як, наприклад, підвищення швидкодії програм), неможливо без знання асемблера. Яким би розумним не був програміст, якщо б хорошою не була мова, на якій він пише свою програму, без знання асемблера йому не обійтись. І не випадково практично всі компілятори мов високого рівня містять засоби зв’язку своїх модулів з модулями на асемблері або підтримують вихід на асемблерний рівень програмування.
Звичайно, час комп’ютерних універсалів вже пройшов. Як мовиться не можна обійняти неосяжне. Але є щось загальне, свого роду фундамент, на якому будується хоча б якась серйозна комп’ютерна освіта. Це знання про принципи роботи комп’ютера, його архітектуру і мову асемблера як віддзеркалення і втіленні цих знань.
1. Постановка задачі
Створити два файли В1 і В2 з шести двоцифрових цифр. Вводити з клавіатури в довільному порядку цифри. При чому парні цифри записувати в файл В3. Непарні цифри записувати у файл В4.
2. Метод розв’язування
Для вирішення поставленого завдання використовувалася мова «Асемблер» — програмна мова низького рівня.
Для створення файлів була використана функція 3Ch переривання DOS 21h. Виведення коментарів й світлофорів вдалося здійснити з допомогою функції 13h переривання BIOS 10h. Теж у програмі використовувалися оператори умовних та безумовних переходів. Не обминемо увагою й те, що програма містить арифметичну команду асемблера ADD. Її використання дозволило виведення на екран світлофорів у вигляді квадратів, їх затирання і зупинку при введенні символів.
Для переміщення покажчика зчитування запису із файлу та власне самого зчитування були використані відповідно функції 42h і 3Fh переривання DOS 21h. Щоб закрити файли була застосована функція 3Eh переривання DOS 21h.
Нижче наведені вхідні та вихідні дані функцій, що використовувались у програмі.
ПЕРЕРИВАННЯ DOS 21H
1. 3Ch — функція створення файлу
Вхідні дані:
AH=3Ch;
CL= {атрибути файлу};
· Байт 7 — файл можна відкривати різними процесами
· Байт 6 — не використовується
· Байт 5 — файл архівний
· Байт 4 — директорія
· Байт 3 — мітка тому
· Байт 2 — файл системний
· Байт 1 — файл схований
· Байт 0 — файл тільки для читання
DS: DX — адреса ASCII-рядка з іменем файлу, що закінчується нулем.
Вихідні дані:
CF=0 — помилки не було (в AX ідентифікатор файлу);
CF=1 — відбулась помилка (в AX код помилки).
2. 42h — функція переміщення покажчика зчитування запису
Вхідні дані:
AH=42h;
BX= {ідентифікатор файлу}
CX: DX — відстань, на яку потрібно перемістити покажчик (зі знаком).
Вихідні дані:
AL= {переміщення}.
3. 3Fh — функція читання із файлу чи пристрою
Вхідні дані:
AH=3Fh;
BX= {ідентифікатор файлу};
CX= {число байтів};
DS: DX — адреса буфера для прийому даних.
Вихідні дані:
AX= {число зчитаних байтів}.
4. 40h — функція запису у файл чи пристрій
Вхідні дані:
AH=40h;
BX= {ідентифікатор файлу};
CX= {число байтів};
DS: DX — адреса буфера для прийому даних.
5. 3Eh — функція закриття файлу
Вхідні дані:
AH=3Eh;
BX= {ідентифікатор файлу}.
6. 01h — функція зчитування символу із клавіатури
Вхідні дані:
AH=01h.
Вхідні дані:
AL — ASCII-код символу.
ПЕРЕРИВАННЯ BIOS 10H
1. 13h — функція виводу рядка символів із заданими атрибутами
AH=13h;
Al= {режим виводу};
CX= {довжина рядка символів};
BL= {атрибути};
DH= {рядок, з якого починається вивід};
DL= {стовпець, з якого починається вивід};
2. 02h — функція керування положенням курсору
AH=02h;
BH= {};
DH= {рядок, на який переміститься курсор};
DL= {стовпець, на який переміститься курсор}.
3. Блок-схема алгоритму
файл цифра асемблер алгоритм
4. Таблиця ідентифікаторів
Позначення | Назва, пояснення | |
kyrsor | Задання положення курсора | |
P | Змінна, у яку заноситься значення ASCII-коду символу, що вводиться | |
M, N, Z, T, Q | Буфери, які застосовані для прийняття даних із файлів | |
T | Кількість введених символів | |
L1 — L4, q1 — q4 | Коментарі | |
A, B, C, D | Адреси файлів, що створюються | |
ID1 — ID4 | Ідентифікатори файлів B1, B2, B3, B4 | |
5. Програма та її опис
masm
.model small
.data
kyrsor db 0
p db 0
q1 db ' Введіть файл B1', 0
q2 db ' Введіть файл B2', 0
q3 db ' Файл B3 утворюється з парних чисел файлів B1 i B2', 0
q4 db ' Файл B4 утворюється з не парних чисел файлів B1 i B2', 0
l1 db 'ВВедіть два 6-тu двоцифрові числа i будуть стварені файли B1 і B2 ', 0
l2 db 'Числа вводити з клавіатури', 0
l3 db 'Виконав студент групи КС-32', 0
l4 db ' Sayalyuk Ivan ', 0
A db 'Fail1.txt', 0
B db 'Fail2.txt', 0
C db 'Fail3.txt', 0
D db 'Fail4.txt', 0
id1 dw 0
id2 dw 0
id3 dw 0
id4 dw 0
m db 20 dup (20h)
z db 3 dup (20h)
n db 3 dup (20h)
t db 40 dup (20h)
q db 40 dup (20h)
.stack 256
.code
start:
assume ds:@data, cs:@code, es:@data
mov ax,@data
mov ds, ax
mov es, ax
;==================================================================== ;ПОЯСНЕНЯ
;====================================================================
mov ah, 13h; Функція виводу рядка символів із заданими атрибутами
mov al, 0; Режим виводу
mov cx, 56; Довжина рядка для виводу
mov dh, 1; Рядок, з якого починається вивід
mov dl, 10;Стовпець, з якого починається вивід
mov bl, 10 0100b; Задання атрибутів (колір символів й тла)
mov bp, offset l1; Адреса рядка символів, що необхідно вивести
int 10h; Реалізація переривання BIOS 10h
mov ah, 13h
mov al, 0
mov cx, 27
mov dh, 2
mov dl, 25
mov bl, 10 0100b
mov bp, offset l2
int 10h
;====================================================================
СТВОРЕННЯ ФАЙЛІВ
;====================================================================
;*****************************************************************************
ФАЙЛ 1 ;****************************************************************************
mov ah, 13h
mov cx, 15
mov al, 0
mov dh, 5
mov dl, 30
mov bl, 10 0100b
mov bp, offset q1
int 10h
mov ah, 02h; Функція керування положенням курсору
mov bh, 0; Номер відеосторінки
mov dh, 6 ;Рядок, в якому знаходитиметься курсор миші
mov dl, 28; Стовпець, в якому знаходитиметься курсор миші
int 10h; Реалізація переривання BIOS 10h
mov ah, 3ch;Функції створення файлу
mov cx, 00b; Атрибути файлу
mov dx, offset A; Адреса ASCII рядка
int 21h ;Переривання
mov id1, ax;Занесення в змінну ідентифікатора
mov ah, 3fh; Функція зчитування із файлу
mov bx, 0; Ідентифікатор файлу
mov cx, 25; Число байтів для зчитування
mov dx, offset m; Адреса буфера для прийняття даних
int 21h; Реалізація переривання DOS 21h
mov ah, 40h; Функція запису у файл
mov bx, id1; Ідентифікатор файлу
mov cx, 17; Число байтів, яке необхідно записати у файл
mov dx, offset m; Адреса буфера із даними
int 21h;Переривання
;*****************************************************************************
; ФАЙЛ 2 ;*****************************************************************************
mov ah, 13h
mov cx, 15
mov al, 0
mov dh, 8
mov dl, 30
mov bl, 10 0100b
mov bp, offset q2
int 10h
mov ah, 02h
mov bh, 0
mov dh, 9
mov dl, 28
int 10h
mov ah, 3ch
mov cx, 00b
mov dx, offset B
int 21h
mov id2, ax
mov ah, 3fh
mov bx, 0
mov cx, 25
mov dx, offset m
int 21h
mov ah, 40h
mov bx, id2
mov cx, 17
mov dx, offset m
int 21h
;*****************************************************************************
; ФАЙЛ 3 ;*****************************************************************************
mov ah, 13h
mov cx, 50
mov al, 0
mov dh, 11
mov dl, 10
mov bl, 10 0100b
mov bp, offset q3
int 10h
mov ah, 02h
mov bh, 0
mov dh, 12
mov dl, 28
int 10h
mov ah, 3ch
mov cx, 00b
mov dx, offset C
int 21h
mov id3, ax
;*****************************************************************************
; ФАЙЛ 4
;*****************************************************************************
mov ah, 13h
mov cx, 51
mov al, 0
mov dh, 14
mov dl, 10
mov bl, 10 0100b
mov bp, offset q4
int 10h
mov ah, 02h
mov bh, 0
mov dh, 16
mov dl, 28
int 10h
mov ah, 3ch
mov cx, 00b
mov dx, offset D
int 21h
mov id4, ax
;*****************************************************************************
; ВИКОНАНЯ
;*****************************************************************************
;====================================================================
; ПЕПЕВІРЯЄТЬСЯ ФАЙЛ 1
;===============================================================
mov ah, 42h; Функція переміщення покажчика зчитування запису із файлу
mov bx, id1; Ідентифікатор файлу
mov al, 0; Режим виводу
mov cx, 0; Обнулення регістра сx
mov dx, 0; Обнулення регістра dx
int 21h; Реалізація переривання DOS 21h
mov cx, 6;Початок циклу
v:push cx;Занесення встек кількості повторень
mov ah, 3fh; Функція зчитування із файлу
mov bx, id1; Ідентифікатор файлу
mov cx, 3; Число байтів для зчитування
mov dx, offset z; Адреса буфера для прийняття даних
int 21h; Реалізація переривання DOS 21h
mov al, z+1;Занесення в al другу цифру числа
cmp al,'1'; Команда порівняння
je x1; Команда переходу на мітку х1, якщо прм порівнянні al=0
cmp al,'3'
je x1
cmp al,'5'
je x1
cmp al,'7'
je x1
cmp al,'9'
je x1
jmp p ;Безумовний перехід на мітку p
x1: mov ah, 40h
mov bx, id4
mov cx, 3
mov dx, offset z
int 21h
p:pop cx;Кінець циклу
loop v;Команда переходу на початок циклу
mov ah, 42h
mov bx, id1
mov al, 0
mov cx, 0
mov dx, 0
int 21h
mov cx, 6
r:push cx
mov ah, 3fh
mov bx, id1
mov cx, 3
mov dx, offset n
int 21h
mov al, n+1
cmp al,'0'
je x2
cmp al,'2'
je x2
cmp al,'4'
je x2
cmp al,'6'
je x2
cmp al,'8'
je x2
jmp g
x2: mov ah, 40h
mov bx, id3
mov cx, 3
mov dx, offset n
int 21h
g:pop cx
loop r
;====================================================================
; ПЕПЕВІРЯЄТЬСЯ ФАЙЛ 2
;====================================================================
mov ah, 42h
mov bx, id2
mov al, 0
mov cx, 0
mov dx, 0
int 21h
mov cx, 6; Початок циклу
x:push cx;Занесення встек кількості повторень
mov ah, 3fh
mov bx, id2
mov cx, 3
mov dx, offset z
int 21h
mov al, z+1
cmp al,'1'
je x3
cmp al,'3'
je x3
cmp al,'5'
je x3
cmp al,'7'
je x3
cmp al,'9'
je x3
jmp i;Безумовний перехід на мітку і
x3: mov ah, 40h
mov bx, id4
mov cx, 3
mov dx, offset z
int 21h
i:pop cx
loop x
mov ah, 42h
mov bx, id2
mov al, 0
mov cx, 0
mov dx, 0
int 21h
mov cx, 6
s:push cx
mov ah, 3fh
mov bx, id2
mov cx, 3
mov dx, offset n
int 21h
mov al, n+1
cmp al,'0'
je x4
cmp al,'2'
je x4
cmp al,'4'
je x4
cmp al,'6'
je x4
cmp al,'8'
je x4
jmp w
x4: mov ah, 40h
mov bx, id3
mov cx, 3
mov dx, offset n
int 21h
w:pop cx
loop s
;*****************************************************************************
; ЗАПИС РЕЗУЛЬТАТІВ ВИКОНАННЯ
;*****************************************************************************
mov ah, 42h
mov bx, id3
mov al, 0
mov cx, 0
mov dx, 0
int 21h
mov ah, 3fh
mov bx, id3
mov cx, 40
mov dx, offset t
int 21h
mov ah, 13h
mov cx, 40
mov al, 0
mov dh, 12
mov dl, 15
mov bl, 111b
mov bp, offset t
int 10h
mov ah, 42h
mov bx, id4
mov al, 0
mov cx, 0
mov dx, 0
int 21h
mov ah, 3fh
mov bx, id4
mov cx, 40
mov dx, offset q
int 21h
mov ah, 13h
mov cx, 40
mov al, 0
mov dh, 16
mov dl, 15
mov bl, 111b
mov bp, offset q
int 10h
;*****************************************************************************
; ЗАКРИТТЯ ФАЙЛІВ
;*****************************************************************************
mov ah, 3eh ;Функція закриття файлу
mov bx, id1; Ідентифікатор файлу
int 21h ;Переривання
mov ah, 3eh
mov bx, id2
int 21h
mov ah, 3eh
mov bx, id3
int 21h
mov ah, 3eh
mov bx, id4
int 21h
;====================================================================
; РОЗРОБНИК
;====================================================================
mov ah, 13h
mov al, 0
mov cx, 27
mov dh, 19
mov dl, 25
mov bl, 10 0100b
mov bp, offset l3
int 10h
mov ah, 13h
mov al, 0
mov cx, 22
mov dh, 20
mov dl, 28
mov bl, 10 0100b
mov bp, offset l4
int 10h
mov ah, 02h
mov bh, 0
mov dh, 20
mov dl, 0
int 10h
;*****************************************************************************
; КІНЕЦЬ
;*****************************************************************************
mov ah, 01h
int 21h
mov ax, 4c00h
int 21h
end start; Завершення програми Контрольний приклад Виконання контрольного прикладу допомагає наочно зрозуміти принцип функціонування створеної програми і побачити, чи вибраний найоптимальніший метод розв’язання задачі.
Для даного курсового проекту я вибрав такий контрольний приклад: Створити два файли В1і В2 з шести двоцифрових цифер. Вводити з клавіатури в довільному порядку цифри. При чому парні цифри записувати в файл В3. Непарні цифри записувати у файл В4.
Протягом процесу введення на екрані будуть знаходитись коментарі, які пояснюють суть завдання і служать елементами оформлення екрану при введенні.
Коли введення закінчується, то по центру рядка з’являється коментар
" ВИКОНАВ СТУДЕНТ ГРУПИ КС-32: Сагалюк Іван «. Теж, окрім згаданого, на екрані з’являться значення, які записалися у файли В3 та В4. Вони знаходитимуться у рядках після назв файлів.
Вихід із exe-файлу відбудеться після того як буде введений будь-який символ.
Висновки Виконуючи дану курсову роботу була розроблена програма на мові асемблера яка, використовуючи функції роботи з файлами, функції роботи з монітором та клавіатурою, Створює два файли B1і B2 з шести двоцифрових чисел. Вводити з клавіатури в довільному порядку цифри. При чому парні цифри записувати в файл В3, а непарні цифри записувати у файл В4.
Мною отримані навики роботи з мовою асемблера, з використання функцій роботи з файлами системи переривань операційної системи DOS і BIOS.
Дана курсова робота була розбита на розділи, в яких описано процес розробки програми. В розділах описано алгоритм розробленої програми, зроблено опис тексту програми та структури програми, розроблено блок — схему алгоритму задачі.
Список використаної літератури
1. Питер Абель «Ассемблер. Язык програмирования для IBM PC» — Киев, «Век», 2003 г.
2. Кип Р. Ирвин «Язык ассемблера для процессоров INTEL» — М: Издательский дом «Вильямс»", 2002 г.
3. Зубков С. В. «Ассемблер для DOS, WINDOWS, UNIX» — М.: «ДМК», 2000 г.
4. Юров В. «Ассемблер» — Санкт-Петербург: «Питер», 2001 г.
5. Юров В. «Ассемблер. Практикум» — Санкт-Петербург: «Питер», 2002 г.
6. Юров В. «Ассемблер. Специальный справочник» — Санкт-Петербург: «Питер», 2000 г.