Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

spo 17 varik kod

.txt
Скачиваний:
8
Добавлен:
05.09.2020
Размер:
5.72 Кб
Скачать
.model tiny ; определяет модель памяти для конкретного типа файлов
.data ; начало сегмента данных программы
.code ; Директива начинает сегмент кода
org 100h

begin:
main proc

; настраивается сегментный регистр ; установка регистра DS на сегмент данных

mov ah,09h ; вывод текстовой информации
mov dx,offset String0 ; помещение в dx смещения строки String0
int 21h
mov dx,offset String1
int 21h
mov dx,offset String2
int 21h
mov dx,offset String3
int 21h
mov dx,offset String4
int 21h

; преобразование размера программы в строку
lea DI, str_size[20] ; указываем вывод размера программы в 20 столбец строки str_size
mov AX, size_prog ; присваиваем AX размер программы
call schet ; переход к процедуре счет

; выводим на экран сообщение о размере программы
mov AH, 09h
lea DX, str_size ; в DX заносим смещение адреса выводимой строки str_size ; функция вывода на экран
int 21h ; вызов DOS

;выводим последнюю строку
mov dx,offset String6
int 21h

mov ah,08h ; Функция задержки до нажатия клавиши
int 21h

;очистка экрана
open:
mov ax,3d00h ; открываем FILE.txt
mov dx, OFFSET OLDDIRR ; считываем название файла
int 21h
jc er ; если ошибка, переход на метку er
mov handle, ax ; запоминаем идентификатор файла


mov ah, 42h ; функция установки указателя
mov al, 0 ; смещение с начала файла
mov bx, handle ; номер файла
; ((CX*65535)+DX – смещение указателя)
mov cx, 0 ; старший байт смещения = 0
mov dx, SMESHENIE ; установка новой позиции файла
int 21h ; устанавливаем указатель

mov si, SMESHENIE ; присваиваем si значение смещения
inc si ; увеличение на единицу
mov SMESHENIE, si ; присваивание смещению значения si

cmp SMESHENIE, 25 ; сравниваем смещение до 25 символа
je zaderjka ; если да, то переход на метку zaderjka

mov bx,handle ; дескриптор файла в ВХ
mov ah,3fh ; функция чтения файла
mov cx,1h ; сколько читать-1 символ
mov dx,OFFSET Buffer ; заносим в буфер
int 21h
jc er ; если ошибка, переход на метку er

;закрытие файла
mov ah, 3Eh
int 21h

check1: ; диапазон от "A" и "a"
mov al, buffer ; присваивание al значение буффера
cmp al,40h ; сравнение символа с "@" (40h)
jg check2 ;если первый операнд, больше, чем @ (40h), то переход на check2
cmp al,60h ; сравнение символа с " ' " (60h)
jg check2 ; если первый операнд, больше, чем a (61h), то переход на check2
jne set ; переход на метку set

Check2: ;диапазон до "Z" и "z"
cmp al,5bh ; сравнение символа с "[" (5bh)
jl set_bl ; если первый операнд, меньше, чем "[" (5bh), то переход на set_bl
cmp al,7bh ; сравнение символа с "{" (7bh)
jl set_bl ; если первый операнд, меньше, чем "{" (7bh), то переход на set_bl
jne set ; переход на метку set

set: ; Вывод символов без атрибутов
mov ah,09h ; Функция вывода на экран
mov bh,00h ; Страница 0
mov bl,07H ; белый по черному (0000 0111)
mov cx,01h ; 1 повторение
int 10h

jmp sdvig ; переход на метку sdvig

set_bl: ; Вывод c атрибутами
mov ah,09h ; Функция вывода на экран
mov bh,00h ; Страница 0
mov bl,20H ; черный по зеленому (0010 0000)
mov cx,01h ; 1 повторение
int 10h

jmp sdvig ; переход на метку sdvig

sdvig: ; Сдвиг курсора
MOV AH,03 ; Определить положение курсора
MOV BH,00 ; Установить страницу 0
int 10h
inc dl ; Сдвинуть курсор на позицию вправо

mov AH,02 ; Установить положение курсора
mov BH,00 ; Страница 0
int 10h

jmp open ; переход на метку open

er:
mov ah, 9 ; и выводим сообщение на экран
lea dx, ermes ; вывод сообщения ermes
int 21h

jmp exit ; переход на метку exit

zaderjka:
mov ah,08 ; консольный ввод без эха
int 21h

exit:
mov ah,4ch ; выход
int 21h

main endp

SCHET proc ; функция перевода числового значения в строковой тип
mov CX,0010 ; десятичная система

AA:
cmp AX,0010 ; значение меньше 10?
jb CB ; если AX меньше 10, то переход к метке CB
xor DX,DX ; обнуление dx
div CX ; деление на 10
add DL,30H ; преобразование в ASCII-символ
; код чисел начинается с 30h, то есть 30h – 0
mov [DI],DL ; запись символа в строку
dec DI ; Уменьшение на единицу
jmp AA ; переход к метке AA

CB:
add AL,30H ; преобразование в ASCII-символ
mov [DI],AL ; запись символа в строку
ret ; возврат из процедуры
SCHET endp

db cr,lf, '$' ; адрес конца программы
size_prog = $-main ; вычисление размера программы
ret
OLDDIRR db 'FILE11.txt',0 ; записываем в OLDDIR название файла, который хотим открыть и ставим ограничитель 0, обозначающий конец строки.

Buffer DB 14h DUP(?) ; буфер на 20 символов

;Функции для ввода сообщения с новой строки
cr equ 0dh ; возврат каретки
lf equ 0ah ; подача строки
; псевдооператор equ необходим для присваивания текстовой строки

String0 db cr,lf,'Raschetno-graficheskaya rabota','$'
String1 db cr,lf,'Po discipline Sistemnoe programmnoe obespechenie','$'
String2 db cr,lf,'Vipolnil: Student gruppi IVT-314','$'
String3 db cr,lf,'Rahmatullin A.A. ','$'
String4 db cr,lf,'Variant: 17',0ah,0dh,'$'
str_size db 'Razmer programmy: bait.','$'
String6 db cr,lf,'Press any key to start programm...',0ah,0dh,'$'
ermes db 'Oshibka otkritiya faila!','$'
art db 15

handle dw ? ; переменная для запоминания идентификатора файла
SMESHENIE dw 0 ; переменная для запоминания смещения

end begin