Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- text segment 'code'
- cr=10
- lf=13
- assume CS:text, DS:text
- org 100h
- main:
- ; очистка экрана : начало
- mov AX, 0600h ; AH=06 (прокрутка)
- ; AL=00 (весь экран)
- mov BH, 07 ;Нормальный атрибут (черно/белый)
- mov CX, 0000h ;Верхняя левая позиция
- mov DX, 184fh ;Нижняя правая позиция
- int 10h ;Передача управления в BIOS
- ; очистка экрана : конец
- mov ah,09
- lea dx,msg_lb1
- int 21h
- mov ah,09
- lea dx,msg_lb2
- int 21h
- mov ah,09
- lea dx,msg_lb3
- int 21h
- mov ah,09
- lea dx,msg_lb4
- int 21h
- mov ah,09
- lea dx,msg_lb5
- int 21h
- ; перевод размера программы в символьный вид: начало
- lea DI, msg_size[20]
- mov AX, word ptr _size
- call GET_CHAR
- ; перевод размера программы в символьный вид : конец
- ; устанавливаем позицию курсора для вывода ФИО и группы
- mov AH, 02 ;Запрос на установку курсора
- mov BH, 00 ;Экран 0
- mov DH, 01 ;Строка 01
- mov DL, 00 ;Столбец 00
- int 10h ;Передача управления в BIOS
- ; выводим ФИО и группу
- lea DX, m1
- call PRINT
- ; устанавливаем позицию курсора для приглашения ввести новую метку
- mov AH, 02 ;Запрос на установку курсора
- mov BH, 00 ;Экран 0
- mov DH, 06 ;Строка 06
- mov DL, 00 ;Столбец 00
- int 10h ;Передача управления в BIOS
- ; выводим приглашение ввести новую метку
- lea DX, msg_lb
- call PRINT
- ; считываем новую метку тома дискеты с клавиатуры
- lea DX, sLabel+1 ;Загрузка адреса сообщ.
- mov BX, DX ;копируем смещение в рег. BX
- mov AL, 12 ;заносим в AX
- mov [BX], AL ;пересылать содержимое регистра AL по адресу, лежащему в регистре DX
- mov AH, 0Ah
- int 21h
- ; сохраняем количество реально введённых символов
- xor CX, CX ;делим на 10
- mov CL, byte ptr sLabel[2]
- add CL, 3
- mov DI, CX
- ; дописывам префикс к метке тома, указав диск A:
- mov [sLabel+0], byte ptr 'C'
- mov [sLabel+1], byte ptr ':'
- mov [sLabel+2], byte ptr '\'
- mov [sLabel+DI], 00
- ; устанавливаем позицию курсора для вывода сообщения о результате
- mov AH, 02 ;Запрос на установку курсора
- mov BH, 00 ;Экран 0
- mov DH, 08 ;Строка 08
- mov DL, 00 ;Столбец 00
- int 10h ;Передача управления в BIOS
- ; метка тома создаётся функцией создания файла
- mov AH, 3ch ;АН = 3Ch (номер функции DOS)
- mov CX, 08
- lea DX, [sLabel]
- int 21h
- jc L_ERR
- ; выводим сообщение об успешной смене метки тома
- lea DX, msg_ok
- call PRINT
- L_EXIT:
- ; устанавливаем позицию курсора для вывода размера программы
- mov AH, 02
- mov BH, 00
- mov DH, 10
- mov DL, 00
- int 10h
- ; выводим размер программы
- lea DX, msg_size
- call PRINT
- ; функция ожидания нажатия клавиши
- mov AH, 08h
- int 21h
- ; выход из программы в DOS
- mov AX, 4C00h
- int 21h
- L_ERR: ; обработка ошибочной ситуации
- lea DX, msg_err
- call PRINT
- jmp L_EXIT
- PRINT proc ; вывод сообщения
- push AX
- mov AH, 09h
- int 21h
- pop AX
- ret
- PRINT endp
- ; функция перевода числового значения в строковой тип
- GET_CHAR proc
- mov CX,0010
- СA:
- cmp AX,0010
- jb CB
- xor DX,DX
- div CX
- or DL,30H
- mov [DI],DL
- dec DI
- jmp СA
- CB:
- or AL,30H
- mov [DI],AL
- ret
- GET_CHAR endp
- ; Поля данных
- m1 db "",'$'
- msg_size db "Razmer programmy: $"
- msg_lb db "Vvedite novuyu metku: $"
- msg_lb1 db "Raschetno-graficheskaya rabota",0ah,0dh,'$'
- msg_lb2 db "Po discipline Sistemnoe programmnoe obespechenie",0ah,0dh,'$'
- msg_lb3 db "Vipolnil: Student",0ah,0dh,'$'
- msg_lb4 db "FIO",0ah,0dh,'$'
- msg_lb5 db "Variant:",0ah,0dh,'$'
- msg_ok db "Metka diska C izmenena.",cr,lf,"$"
- msg_err db "Oshibka! Metka ne smenena!",cr,lf,"$"
- sLabel db 16 dup (00h)
- ; вычисляем размер программы
- _size = $-main
- text ends
- end main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement