Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ПРоблема с открытием файла 
V
    Опции темы
DarkProg
  Дата 25.6.2010, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: нет
Всего: 19



Извиняйтесь, но что-то поиск не помогает, нашел темы с подобной проблемой, побробовал и ничего :(

Собсвенно пытаюсь открыть файл Rab1.txt который хранится в каталоге с проектом но не открывает смотрел дебагером получил ax=0002 ну и собственно CF=1, т.е. вроде как файл не видет(если по какой-то причине файл не открывается или иная ошибка выводится сообщение что типа символ Z не найден, по заданию надо найти Z и сответственно выводить сообщение, только у меня сообщения абракодаброй, но понятно когда что выводится smile)

Задание как ни странно списал из методички препода и ничего не получается(не удивляйтесь у меня ещё нет сессии - это долгая история, поэтому ещё сдаю лабы)

Собсвенно код
Код

stk segment para stack 'stack'
    db 100h dup (?)
stk ends
data segment
  msg1 db "Символ 'Z' обнаружен.$"
  msg2 db "Символ 'Z' не обнаружен.$"
  filenm db 'Rab1.txt',0
buff db ?
data ends
cods segment
     assume cs:cods, ds :data, ss:stk
start:
   mov ax, data
   mov ds, ax
   mov dx, offset filenm
   mov ax, 3D00h
   int 21h
   jc error
   mov bx, ax
  cycle: 
   mov ah, 3Fh
   mov cx, 1
   lea dx, buff
   int 21h
   jc error
   cmp ax, 0
   je no
   cmp byte ptr buff, 'Z'
   jne cycle
   lea dx, msg1
   mov ah, 09h
   int 21h
   jmp endjj
  no:
   lea dx, msg2
   mov ah, 09h
   int 21h
  error:
   lea dx, msg2
   mov ah, 09h
   int 21h
  endjj:
   mov ax, 4C00h
   int 21h
cods ends
end start


В файле всего одна строка типа "ffgdfgodfgojkoolpjpo  Z".

И ещё когда написал D:\Rab1.txt где указывается файл, то прога заработала как надо, объясните что не так, а то я уже совсем потерялся  smile 


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
Logree
Дата 25.6.2010, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 22.11.2006
Где: Самара

Репутация: 1
Всего: 2



под чем запускаете(oc)?

ps ваша программа написана для Dos, а Dos не знает файла Rab1.txt, только RAB1.TXT. сам я под win такой код не запускал, и очень странно что он у вас вообще работает.


Это сообщение отредактировал(а) Logree - 25.6.2010, 22:06


--------------------
Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
PM MAIL ICQ   Вверх
DarkProg
Дата 25.6.2010, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: нет
Всего: 19



Я его компилю и запускаю из под DOSBOX. щас попробую изменить имя файла и отпишу о результате.

Добавлено через 2 минуты и 46 секунд
И правда косяк в этом....

Добавлено через 3 минуты и 27 секунд
А что старнного в том что этот код работает???



--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
Logree
Дата 25.6.2010, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 22.11.2006
Где: Самара

Репутация: 1
Всего: 2



Цитата(DarkProg @  25.6.2010,  22:14 Найти цитируемый пост)
А что старнного в том что этот код работает???

странно былобы если бы он работал под win.



--------------------
Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
PM MAIL ICQ   Вверх
izl3sa
Дата 26.6.2010, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 25.6.2010

Репутация: нет
Всего: нет



2Logree

ntvdm корректно эмулирует файловой ввод-вывод =) так что код будет работать и в винде. По крайней мере до Висты =)
PM MAIL   Вверх
DarkProg
Дата 26.6.2010, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: нет
Всего: 19



Цитата(izl3sa @  26.6.2010,  06:46 Найти цитируемый пост)
ntvdm корректно эмулирует файловой ввод-вывод =) так что код будет работать и в винде. По крайней мере до Висты =) 

У меня половина скомпиленых прог под TASM не стала корректно работать под WinXP, так что тут ещё бабушка надвое сказала что будет а что не будет работать.

Вопрос решён, всем спасибо


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
DarkProg
  Дата 26.6.2010, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: нет
Всего: 19



И так возвращаясь к нашим баранам

Делаю следующую программу по открытию файла:"Нужно ввести имя с клавиатуры и открыть этот файл..." ну короче дальнейшие действия пока не представляют интереса

Вот код как пытаюсь сделать(открытлся ли файл или нет смотрю дебагером имя файла пробовал такое FILE.TXT, в файле лабудень набита, чтоб было)
Код

