Почему программа не имеет доступ к файлам? - Assembler

Узнай цену своей работы

Формулировка задачи:

файл kyrsova.asm
Листинг программы
  1. .model small
  2. .stack 100h
  3. .data
  4. .code
  5. start:
  6. mov ax,@data
  7. mov ds,ax
  8. get_action: ; Вибір команди меню
  9. mov di,0
  10. mov bool_empty,0
  11. mov del_done,0
  12. mov action,0
  13. call print_menu ; Вивід меню
  14. mov ah,00
  15. int 16h
  16. cmp ah,1 ; ESC - завершує роботу програми
  17. je quit
  18. cmp al,31h ; 1 - Перегляд вмісту файлу
  19. je action1
  20. cmp al,32h ; 2 - Додавання даних до файлу
  21. je action2
  22. cmp al,33h ; 3 - Редагування даних в файлі
  23. je action3
  24. cmp al,34h ; 4 - Видалення даних з файлу
  25. je action4
  26. jmp get_action
  27. QUIT:
  28. mov ah,4ch
  29. int 21h
  30. ACTION1:
  31. call view_data
  32. mov ah,3Eh
  33. mov bx, handle
  34. int 21h
  35. mov action,1
  36. jmp get_action
  37. ACTION2:
  38. call add_data
  39. mov ah,3Eh
  40. mov bx, handle
  41. int 21h
  42. mov action,2
  43. jmp get_action
  44. ACTION3:
  45. call edit_data
  46. mov ah,3Eh
  47. mov bx, handle1
  48. int 21h
  49. mov ah,3Eh
  50. mov bx, handle2
  51. int 21h
  52. MOV AH,41H ; видаляєм файл "katalog.txt"
  53. LEA DX,filename
  54. INT 21H
  55. LEA DX,filename1
  56. MOV AX,@data
  57. MOV ES,AX ; і перейменовуємо "katalog1.txt" в "katalog.txt"
  58. Lea DI,filename
  59. MOV AH,56H
  60. INT 21H
  61. jmp get_action
  62. ACTION4:
  63. mov action,4
  64. jmp action3
  65. include main.txt
  66. end start
то что есть в файле katalog.txt сейчас Computer Intel 5 5000 Computer AMD 7 4500 65656 565 55 6 Notebook HP 7 5300 Monitor Philips 3 1300 Monitor Samsung 5 1700 Mouse Genius 13 100 Mouse A4Tech 20 250 Keyboard Genius 15 140 FlashDrive Kingston 16GB 9 400
содержание файла main.txt ( на сайт добавлю как вставку asm что б было более читабельно
Листинг программы
  1. .model small
  2. .stack 100h
  3. .data
  4. ; Структура комп. магазину
  5. nazv_prod db 30 dup(?) ; Назва товару
  6. firma_prod db 30 dup (?) ; Фірма виробника
  7. kilk_st db 10 dup(?) ; Кількість товару
  8. tsina_za_sh db 10 dup(?) ; Ціна за штуку
  9. ; Повідомлення для утворення меню
  10. line1 db 201,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,187,'$'
  11. line2 db 200,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,188,'$'
  12. case db 186,' Bu',161,'epi',226,236,255,164,'i',238,': ',186,'$'
  13. cs1 db 186,' 1 - ',143,'epe',163,171,239,173,'y',226,'u ',226,'o',162,'apu',255,172,'a',163,'a',167,'u',173,'y. ',186,'$'
  14. cs2 db 186,' 2 - ',132,174,164,'a',226,'u',255,226,'o',162,'ap',255,164,174,255,'c',175,'ucky. ',186,'$'
  15. cs3 db 186,' 3 - Pe',164,'a',163,'y',162,'a',226,'u',255,162,'i',164,'o',172,'oc',226,'i',255,175,'po',255,226,'o',162,'ap. ',186,'$'
  16. cs4 db 186,' 4 - Bu',164,'a',171,'u',226,'u',255,226,'o',162,'ap',255,167,'i',255,'c',175,'ucky. ',186,'$'
  17. csquit db 186,' ESC - Buxi',164,'. ',186,'$'
  18. cscont db 132,171,239,255,175,'po',164,'o',162,166,'e',173,173,239,255,173,'a',226,'uc',173,'i',226,236,255,161,'y',164,236,'-',239,'ky',255,'k',171,'a',162,'i',232,'y.','$'
  19. ; Повідомлення і змінні для роботи з файлом
  20. FileName db "Katalog.txt",0
  21. FileName1 db "Katalog1.txt",0
  22. handle dw ?
  23. handle1 dw ?
  24. handle2 dw ?
  25. error1 db 'File not found',10,13,'$'
  26. error2 db 'Illegal consisting of file',10,13,'$'
  27. error3 db 'File is empty',10,13,'$'
  28. error4 db 'Cannot create file',10,13,'$'
  29. tmp db ?
  30. buffer db 30 dup(?)
  31. lline dw (?)
  32. ; Повідомлення для виведення даних про товар
  33. msg1 db 141,160,167,162,160,255,226,174,162,160,224,227,': ','$'
  34. msg2 db 148,105,224,172,160,255,162,168,224,174,161,173,168,170,160,': ','$'
  35. msg3 db 138,105,171,236,170,105,225,226,236,255,226,174,162,160,224,227,': ','$'
  36. msg4 db 150,105,173,160,255,226,174,162,160,224,227,': ','$'
  37. msg5 db '______________________________________________________________________','$'
  38. ; Повідомлення для додавання даних в файл
  39. str1 db 130,162,165,164,105,226,236,255,173,160,167,162,227,255,226,174,162,160,224,227,': ','$'
  40. str2 db 130,162,165,164,105,226,236,255,228,105,224,172,227,255,162,168,224,174,161,173,168,170,160,': ','$'
  41. str3 db 130,162,165,164,105,226,236,255,170,105,171,236,170,105,225,226,236,255,226,174,162,160,224,227,': ','$'
  42. str4 db 130,162,165,164,105,226,236,255,230,105,173,227,255,226,174,162,160,224,227,': ','$'
  43. num_of_key db 4 dup (?)
  44. bool_empty db ?
  45. action db ?
  46. ; Повідомлення для видалення та редагування даних в файлі
  47. ind db 130,162,165,164,105,226,236,255,105,173,164,165,170,225,': ','$'
  48. uncorind db 141,165,175,224,160,162,168,171,236,173,168,169,255,105,173,164,165,170,225,10,13,'$'
  49. index db ?
  50. index_now db ?
  51. str_add_done db 132,160,173,105,255,161,227,171,168,255,164,174,164,160,173,105,255,164,174,255,228,160,169,171,227,46,10,13,'$'
  52. str_edit_done db 132,160,173,105,255,227,255,228,160,169,171,105,255,161,227,171,168,255,162,105,164,224,165,164,160,163,174,162,160,173,105,46,10,13,'$'
  53. str_del_done db 132,160,173,105,255,161,227,171,168,255,162,168,164,160,171,165,173,105,255,167,255,228,160,169,171,227,46,10,13,'$'
  54. del_done dw ?
  55.  
  56. .code
  57. print_line proc
  58. mov ah,09h
  59. mov dx,lline ; виводить рядок
  60. int 21h ; який знаходить за адресою lline
  61. mov ah,02h ; і переносить каретку на наступний рядок
  62. mov dl,10
  63. int 21h
  64. mov ah,02h
  65. mov dl,13
  66. int 21h
  67. ret
  68. print_line endp
  69.  
  70. print_menu proc ; Виведення меню
  71. lea dx,line1
  72. mov lline,dx
  73. call print_line
  74. lea dx,case
  75. mov lline,dx ; Змінна lline використ. в ролі параметра
  76. call print_line ; процедури print_line
  77. lea dx,cs1
  78. mov lline,dx
  79. call print_line
  80. lea dx,cs2
  81. mov lline,dx
  82. call print_line
  83. lea dx,cs3
  84. mov lline,dx
  85. call print_line
  86. lea dx,cs4
  87. mov lline,dx
  88. call print_line
  89. lea dx,csquit
  90. mov lline,dx
  91. call print_line
  92. lea dx,line2
  93. mov lline,dx
  94. call print_line
  95. mov ah,02h
  96. mov dl,10
  97. int 21h
  98. mov ah,02h
  99. mov dl,13
  100. int 21h
  101. ret
  102. print_menu endp

Решение задачи: «Почему программа не имеет доступ к файлам?»

textual
Листинг программы
  1. view_data proc
  2. ; відкриваємо файл для читання
  3.     mov   ax,716ch               <---------------------------- а функция открытия на чтение 3Dh
  4.     mov   bx,0                       ; Тільки  читання
  5.     mov   cx,0                       ; Звичайний  файл
  6.     mov   dx,1                       ; Відкрити існуючий файл
  7.     lea   si,Filename
  8.     int   21h
  9.     jc    failed_open
  10.     mov   handle,ax                  ; Дескриптор  файлу
  11.     mov bool_empty,1

Объяснение кода листинга программы

  1. Устанавливается функция открытия файла для чтения:
    • Имя переменной: ax
    • Значение переменной: 716ch
  2. Устанавливается режим доступа к файлу (только чтение):
    • Имя переменной: bx
    • Значение переменной: 0
  3. Устанавливается тип файла (звичайный файл):
    • Имя переменной: cx
    • Значение переменной: 0
  4. Устанавливается флаг открытия существующего файла:
    • Имя переменной: dx
    • Значение переменной: 1
  5. Устанавливается адрес имени файла в регистре SI:
    • Имя переменной: si
    • Значение переменной: Filename
  6. Вызывается прерывание 21h (сервис 3Dh) для открытия файла:
    • Успешное открытие файла - JC (Jump if Carry) не происходит
    • Имя переменной: handle - Дескриптор файла
    • Имя переменной: bool_empty - Флаг пустого файла (устанавливается в 1, что может означать успешное открытие файла с данными)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы