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

8 вариант супер исправленный код

.txt
Скачиваний:
6
Добавлен:
05.09.2020
Размер:
4.6 Кб
Скачать
text segment 'code'

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] ;передача по адресу msg_size в 20 столбце
;mov AX, word ptr _size ;получаем младшее слово _size
;-----------------------------------
lea dx, EndProgram
mov ax, dx
lea dx, main
sub ax, dx
;-----------------------------------

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
; перевод размера программы в символьный вид : конец

; устанавливаем позицию курсора для приглашения ввести новую метку
mov AH, 02 ;Запрос на установку курсора
mov BH, 00 ;Экран 0
mov DH, 06 ;Строка 06
mov DL, 00 ;Столбец 00
int 10h ;Передача управления в BIOS
; выводим приглашение ввести новую метку
lea DX, msg_lb

; вывод сообщения
push AX
mov AH, 09h
int 21h
pop AX


; считываем новую метку тома дискеты с клавиатуры
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 ;очищаем регистр CX
mov CL, byte ptr sLabel[2] ;извлекаем число введенных символов в CL
add CL, 3 ; добавляем 3 (для C:\)
mov DI, CX ;копируем CX в DI
; дописывам префикс к метке тома, указав диск A:
mov [sLabel+0], byte ptr 'C'
mov [sLabel+1], byte ptr ':'
mov [sLabel+2], byte '\'
mov [sLabel+DI], 00 ;завершаем строку метки символом 0
; устанавливаем позицию курсора для вывода сообщения о результате
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 ;вызываем функцию DOS создния файла
jc L_ERR
; выводим сообщение об успешной смене метки тома
lea DX, msg_ok

; вывод сообщения
push AX
mov AH, 09h
int 21h
pop AX




L_EXIT:
; устанавливаем позицию курсора для вывода размера программы
mov AH, 02
mov BH, 00
mov DH, 10
mov DL, 00
int 10h

; выводим размер программы
mov ah,09
lea DX, msg_size
int 21h

; функция ожидания нажатия клавиши
mov AH, 08h
int 21h
; выход из программы в DOS
mov AX, 4C00h
int 21h

L_ERR: ; обработка ошибочной ситуации
mov ah,09
lea DX, msg_err
int 21h

jmp L_EXIT

; Поля данных
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 gruppi IVT-314",0ah,0dh,'$'
msg_lb4 db "Drozdov N.D. ",0ah,0dh,'$'
msg_lb5 db "Variant 8:",0ah,0dh,'$'
msg_ok db "Metka diska C izmenena.","$"
msg_err db "Oshibka! Metka ne smenena!","$"
sLabel db 16 dup (00h)

text ends
;-----------------
EndProgram:
end main
Соседние файлы в предмете Системное программное обеспечение