stk segment para stack 'stack'
    db 100h dup(?)
stk ends
data segment
buffer db ?
msg_s db "Process Succesful complete.$"
msg_e db "Process complete with error.$"
msg_i db "File name is incorrect. Type againt file name turn on CAPSLOCK.",0Dh,0Ah,'$'
file_name db 13 dup (0)
data ends
cods segment
     assume cs:cods, ds:data, ss:stk
start:
   mov ax, data
   mov ds, ax
   ;считаем имя файла
  type_file_name:
   mov dx, 1
   mov bx, offset file_name
  en_file_name:
   mov ah, 01h
   int 21h
   cmp al, 0
   je en_file_name
   cmp al, 0Dh
   je end_file_name
   mov byte ptr [bx], al
   inc dx
   inc bx
   cmp dx, 12
   jne en_file_name   
  
  end_file_name:   
   lea dx, file_name
   mov ah, 3Dh
   mov al, 2
   int 21h
   
   mov ax, 4C00h
   int 21h
cods ends
end start



--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
Logree
Дата 27.6.2010, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 22.11.2006
Где: Самара

Репутация: 1
Всего: 2



в чём проблема?


--------------------
Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
PM MAIL ICQ   Вверх
DarkProg
Дата 27.6.2010, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: нет
Всего: 19



Цитата(Logree @  27.6.2010,  14:08 Найти цитируемый пост)
в чём проблема? 

