Текст программы
.model tiny ;com файл
.code ; сегмент
org 100h ; начальный счетчик
begin:
main proc
mov ah,9 ;Функция вывода на экран
lea dx,string4 ;Выводимая строка
int 21h ;Вызов DOS
mov ah,9 ;Функция вывода на экран
lea dx,string5 ;Выводимая строка
int 21h ;Вызов DOS
mov ah,9 ;Функция вывода на экран
lea dx,string7 ;Выводимая строка
int 21h ;Вызов DOS
mov ah,9 ;Функция вывода на экран
lea dx,string6 ;Выводимая строка
int 21h ;Вызов DOS
MOV AX, (LAST-BEGIN) ;память программы
mov dx,10 ; 10 в регистр dx
xor cx,cx ;установка регистра сх на 0
sh1: xor bx,bx ;установка регистра bx на 0
sh2: cmp ax,dx ;переход если ax меньше 10 переход
jb sh3 ; переход в sh3
inc bx ; целая часть
sub ax,dx ;вычесть ах из dx
jmp sh2 ;переход на sh2
sh3: add ax,48 ; переводим в число от 0 до 9
push ax ;помещение содержимого ах в начало стека
inc cx ;кол - во цифр
xchg ax,bx ;поменять местами
or ax,ax ;равниваем AX с 0
jne sh1 ;если не равно 0 переход на sh1 (флаг ZF)
sh4: pop dx ;извлечение в dx
mov ah,02h ;вывод
int 21h
loop sh4 ;пока сх не равно
mov ah,9 ;Функция вывода на экран
lea dx,string2 ;Выводимая строка
int 21h ;Вызов DOS
mov ah,0Ah ;ввод строки в буфер
mov dx,offset Max_Length ;Заносим в dx адрес max_length
int 21h ;Прерывание DOS
xor cx,cx ;обнуляем сх
mov cl,[Max_Length+1] ;В cl заносим реальную длину слова
push cx ; сохраняем в стеке
mov bx,cx ;Заносим значение CX в BX
mov [string1+bx],'$'; добавляем конец строки
mov si,offset string1 ;Заносим значение si адрес string1
mov di,si ;Заносим si в di
B2: ;Метка B2
lodsb ;Загружаем символ из DS: (E)Si
cmp al,'a' ;Сравниваем значение регистра al с ASCII кодом "a"
jb B3 ;Если меньше
cmp al,'z' ;Сравниваем значение регистра al с ASCII кодом "z"
ja B3 ;Если больше
and al,11011111b ;Инвертирование регистра буквы 11011111
B3: ;Метка B3
stosb ;Переписываем содержимое AL в ES: (E)DI
loop B2 ;Повтор B2
mov ah,9 ;Функция вывода на экран
lea dx,string3 ;Выводимая строка
int 21h ;Вызов DOS
mov ah,9 ;Функция вывода на экран
lea dx,string1 ;Выводимая строка
int 21h ;Вызов DOS
mov ah,3Ch ;Создать файл
mov dx,offset filename ;Имя файла
int 21h
mov descr,ax ;дискриптор
mov ah,3Dh ;Открыть файл
mov al,2
mov dx, offset filename ;имя файла
int 21h
mov descr,ax
pop cx
mov ah,40h ;Запись в файл
mov bx,descr ;дискриптор файла
mov cx,cx ;размер строки
lea dx,string1
int 21h
mov ah,3Eh ;Закрыть файл
mov bx,descr
int 21h
mov ah,08 ;Ожидание нажатия клавиши
int 21h ;Вызов BIOS
mov ah,0h ;Выход из программы
int 21h
main endp
filename db 'file12.txt',0
Max_Length db 255,0;Max Length string
string1 db 255
string2 db 0ah,0dh,0ah,0dh,"Vvedite stroku"
string3 db 0ah,0dh,"$"
string4 db "Karimov R.I.",0ah,0dh,'$'
string5 db "IVT - 314",0ah,0dh,'$'
string6 db "Size in bite ",'$'
string7 db "RGR on a discipline: System software, edition 10",0ah,0dh,'$'
descr dw 1
LAST=$ ;Переменной LAST присваиваем адрес конца программы
end begin
Результат работы программы:
Вывод:
В ходе выполнения данной расчётно-графической работы по дисциплине «Системное программное обеспечение» были усвоены навыки создания прикладных программ на основе низкоуровневых системных функций BIOS и MS DOS.