У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент





Інститут менеджменту та економіки “Галицька Академія”

КУРСОВА РОБОТА

Тема - Використання операційної системи MS DOS для роботи із файлами

Зміст

Розробка блок-схеми алгоритму

Розробка Assembler програми

Список використаної літератури

 

 

 

РОЗРОБКА ASSЕMBLER –ПРОГРАМИ

model small

;======== СЕГМЕНТ ДАНИХ ====================================

dataseg

f1 db 's:\Tasm\F1.txt',0

f2 db 's:\Tasm\F2.txt',0

f3 db 's:\Tasm\F3.txt',0

descr1 dw ? ;дескриптор файла 1

descr2 dw ? ;дескриптор файла 2

descr3 dw ? ;дескриптор файла 3

ZM db ?,?,? ;змінна через яку будем записувати дані у файл

;======== СЕГМЕНТ КОДIВ =====================================

codeseg

start:

;========== ІНІЦІАЛІЗАЦІЯ РЕГІСТРА DS =========================

mov ax,@data

mov ds,ax

;========= ВІДКРИТТЯ ФАЙЛІВ =================================

mov ah,3ch ;створення файла

xor cx,cx ;

mov dx,offset f1 ;записуєм адресу пам'яті f1 в регістр dx

int 21h

mov [descr1],ax ;зберiгаємо дескриптор файла

 

mov ah,3ch ;створення файла

mov dx,offset f2 ;записуєм адресу пам'яті f2 в регістр dx

int 21h

mov [descr2],ax ;зберiгаємо дескриптор файла

mov ah,3ch ;створення файла

mov dx,offset f3 ;записуєм адресу пам'яті f3 в регістр dx

int 21h

mov [descr3],ax ;зберiгаємо дескриптор файла

mov si,0000h ;

m7:

;============ВВІД ЧИСЛА=====================================

mov ah,1 ;вводимо старшу тетраду

int 21h

mov [ZM],al ;зберiгаємо ASCII-код старшої тетради

sub al,30h ;ASCII-корекція

cmp al,10 ;перевірка на літеру

jc m1 ;введено цифру -> перехід по мітці

sub al,7 ;введено літеру -> корекція для літери

m1:

mov dl,al ;зберігаємо старшу тетраду в dl

shl dl,1 ;зсуваємо старшу тетраду на 4 розряди вліво

shl dl,1

shl dl,1

shl dl,1

mov ah,1 ;вводимо молодшу тетраду

int 21h

mov [ZM+1],al ;зберiгаємо ASCII-код молодшої тетради

sub al,30h ;ASCII-корекція

cmp al,10 ;перевірка на літеру

jc m2 ;введено цифру -> перехід по мітці

sub al,7 ;введено літеру -> корекція для літери

m2:

add dl,al ;зберігаємо молодшу тетраду

xor dh,dh ;розширюємо введене число до слова

mov di,dx ;збегіраємо введене число в регістрі DI

;====== ПИШЕМО ВВЕДЕНЕ ЧИСЛО В ФАЙЛ f1 ====================

mov cx,2 ;заносимо кількість байтів, що необхідно записати

mov bx,[descr1] ;заносимо дескриптор файлу F1

mov ah,40h ;функцiя запису до файла

mov dx,offset ZM ;адреса буфера, де зберігаються дані для запису в фаїл

int 21h ;виклик функцiї запису

;======== МНОЖИМО ВВЕДЕНЕ ЧИСЛО НА 12.5 ===================

mov ax,di

shl ax,1 ;ax=x*2

shl ax,1 ;ax=x*4

mov bx,ax

shl bx,1 ;bx=x*8

add ax,bx ;ax=x*12

shr di,1 ;di=x/2

add ax,di ;ax=x*12.5

mov di,ax ;зберігаємо результат в DI

;============ ПЕРЕТВОРЮЄМО РЕЗУЛЬТАТ В ASCII ===============

;перетворення старшої тетради результату (0000 ХХХХ 0000 0000)

add ah,30h ;додаємо 30h для одержання ASCII-коду

cmp ah,3Ah ;перевірка на літеру

jc m3 ;не літера -> перехід на мітку

add ah,7 ;літера -> корекція для літери

m3: mov [zm],ah ;зберігаємо ASCII-код тетради

;перетворення середньої тетради результату (0000 0000 XXXX 0000)

shr al,1 ;зсув середньої тетради на 4 розряди вправо

shr al,1 ;

shr al,1

shr al,1

add al,30h ;додаємо 30h для одержання ASCII-коду

cmp al,3Ah ;перевірка на літеру

jc m4 ;не літера -> перехід на мітку

add al,7 ;літера -> корекція для літери

m4: mov [zm+1],al ;зберігаємо ASCII-код тетради

;перетворення молодшої тетради результату (0000 0000 0000 XXXX)

mov ax,di ;відновлення

and al,0Fh ;виділяємо молодшу тетраду

add al,30h ;додаємо 30h для одержання ASCII-коду

cmp al,3Ah ;перевірка на літеру

jc m5 ;не літера -> перехід на мітку

add al,7 ;літера -> корекція для літери

m5: mov [zm+2],al ;зберігаємо ASCII-код тетради

;=========== ПИШЕМО ДОБУТОК В ФАЙЛ f2 ======================

mov cx,3 ;заносимо кількість байтів, що необхідно записати

mov bx,[descr2] ;заносимо дескриптор файлу F2

mov ah,40h ;функцiя запису до файла

mov dx,offset ZM ;адреса буфера, де зберіг.дані для запису в файл

int 21h ;виклик функцiї запису

;========= ПРИ НЕОБХІДНОСТІ ПИШЕМО В ФАЙЛ f3 ===============

mov ah,[zm] ;зчитуємо старший байт

cmp ah,30h ;перевірка на '0'

jne m6 ;перехід якщо не '0'

mov cx,2 ;заносимо кількість байтів, що необхідно записати

mov bx,[descr3] ;заносимо дескриптор файлу F3

mov ah,40h ;функцiя запису до файла

mov dx,offset [ZM+1] ;адреса буфера, де зберігаються дані для запису в файл

int 21h ;виклик функцiї запису

m6:

inc si ;(SI = SI +1)

cmp si,0010h ;порівнюємо SI з кількістю чисел , що треба ввести (16)

je m8 ;перехід якщо SI = 16

jmp m7 ;перехід на ввід наступного числа

;========= ЗАКРИТТЯ ФАЙЛІВ =================================

m8:

mov ah,3Eh ;закриття файлу

mov bx,[descr1] ;дескриптор файлу F1

int 21h

 

mov ah,3Eh ;закриття файлу

mov bx,[descr2] ;дескриптор файлу F2

int 21h

mov ah,3Eh ;закриття файлу

mov bx,[descr3] ;дескриптор файлу F3

int 21h

;========== ЗАВЕРШЕННЯ ПРОГРАМИ ===========================

mov ah,4ch ;функція передачі управління MS-DOS

int 21h ;завершення програми

end start

 

РОЗРОБКА БЛОК-СХЕМИ АЛГОРИТМУ

 

Обсяг пам’яті: 260 байт

Кількість тактів, необхідних для виконання програми, не враховуючи виклики переривань: 5197