Advertisement
pepyachka

Metka toma diska

Jun 19th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.69 KB | None | 0 0
  1. text segment 'code'
  2.  
  3. cr=10
  4. lf=13
  5.  
  6. assume CS:text, DS:text
  7. org 100h
  8.  
  9. main:
  10. ; очистка экрана : начало
  11. mov AX, 0600h ; AH=06 (прокрутка)
  12. ; AL=00 (весь экран)
  13. mov BH, 07 ;Нормальный атрибут (черно/белый)
  14. mov CX, 0000h ;Верхняя левая позиция
  15. mov DX, 184fh ;Нижняя правая позиция
  16. int 10h ;Передача управления в BIOS
  17. ; очистка экрана : конец
  18.  
  19. mov ah,09
  20. lea dx,msg_lb1
  21. int 21h
  22.  
  23. mov ah,09
  24. lea dx,msg_lb2
  25. int 21h
  26.  
  27. mov ah,09
  28. lea dx,msg_lb3
  29. int 21h
  30.  
  31. mov ah,09
  32. lea dx,msg_lb4
  33. int 21h
  34.  
  35. mov ah,09
  36. lea dx,msg_lb5
  37. int 21h
  38.  
  39. ; перевод размера программы в символьный вид: начало
  40. lea DI, msg_size[20]
  41. mov AX, word ptr _size
  42. call GET_CHAR
  43. ; перевод размера программы в символьный вид : конец
  44. ; устанавливаем позицию курсора для вывода ФИО и группы
  45. mov AH, 02 ;Запрос на установку курсора
  46. mov BH, 00 ;Экран 0
  47. mov DH, 01 ;Строка 01
  48. mov DL, 00 ;Столбец 00
  49. int 10h ;Передача управления в BIOS
  50. ; выводим ФИО и группу
  51. lea DX, m1
  52. call PRINT
  53. ; устанавливаем позицию курсора для приглашения ввести новую метку
  54. mov AH, 02 ;Запрос на установку курсора
  55. mov BH, 00 ;Экран 0
  56. mov DH, 06 ;Строка 06
  57. mov DL, 00 ;Столбец 00
  58. int 10h ;Передача управления в BIOS
  59. ; выводим приглашение ввести новую метку
  60. lea DX, msg_lb
  61. call PRINT
  62. ; считываем новую метку тома дискеты с клавиатуры
  63. lea DX, sLabel+1 ;Загрузка адреса сообщ.
  64. mov BX, DX ;копируем смещение в рег. BX
  65. mov AL, 12 ;заносим в AX
  66. mov [BX], AL ;пересылать содержимое регистра AL по адресу, лежащему в регистре DX
  67. mov AH, 0Ah
  68. int 21h
  69. ; сохраняем количество реально введённых символов
  70. xor CX, CX ;делим на 10
  71. mov CL, byte ptr sLabel[2]
  72. add CL, 3
  73. mov DI, CX
  74. ; дописывам префикс к метке тома, указав диск A:
  75. mov [sLabel+0], byte ptr 'C'
  76. mov [sLabel+1], byte ptr ':'
  77. mov [sLabel+2], byte ptr '\'
  78. mov [sLabel+DI], 00
  79. ; устанавливаем позицию курсора для вывода сообщения о результате
  80. mov AH, 02 ;Запрос на установку курсора
  81. mov BH, 00 ;Экран 0
  82. mov DH, 08 ;Строка 08
  83. mov DL, 00 ;Столбец 00
  84. int 10h ;Передача управления в BIOS
  85. ; метка тома создаётся функцией создания файла
  86. mov AH, 3ch ;АН = 3Ch (номер функции DOS)
  87. mov CX, 08
  88. lea DX, [sLabel]
  89. int 21h
  90. jc L_ERR
  91. ; выводим сообщение об успешной смене метки тома
  92. lea DX, msg_ok
  93. call PRINT
  94.  
  95. L_EXIT:
  96. ; устанавливаем позицию курсора для вывода размера программы
  97. mov AH, 02
  98. mov BH, 00
  99. mov DH, 10
  100. mov DL, 00
  101. int 10h
  102.  
  103. ; выводим размер программы
  104. lea DX, msg_size
  105. call PRINT
  106.  
  107. ; функция ожидания нажатия клавиши
  108. mov AH, 08h
  109. int 21h
  110. ; выход из программы в DOS
  111. mov AX, 4C00h
  112. int 21h
  113.  
  114. L_ERR: ; обработка ошибочной ситуации
  115. lea DX, msg_err
  116. call PRINT
  117. jmp L_EXIT
  118.  
  119. PRINT proc ; вывод сообщения
  120. push AX
  121. mov AH, 09h
  122. int 21h
  123. pop AX
  124. ret
  125. PRINT endp
  126.  
  127. ; функция перевода числового значения в строковой тип
  128. GET_CHAR proc
  129. mov CX,0010
  130. СA:
  131. cmp AX,0010
  132. jb CB
  133. xor DX,DX
  134. div CX
  135. or DL,30H
  136. mov [DI],DL
  137. dec DI
  138. jmp СA
  139. CB:
  140. or AL,30H
  141. mov [DI],AL
  142. ret
  143. GET_CHAR endp
  144.  
  145. ; Поля данных
  146. m1 db "",'$'
  147. msg_size db "Razmer programmy: $"
  148.  
  149. msg_lb db "Vvedite novuyu metku: $"
  150. msg_lb1 db "Raschetno-graficheskaya rabota",0ah,0dh,'$'
  151. msg_lb2 db "Po discipline Sistemnoe programmnoe obespechenie",0ah,0dh,'$'
  152. msg_lb3 db "Vipolnil: Student",0ah,0dh,'$'
  153. msg_lb4 db "FIO",0ah,0dh,'$'
  154. msg_lb5 db "Variant:",0ah,0dh,'$'
  155. msg_ok db "Metka diska C izmenena.",cr,lf,"$"
  156. msg_err db "Oshibka! Metka ne smenena!",cr,lf,"$"
  157. sLabel db 16 dup (00h)
  158.  
  159. ; вычисляем размер программы
  160. _size = $-main
  161. text ends
  162. end main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement