Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
7 / 7 / 4
Регистрация: 30.11.2015
Сообщений: 107

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

16.04.2016, 23:32. Показов 1034. Ответов 6
Метки нет (Все метки)

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

При использовании функции fgets () и вводе абсолютно правильного имени файла программа не может открыть файл
Прошу прощение за беспокойство и за глупый вопрос, но вoобщем проблема такая: Программа определяет существует ли в текущей директории...

При переименовании файла вылазит ошибка "после смены расширения имени файла этот файл может оказаться недоступным"
При переименовании файла вылазит ошибка &quot;после смены расширения имени файла этот файл может оказаться недоступным&quot; Как это...

Хочу переименовать документ Microsoft Office Word, а мне пишет "После смены расширения имени файла этот файл может оказаться недоступным" и меняет фай
Хочу переименовать документ Microsoft Office Word, а мне пишет &quot;После смены расширения имени файла этот файл может оказаться...

6
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
17.04.2016, 05:01
Цитата Сообщение от Dialkord228 Посмотреть сообщение
но не создает файл
..обработчик ошибки срабатывает?
Assembler
1
2
3
4
5
6
error:                     ; ????????? ?????? --------------------//
   CALL  @@@
   DB    13,10,7,'<--ERROR FILE OPERATION!$'
@@@:                        ;
   POP   DX                ;
   CALL  MESSAGE
0
7 / 7 / 4
Регистрация: 30.11.2015
Сообщений: 107
17.04.2016, 10:44  [ТС]
R71MT, обработчик ошибки срабатывает когда уже файл DATFILE.TXT должен создаться
Assembler
1
2
3
4
5
6
7
8
9
 CALL @@01
   DB    'DATFILE.TXT',0   ;
@@01:                        ;
   MOV   AH,3Ch            ;
   POP   DX                ; 
   MOV   CX,20h            ;
   INT   21h               ;
   JC    error <---------тут на ошибку перескакивает
   XCHG  BX,AX
Но оно даже не пишет error file operation , а просто ничего не происходит, а когда нажимаю клавишу любую сразу выходит.
0
7 / 7 / 4
Регистрация: 30.11.2015
Сообщений: 107
17.04.2016, 10:55  [ТС]
R71MT, Приложил скрин.
Миниатюры
При вводе имени файла пишет, что не может открыть файл. В чем ошибка?  
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
17.04.2016, 11:24
Dialkord228, если ошибку не обрабатывает, значит файл создаёт. Может из-за того что под эмулятором? Ну или попробуй прогнать код под отладчиком и отловить ошибку в нём
1
7 / 7 / 4
Регистрация: 30.11.2015
Сообщений: 107
17.04.2016, 11:58  [ТС]
R71MT, Я просмотрел флаги, думал может при JC CF=1 попытаться сбросить СF, вдруг баг какой-то, но потом почитал что при создании файла атрибут можно указать не
Assembler
1
MOV   CX,20h
, а
Assembler
1
MOV   CX,00100000b
.
Кроме этого я сделал не
Assembler
1
DB    'DATFILE.TXT',0
, а переменную
Assembler
1
MOV DX, offset namef
В итоге всё заработало. Спасибо за помощь!
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
17.04.2016, 13:29
Dialkord228, 00100000b = 20h поэтому роли тут не играет.
А вот на передачи адреса с именем файла, твой эмуль и заикается. Значит он не может обрабатывать данные в потоке кода, и приходиться переносить имя в секцию данных.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.04.2016, 13:29
Помогаю со студенческими работами здесь

Не могу открыть файл в виртуальном диске, при открытии файла пишет: не удается найти "F:\(файл).exe"
Здраствуйте отзывчивые и мудрые програмисты! Проблема у меня слудующая - немугу открыть файл в вирутальном диске, при открытии файла...

При запуске проги - требует nuvisio.ax -пишет системная ошибка-что это может быть?
Вин 7 максимальная х64 -все обновления последние скачал с интернета. установил программу которая работает с юсб камерой. запускаю...

Не удаётся удалить файл - Windows 10 пишет, что невозможно открыть файл INSTALL.LOG
Возникла проблема, что при попытке удалить файл игры в разделе Приложения и возможности Windows 10 выскакивает надпись, что невозможно...

При вводе русских букв пишет какие-то непонятные иероглифы, что делать?
Здравствуйте, начал работать со строками и при выводе мне пишет непонятные иероглифы, пример в скрине: вот, собственно код: #include...

Denwer пишет что типа не может найти файл
раньше всё норма было счас како-то .......... Denwer пишет что типа не может найти этот файл: !# usr/bin/php &lt;html&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru