При вводе имени файла пишет, что не может открыть файл. В чем ошибка? - Assembler

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

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

Сделал ехе(Из COM в EXE), убрал предупреждение, но почему-то exe при вводе имени файла пишет что не может открыть файл, что может быть не так, подскажите пожалуйста.
Листинг программы
  1. .model tiny
  2. .386
  3. .data
  4. mess0 DB 13,10,' READ FILE NAME......: $'
  5. mess1 DB 13,10,'<--OK! file size......: $'
  6. mess2 DB 13,10,10,' CRYPT MASK (byte)...: $'
  7. mess3 DB 13,10,'<--OPERATION COMPLETED!$'
  8. mess4 DB 13,10,'-----------------------------'
  9. DB 13,10,' CREATE "DATFILE.TXT" - OK!$'
  10. buff DB 1024 DUP(0) ; буфер для файла
  11. fName DB 16 DUP(0) ; имя файла формате 8.3)
  12. fSize DW 0
  13. key DB 0
  14. .code
  15. start:
  16. push cs
  17. pop ds
  18. SSEG segment stack
  19. db 400h dup (?)
  20. SSEG ends
  21. MOV DX,offset mess0
  22. CALL MESSAGE
  23. ;------------------- юзер вводит имя файла,
  24. ;------------------- а мы его сохраняем --------------------------//
  25. MOV DI,offset fName ; DI для STOSB...
  26. fileName: ;
  27. MOV AH,1 ;
  28. INT 21h ; читаем символ
  29. CMP AL,13 ; выход по ENTER
  30. JE next ;
  31. STOSB ; пишем символы в "ФайлНэйм"
  32. JMP fileName ;
  33. next: ;
  34. MOV AX,3D02h ; открыть файл! -----------------------//
  35. MOV DX,offset fName ;
  36. INT 21h ;
  37. JC error ; ошибка?
  38. XCHG AX,BX ; дескриптор файла в ВХ
  39. MOV AH,3Fh ; читать файл! ------------------------//
  40. MOV DX,offset buff ; куда,
  41. MOV CX,0FFFFh ; и сколько
  42. INT 21h ;
  43. JC error ;
  44. MOV [fSize],AX ; размер файла в переменной
  45. MOV AH,3Eh ; fucking file! -----------------------//
  46. INT 21h ;
  47. JC error ;
  48. MOV DX,offset mess1 ; покажем ОК! -------------------------//
  49. CALL MESSAGE ;
  50. MOV AX,[fSize] ; ..с размером файла
  51. MOV BX,10 ; в 10-тичной системе
  52. CALL HEX2ASC ;
  53. MOV DX,offset mess2 ; запрос на ввод ключа шифрования -----//
  54. CALL MESSAGE ;
  55. CALL ASC2HEX ;
  56. MOV [key],CL ; ключ в переменной
  57. MOV CX,[fSize] ; ..байтов для шифрования
  58. MOV SI,offset buff ; источник
  59. MOV BL,[key] ; ключ шифрования
  60. crypt: ;
  61. MOV AL,BYTE[SI] ; берём байт
  62. XOR AL,BL ; "ксорим" его ключом<------------------------------------------------XOR\SUB
  63. MOV BYTE[SI],AL ; и записываем обратно на место
  64. INC SI ; следующий байт..
  65. LOOP crypt ;
  66. MOV DX,offset mess3 ; мессага ОК!
  67. CALL MESSAGE ;
  68. CALL @@01 ; создаём новый файл ------------------//
  69. DB 'DATFILE.TXT',0 ;
  70. @@01: ;
  71. MOV AH,3Ch ;
  72. POP DX ; имя файла в DX
  73. MOV CX,20h ; атрибут - архивный
  74. INT 21h ;
  75. JC error
  76. XCHG BX,AX ; дескриптор файла в BX
  77. MOV AH,40h ; запись в файл -----------------------//
  78. MOV DX,offset buff ;
  79. MOV CX,[fSize] ; кол-во выводимым символов
  80. INT 21h ;
  81. JC error ;
  82. MOV AH,3Eh ; fucking file! -----------------------//
  83. INT 21h
  84. MOV DX,offset mess4 ; мессага "Создали Файл!"
  85. CALL MESSAGE ;
  86. JMP exit ;
  87. error: ; обработка ошибки --------------------//
  88. CALL @@@
  89. DB 13,10,7,'<--ERROR FILE OPERATION!$'
  90. @@@: ;
  91. POP DX ;
  92. CALL MESSAGE ;
  93. exit:
  94. XOR AX,AX ; выход!
  95. INT 16h ;
  96. mov ah,4Ch
  97. int 21h ;
  98. ;ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
  99. MESSAGE:
  100. MOV AH,9
  101. INT 21h
  102. RET
  103. ;//======= ФУНКЦИЯ ВЫВОДИТ НА ЭКРАН В РАЗЛИЧНЫХ СС ================|
  104. HEX2ASC:
  105. PUSHA ; перевод из HEX в ASCII и вывод на экран
  106. XOR CX,CX ; вход: BX = система счисления, AX = число
  107. isDiv: ; выход: на экране
  108. XOR DX,DX ;
  109. DIV BX ;
  110. PUSH DX ;
  111. INC CX ;
  112. OR AX,AX ;
  113. JNZ isDiv ;
  114. isOut: ;
  115. POP AX ;
  116. CMP AL,9 ;
  117. JLE noHex ;
  118. ADD AL,7 ; коррекция для HEX..
  119. noHex: ;
  120. ADD AL,30h ;
  121. INT 29h ; выводим символ на экран
  122. LOOP isOut ;
  123. POPA ;
  124. RET
  125. ;//========= ПРОЦЕДУРА СОХРАНЕНИЯ ВВОДА В HEX-ФОРМАТЕ =============|
  126. ASC2HEX:
  127. XOR CX,CX ; выход: CX = число
  128. @0: ;
  129. MOV AH,1 ; ввод с эхом
  130. INT 21h ;
  131. CMP AL,13 ; выход по ENTER
  132. JE stop ;
  133. SUB AL,30h ;
  134. CMP AL,9 ;
  135. JBE @2 ;
  136. SUB AL,11h ; значит HEX-буква. Отнимаем от неё фактор
  137. CMP AL,5 ; если заглавная буква, то остаток будет
  138. JBE @1 ; в пределах(5). Ниже/равно - коррекция!
  139. SUB AL,20h ; значит прописная буква. Коррекция..
  140. @1: ;
  141. ADD AL,10 ; коррекция букв "A..F", в "11..15"
  142. @2: ;
  143. SHL CX,4 ; сдвигаем мл.тетраду(CL), в старшую
  144. OR CL,AL ; в мл.тетраду(CL) запишем наше числ
  145. JMP @0 ;
  146. stop: ; результат в CX.
  147. RET
  148. end start
