Інститут економіки та менеджменту „Галицька Академія”
Зміст
Опис основних функцій, що використані в програмі………………
Блок-схема алгоритму………………………………………………..
Опис блок-схеми алгоритму…………………………………………
Код програми з поясненнями (ремарками)…………………………
Опис роботи програми………………………………………………..
Висновки………………………………………………………………….
Література……………………………………………………………
1.Опис основних функцій, що використані в програмі.
В шістнадцятковій системі числення від’ємні елементи мають в старшому розряді одиницю. Тому всі шістнадцяткові числа, починаючи з 80h і більші можна трактувати як від’ємні. При множенні і вибиралися такі числа. Числа , що в старшому розряді мають 0, приймалися як додатні.
Для розв’язування даної задачі файли створювалися в поточному каталозі на поточному дику. Файлам було надано атрибут загального доступу. Кожне звертання до файлів контролювалося на наявність помилки.
Для розв’язування даної задачі була використана система переривань операційної системи DOS.
В курсовій роботі були використані наступні функції роботи з файлами.
Функція DOS 3Ch: Створити файл.
Вхід: АН = 3Ch.
СХ = атрибут файлу.
біт 7: файл можна відкривати різним процесам ;
біт 6: не використовується;
біт 5: архівний біт (1, якщо файл не зберігався);
біт 4: директорія (повинна бути 0 для функції 3Ch);
біт 3: мітка тому (ігнорується функцією 3Ch);
біт 2: системний файл;
біт 1: схований файл;
біт 0: файл тільки для читання;
DS:DX = адреса ASCIZ-рядка з повним ім'ям файлу (ASClZ-рядок ASCII-символів, що закінчується нулем).
Вихід: CF = 0 і АХ = ідентифікатор файлу, якщо не відбулася помилка.
Якщо файл вже існує, функція 3Ch усе рівно відкриває його, присвоюючи йомy нульову довжину. Щоб цього не відбулося, варто скористатися функцією 5Bh.
Функція DOS 3Fh: Читання з файлу чи пристрою.
Вхід: АН = 3Fh.
ВХ = ідентифікатор.
СХ = число байтів.
DS:DX =адреса буфера для прийому даних .
Вихід: CF = 0 і АХ = число зчитаних байтів, якщо не було помилки.
Функція DOS 40h: Запис у файл чи пристрій .
Вхід: АН = 40h .
ВХ = ідентифікатор.
СХ = число байтів .
DS:DX = адреса буфера з даними.
Вихід: CF = 0 і АХ = число записаних байтів, якщо не відбулася помилка .
В курсовій роботі була використана функція роботи з монітором 09Н.
функція DOS 09h: Вивести рядок символів на екран.
Вхід: АН = 09h.
DS:DX = адреса рядка, що закінчується символом $ (24h).
Вихід: AL= 24h (код останнього символу).
3.Опис блок-схеми алгоритму
Початок.
Опис всіх змінних, які використовуються в програмі.
Встановлення відеорежиму .
Створення файлів f 1, f 2, f 3.
Ввести числа з клавіатури у файл f 1.
Перехід на іншу сторінку і інший блок.
Перехід з іншої сторінки і іншого блоку.
Організація циклу. Виконання буде повторено 16 разів.
Число з f1 від’ємне?
Перехід на іншу сторінку і інший блок.
Помножити число на 19,7 і записати у файл f2.
Результат непарний?
Записати у файл f3.
Перехід з іншої сторінки і іншого блоку.
Встановити позицію читання/запису на початок файлів.
Читання вмісту файлів f2,f3.
Виведення вмісту файлів f2,f3 на екран .
Закриття всіх відкритих файлів.
Кінець.
4.Код програми з поясненнями (ремарками)
.model small ;модель па'мятi
.stack 100h
;опис даних
.data
namef1 db 'f1.TXT',0 ;оголошення файлiв
namef2 db 'f2.TXT',0
namef3 db 'f3.TXT',0
diskr1 dw 0 ;оголошення ідентифікаторів файлiв
diskr2 dw 0
diskr3 dw 0
buf db 80 dup(' '),'$' ;буфер для промiжних даних
;повідомлення
vv1 db 10,13,'Введiть данi в файл f1.TXT (великi букви):',10,13,'$'
vv3 db 10,13,'Вмiст файлу f2.TXT:',10,13,'$'
vv4 db 10,13,'Вмiст файлу f3.TXT:',10,13,'$'
vv5 db 10,13,'Такого числа нема !',10,13,'$'
;змiннi для промiжних даних
aa db ' '
x db 0
rez2 db ' '
rez3 db ' '
np db 0
;початок програми
.code
.386
assume ds:@data,cs:@code,es:@data ;прив’язка сегментів програми до
;регістрів
start:
mov ax,@data прив’язка сегментів програми до регістрів
mov ds,ax
mov es,ax
mov ah,00h ;встановити 3-iй вiдеорежим
mov AL,03h
int 10h
;створити файл f1
mov ah,3ch
mov cx,00h
mov dx,offset namef1
int 21h
jc ex
mov diskr1,ax ;запам’ятати ідентифікатор файлу f1
; створити файл f2
mov ah,3ch
mov cx,00h
mov dx,offset namef2
int 21h
jc ex
mov diskr2,ax ;запам’ятати ідентифікатор файлу f2
`;створити файл f3
mov ah,3ch
mov cx,00h
mov dx,offset namef3
int 21h
jc ex
mov diskr3,ax ;запам’ятати ідентифікатор файлу f3
mov ah,09h
mov dx,offset vv1 ;вивести пiдказку vv1 на екран
int 21h
mov ah,3fh ;зчитати з клавiатури 16 чисел
mov bx,0
mov cx,49
mov dx,offset buf
int 21h
mov ah,40h ;записати 16 чисел у файл f1
mov cx,47
mov bx,diskr1
mov dx,offset buf
int 21h
;перейти на початок файлу
mov ah,42h
mov bx,diskr1
mov al,0
mov cx,0
mov dx,0
int 21h
mov cx,16 ; кiлькiсть повторень циклу
m25: push cx ;занести у стек
mov x,0
mov ah,3fh ;зчитати з файлу f1 число
mov bx,diskr1
mov cx,3
mov dx,offset aa
int 21h
;----------перевiрка чи число шiснадцяткове----------------------
cmp aa,30h
jl m1
cmp aa,39h
jnle m2
sub aa,30h
m4:
cmp aa+1,30h
jl m1
cmp aa+1,39h
jnle m5
sub aa+1,30h
jmp m3
m2:
cmp aa,41h
jl m1
cmp aa,46h
jnle m1
sub aa,37h
m5:
cmp aa+1,41h
jl m1
cmp aa+1,46h
jnle m1
sub aa+1,37h
m3:
mov al,aa
shl x,4
mov al,aa+1
add x,al
mov al,x
shr al,7
cmp al,1 ;перевiрка чи число вiд їмне
jne mv2 ;якщо нi - на мiтку mv2
shl x,1 ;забрати знак "-"
shr x,1
;--------множення числа на 19.7----------------------
mov bh,0
mov bl,x ;рег. bx=x
mov ax,bx
shl ax,1 ;рег. ax=2x
add bx,ax ;рег. bx=x+2x
shl ax,3 ;рег. ax=16x
add bx,ax ;рег. bx=16x+2x+x
mov cx,0 ;рег. cx=0
mov ah,0
mov al,x ;рег. ax=x
shr ax,1 ;рег. ax=x/2
mov cx,ax ;рег. cx=x/2
shr ax,2 ;рег. ax=x/8
add cx,ax ;рег. cx=x/2+x/8
shr ax,1 ;рег. ax=x/16
add cx,ax ;рег. ax=x/2+x/8+x/16
add bx,cx ;рег. bx=16x+2x+x+x/2+x/8+x/16
mov ax,bx ; ax=16x+2x+x+x/2+x/8+x/16
add ax,8000h ;повертаїмо знак "-"
mov rez2,ah ;запам ятати результат
mov rez2+1,al
mov bl,al
shl bl,7
shr bl,7
cmp bl,1 ;перевiрка чи число непарне
jne mv1 ;якщо парне на мiтку mv1
mov np,1 ;np-признак непарностi
;-------переведення числа у символьну форму------------
mv1:
shr ah,4
cmp ah,9
jnle z6
add ah,30h
z8: mov rez3,ah
mov ah,rez2
shl ah,4
shr ah,4
cmp ah,9
jnle z7
add ah,30h
z20: mov rez3+1,ah
jmp m49
z6: add ah,37h
jmp z8
z7: add ah,37h
jmp z20
x25: jmp m25
M49:
mov al,rez2+1
shr al,4
cmp al,9
jnle m46
add al,30h
m48: mov rez3+2,al
mov al,rez2+1
shl al,4
shr al,4
cmp al,9
jnle m47
add al,30h
m420: mov rez3+3,al
jmp m50
m46: add al,37h
jmp m48
m47: add al,37h
jmp