Блин тупанул, некореектно написал. Проблема в том что файл не открывается, я как-только не извращался не получается :(, поясните что не так делаю smile 


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
DarkProg
  Дата 28.6.2010, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: нет
Всего: 19



Продолжаем банкет smile

В общем файл открыватеся все путем разобрался в чем проблема, теперь следующая часть, мне нужно скопировать из оригинального файла в копию все кроме проблелов, но почему-то при попытке чтения получаю облом(файл нормально создается, его дескриптор вроде бы должен быть, но как только пытаюсь читать файл сразу CF=1)
 вот код
Код

stk segment para stack 'stack'
    db 100h dup(?)
stk ends
data segment
 msg_s db "Process Succesful complete.$"
 msg_e db "Process complete with error.$"
 msg_i db "File name is incorrect. Type againt file name turn on CAPSLOCK.",0Dh,0Ah,'$'
 file_name db 13 dup (0)
 file_namec db 13 dup (0)
 buffer db 256 dup (0)
data ends
cods segment
     assume cs:cods, ds:data, ss:stk
start:
   mov ax, data
   mov ds, ax
   ;считаем имя файла
  type_file_name:
   mov dx, 0
   lea bx, file_name
  en_file_name:
   mov ah, 01h
   int 21h
   cmp al, 0
   je en_file_name
   cmp al, 08h
   jne cmp_en
   dec bx
   dec dx
   jmp en_file_name
  cmp_en:
   cmp al, 0Dh
   je end_file_name
   mov byte ptr [bx], al
   inc dx
   inc bx
   cmp dx, 12
   jne en_file_name
   
  wait_for_enter:
   mov ah, 08h
   int 21h
   cmp al, 0Dh
   jne wait_for_enter
   mov ah, 02h
   mov dl, 0Dh
   int 21h
   mov ah, 02h
   mov dl, 0Ah
   int 21h
   jmp end_file_name
   
  end_file_name:
   
   mov dx, offset file_name; откроем изначальный файл
   mov ah, 3Dh
   mov al, 0
   int 21h
   jnc new_f
   mov dx, offset msg_i
   mov ah, 09h
   int 21h
   jmp type_file_name
   
   push ax; сохраним дескриптор начального файла
  new_f:
   lea si, file_name
   lea di, file_namec
  new_f_n:
   mov al, byte ptr[si]
   mov byte ptr[di], al
   cmp al, '.'
   je new_res
   inc di
   inc si
   jmp new_f_n
  new_res:
   inc di
   mov al, 'D'
   mov byte ptr[di], al
   inc di
   mov al, 'A'
   mov byte ptr[di], al
   inc di
   mov al, 'T'
   mov byte ptr[di], al
   
   mov ah, 3Ch
   lea dx, file_namec
   mov cx, 0
   int 21h
   jnc patch_file
   jmp error
   
   ;mov ah, 3Dh
   ;mov al, 2
   ;lea dx, file_namec
   ;int 21h
   ;jc error
   
  patch_file:; собственно чтение в этой части начинается, я думал может нужно открыть файл поэтому появился закоментеный код выше
   lea dx, buffer
  do_copy:
   pop bx; загрузка первого дескриптора
   push ax; дескриптор второго файла
   mov cx, 1
   mov ah, 3Fh
   int 21h
   jc error ; вот это место откуда сыпет ошибка, копирование ниодного байта не происходит
   cmp ax, 0
   je end_file
   mov al, buffer
   cmp al, ' '
   je no_copy
   mov ax, bx
   pop bx
   push ax
   mov ah, 40h
   int 21h
  no_copy:
   jmp do_copy
  
  error:
   lea dx, msg_e
   mov ah, 09h
   int 21h
   jmp the_end
   
  end_file:
   mov ah, 3Eh
   int 21h
   pop bx
   mov ah, 3Eh
   int 21h
   
  next_act:
   lea dx, msg_s
   mov ah, 09h
   int 21h
   
  the_end:
   mov ax, 4C00h
   int 21h
cods ends
end start



--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
DarkProg
Дата 28.6.2010, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: нет
Всего: 19



Собственно привожу полностью рабочий код, ну вдруг пригодится, закончил сегодня

Код

stk segment para stack 'stack'
    db 100h dup(?)
stk ends
data segment
 msg_s db "Process Succesful complete.$"
 msg_e db "Process complete with error.$"
 msg_i db "File name is incorrect. Type againt file name turn on CAPSLOCK.",0Dh,0Ah,'$'
 file_name db 13 dup (0)
 file_namec db 13 dup (0)
 buf db ?
data ends
cods segment
     assume cs:cods, ds:data, ss:stk
start:
   mov ax, data
   mov ds, ax
   ;считаем имя файла
  type_file_name:
   mov dx, 0
   lea bx, file_name
  en_file_name:
   mov ah, 01h
   int 21h
   cmp al, 0
   je en_file_name
   cmp al, 08h
   jne cmp_en
   dec bx
   dec dx
   jmp en_file_name
  cmp_en:
   cmp al, 0Dh
   je end_file_name
   mov byte ptr [bx], al
   inc dx
   inc bx
   cmp dx, 12
   jne en_file_name
   
  wait_for_enter:
   mov ah, 08h
   int 21h
   cmp al, 0Dh
   jne wait_for_enter
   mov ah, 02h
   mov dl, 0Dh
   int 21h
   mov ah, 02h
   mov dl, 0Ah
   int 21h
   jmp end_file_name
   
  end_file_name:
   
   mov dx, offset file_name; откроем изначальный файл
   mov ah, 3Dh
   mov al, 0
   int 21h
   jnc new_f
   mov dx, offset msg_i
   mov ah, 09h
   int 21h
   jmp type_file_name
   
  new_f:
   push ax ;сохраним дескриптор начального файла
   lea si, file_name
   lea di, file_namec
  new_f_n:
   mov al, byte ptr[si]
   mov byte ptr[di], al
   cmp al, '.'
   je new_res
   inc di
   inc si
   jmp new_f_n
  new_res:
   inc di
   mov al, 'D'
   mov byte ptr[di], al
   inc di
   mov al, 'A'
   mov byte ptr[di], al
   inc di
   mov al, 'T'
   mov byte ptr[di], al
   
   mov ah, 3Ch
   lea dx, file_namec
   mov cx, 0
   int 21h
   jnc patch_file
   jmp error
   
   ;mov ah, 3Dh
   ;mov al, 2
   ;lea dx, file_namec
   ;int 21h
   ;jc error
   
  patch_file:
   lea dx, buf
  do_copy:
   pop bx; загрузка первого дескриптора
   push ax; дескриптор второго файла
   mov cx, 1
   mov ah, 3Fh
   int 21h
   jc error
   cmp ax, 0
   je end_file
   ;mov al, buf
   cmp buf, ' '
   je no_copy
   mov ax, bx
   pop bx ;дескриптор второго
   push ax; прячем первый
   mov ah, 40h
   mov cx, 1
   int 21h
   pop ax
   push ax
   mov ax, bx
   jmp do_copy
  no_copy:
   mov ax, bx
   pop bx ;дескриптор второго
   push ax; прячем первый
   pop ax
   push ax
   mov ax, bx
   jmp do_copy
  
  error:
   lea dx, msg_e
   mov ah, 09h
   int 21h
   jmp the_end
   
  end_file:
   mov ah, 3Eh
   int 21h
   pop bx
   mov ah, 3Eh
   int 21h
   
  next_act:
   lea dx, msg_s
   mov ah, 09h
   int 21h
   
  the_end:
   mov ax, 4C00h
   int 21h
cods ends
end start



--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0877 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.