Исправил чуть, теперь файл открывает, шифрует, но не создает файл DATFILE.TXT
Листинг программы
  1. .model small
  2. .stack 100h
  3. .data
  4. mess0 DB 13,10,' READ FILE NAME......: $'
  5. mess1 DB 13,10,'<--OK! file size......: $'
  6. mess2 DB 13,10,10,' CRYPT MASK (byte)...: $'
  7. mess3 DB 13,10,'<--OPERATION COMPLETED!$'
  8. mess4 DB 13,10,'-----------------------------'
  9. DB 13,10,' CREATE "DATFILE.TXT" - OK!$'
  10. buff DB 1024 DUP(0) ; ????? ??? ?????
  11. fName DB 16 DUP(0) ; ??? ????? (? ??????? 8.3)
  12. fSize DW 0
  13. key DB 0
  14. .code
  15. start:
  16. MOV AX,@DATA
  17. MOV DS,AX
  18. mov es,ax
  19. ;SSEG segment stack
  20. ;db 400h dup (?)
  21. ;SSEG ends
  22. MOV DX,offset mess0
  23. CALL MESSAGE
  24. ;------------------- ???? ?????? ??? ?????,
  25. ;------------------- ? ?? ??? ????????? --------------------------//
  26. MOV DI,offset fName ; DI ??? STOSB...
  27. fileName: ;
  28. MOV AH,1 ;
  29. INT 21h ; ?????? ??????
  30. CMP AL,13 ; ????? ?? ENTER
  31. JE next ;
  32. STOSB ; ????? ??????? ? "????????"
  33. JMP fileName ;
  34. next: ;
  35. MOV AX,3D02h ; ??????? ????! -----------------------//
  36. MOV DX,offset fName ;
  37. INT 21h ;
  38. JC error ; ???????
  39. XCHG AX,BX ; ?????????? ????? ? ??
  40. MOV AH,3Fh ; ?????? ????! ------------------------//
  41. MOV DX,offset buff ; ????,
  42. MOV CX,0FFFFh ; ? ???????
  43. INT 21h ;
  44. JC error ;
  45. MOV [fSize],AX ; ?????? ????? ? ??????????
  46. MOV AH,3Eh ; fucking file! -----------------------//
  47. INT 21h ;
  48. JC error ;
  49. MOV DX,offset mess1 ; ??????? ??! -------------------------//
  50. CALL MESSAGE ;
  51. MOV AX,[fSize] ; ..? ???????? ?????
  52. MOV BX,10 ; ? 10-?????? ???????
  53. CALL HEX2ASC ;
  54. MOV DX,offset mess2 ; ?????? ?? ???? ????? ?????????? -----//
  55. CALL MESSAGE ;
  56. CALL ASC2HEX ;
  57. MOV [key],CL ; ???? ? ??????????
  58. MOV CX,[fSize] ; ..?????? ??? ??????????
  59. MOV SI,offset buff ; ????????
  60. MOV BL,[key] ; ???? ??????????
  61. crypt: ;
  62. MOV AL,BYTE[SI] ; ????? ????
  63. XOR AL,BL ; "??????" ??? ??????<------------------------------------------------XOR\SUB
  64. MOV BYTE[SI],AL ; ? ?????????? ??????? ?? ?????
  65. INC SI ; ????????? ????..
  66. LOOP crypt ;
  67. MOV DX,offset mess3 ; ??????? ??!
  68. CALL MESSAGE ;
  69. CALL @@01 ; ??????? ????? ???? ------------------//
  70. DB 'DATFILE.TXT',0 ;
  71. @@01: ;
  72. MOV AH,3Ch ;
  73. POP DX ; ??? ????? ? DX
  74. MOV CX,20h ; ??????? - ????????
  75. INT 21h ;
  76. JC error
  77. XCHG BX,AX ; ?????????? ????? ? BX
  78. MOV AH,40h ; ?????? ? ???? -----------------------//
  79. MOV DX,offset buff ;
  80. MOV CX,[fSize] ; ???-?? ????????? ????????
  81. INT 21h ;
  82. JC error ;
  83. MOV AH,3Eh ; fucking file! -----------------------//
  84. INT 21h
  85. MOV DX,offset mess4 ; ??????? "??????? ????!"
  86. CALL MESSAGE ;
  87. JMP exit ;
  88. error: ; ????????? ?????? --------------------//
  89. CALL @@@
  90. DB 13,10,7,'<--ERROR FILE OPERATION!$'
  91. @@@: ;
  92. POP DX ;
  93. CALL MESSAGE ;
  94. exit:
  95. XOR AX,AX ; ?????!
  96. INT 16h
  97. ;int 20h ;
  98. mov ah,4Ch
  99. int 21h ;
  100. ;???????????????????????????????????????????????????????????????????
  101. MESSAGE:
  102. MOV AH,9
  103. INT 21h
  104. RET
  105. ;//======= ??????? ??????? ?? ????? ? ????????? ?? ================|
  106. HEX2ASC:
  107. PUSHA ; ??????? ?? HEX ? ASCII ? ????? ?? ?????
  108. XOR CX,CX ; ????: BX = ??????? ?????????, AX = ?????
  109. isDiv: ; ?????: ?? ??????
  110. XOR DX,DX ;
  111. DIV BX ;
  112. PUSH DX ;
  113. INC CX ;
  114. OR AX,AX ;
  115. JNZ isDiv ;
  116. isOut: ;
  117. POP AX ;
  118. CMP AL,9 ;
  119. JLE noHex ;
  120. ADD AL,7 ; ????????? ??? HEX..
  121. noHex: ;
  122. ADD AL,30h ;
  123. mov ah,2
  124. mov dl,al
  125. int 21h
  126. ; ??????? ?????? ?? ?????
  127. LOOP isOut ;
  128. POPA ;
  129. RET
  130. ;//========= ????????? ?????????? ????? ? HEX-??????? =============|
  131. ASC2HEX:
  132. XOR CX,CX ; ?????: CX = ?????
  133. @0: ;
  134. MOV AH,1 ; ???? ? ????
  135. INT 21h ;
  136. CMP AL,13 ; ????? ?? ENTER
  137. JE stop ;
  138. SUB AL,30h ;
  139. CMP AL,9 ;
  140. JBE @2 ;
  141. SUB AL,11h ; ?????? HEX-?????. ???????? ?? ??? ??????
  142. CMP AL,5 ; ???? ????????? ?????, ?? ??????? ?????
  143. JBE @1 ; ? ????????(5). ????/????? - ?????????!
  144. SUB AL,20h ; ?????? ????????? ?????. ?????????..
  145. @1: ;
  146. ADD AL,10 ; ????????? ???? "A..F", ? "11..15"
  147. @2: ;
  148. SHL CX,4 ; ???????? ??.???????(CL), ? ???????
  149. OR CL,AL ; ? ??.???????(CL) ??????? ???? ????
  150. JMP @0 ;
  151. stop: ; ????????? ? CX.
  152. RET
  153. end start

Решение задачи: «При вводе имени файла пишет, что не может открыть файл. В чем ошибка?»

textual
Листинг программы
  1. MOV DX, offset namef

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


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

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

7   голосов , оценка 4 из 5

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

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

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