файлу
lea dx,cs:sym ; в dx – адрес буферу, що містить інформацію для
; запису
mov cx,01h ; в cx – кількість байт, що мають бути записані
int 21h ;переривання
mov ah,3eh ; закриття файлу
mov bx,cs:des ; в bx – дескриптор
int 21h ;переривання
;===========================================
;повертаєм значення регістрів із стеку:
pop es ;значення регістру es
;значення регістру ds
popa ;значення всіх регістрів оперативного призначення
iret ; передаємо управління перерваній програмі
real_start:
push es ;зберігаємо значення регістра es
mov ax,3517h
;в AH – 35h (номер функції отримання вектора)
;в AL - 17 h (номер необхідного перервання)
int 21h ;переривання
mov old_int17_cs,es ;зберігаємо сегмент в змінній old_int8_cs
mov old_int17_ip,bx ;зберігаємо зміщення в змінній old_int8_ ip
lea dx,interrupt ;DS:DX – нова підпрограма обробки переривання
mov ax,2517h
; AH - 25h номер функції установки вектора
; AL – 17h номер необхідного переривання
int 21h ;переривання
pop es ;відновлюєм es
;================================
;створюєм файл із іменем "coded.txt"
mov ah,3ch ; в ah - 3c -номер функції створення файлу
lea dx,filename ; в dx - адрес строки з іменем файлу
xor cx,cx ; в сх - атрибут файлу-(0)
int 21h ;переривання
mov des,ax ;зберігаємо дескриптор файлу в des
lea dx,real_start ;зміщення команди, починаючи з якої пам'ять буде
; звільнено
int 27h ;передаємо управління DOS
ends
end start
ОПИС РОБОТИ
Програма складається з двох частин : резидентної, в якій виконуються безпосередньо завдання роботи і загрузчика, який заносить резидентну частину в пам’ять.
На початку програми вибирається тип процесора і вказується номер переривання за яким слідкуватиме програма. Виконання програми починається із мітки start.
Резидентна частина починається із задання функції переривання
int 17h, яка здійснює перекодування символів у близькі по звучанню латинські літери.
Далі відбувається перевірка перекодування символів Для цього користуємось командою порівняння cmp, за допомогою якої зрівнюєм значення регістрів у яких містяться поточні значення символів. Якщо символи співпадають - продовжуєм перевірку, поки всі символи не будуть перевірені. За допомогою команди mov.
Наступною йде команда витягнення всіх основних регістрів зі стеку - pusha. Також задаються змінні для тимчасового збереження старої адреси вектора .
Загрузчик починається від мітки real start.
Спочатку отримуємо адресу попереднього вектора переривання Pnr , далі зберігаєм старші і молодші 16 біт адреси у відповідні змінні old_cs та old_ip.
Завершуємо програму установкою нової адреси вектора переривання, присвоївши старшому байту регістру АХ змінну dec.
ВИСНОВКИ
В результаті виконання курсового проектування було написано резидентну програму, що забезпечує перекодування символів у близькі по звучанню латинські літери. Наведено блок-схему програми, подано її опис функціонування. Текст резидентної частини програми і загрузчика написано на мові Assembler, з докладним описом використаних функції та ремарками.
ПЕРЕЛІК ВИКОРИСТАНИХ ЛІТЕРАТУРНИХ ДЖЕРЕЛ
1. Зубков СВ. Assembler для DOS, Windows и UNIX -3-е изд., стер. -К Пресс; СПб.гПитер, 2005.-608с.
2. Фролов А.В, Фролов Г.В. Апаратное обеспечение IBM PC: В 2-х ч. Часть 1 - 2-е изд., стер. - М.: „ДИАЛОГ-МИФИ”, 1992.-208 с.
3. Велихов А.В. Макроассемблер: Создание и отладка программ.- М-:Майор, 2001.-192с.
4. Системное программное обеспечение. Учебник для вузов/ А. Ю. Молчанов.- СПб.:Питер, 2ООЗ.-396с.