Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2009, 20:58   #1
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
По умолчанию Процедура установки позиции с которой программа должна читать файл не работает. FASM.

Код:
proc SetPos,pos,hFile
mov eax,0 ;1
lp:
invoke ReadFile,[hFile],[buffer],1,Size,0 ;2
add eax,1 ;3
cmp eax,[pos] ;4
ret ;5
jmp lp ;6
endp
Процедура должна работать так:
1.В eax перемещаем значение 0.
2.Читаем один байт с файла.
3.Увеличиваем значение eax на один.
4.Проверяем если eax равно pos.
5.Если да выходим из процедуры.
6.Иначе повторяем всё сначала.

Как я понимаю то туплю сильно где идёт проверка, но не могу понять в чём. Потому как позиция перемещается всего на 1. Прошу указать на ошибку.
Заранее благодарен.
Crivel вне форума Ответить с цитированием
Старый 13.09.2009, 21:06   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
Подмигивание

Цитата:
Прошу указать на ошибку
Код:
proc SetPos,pos,hFile
mov eax,0 ;1
lp:
invoke ReadFile,[hFile],[buffer],1,Size,0 ;2
add eax,1 ;3
cmp eax,[pos] ;4
ret ;5
jmp lp ;6
endp
Лучше будет
Код:
jnz lp
ret
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 13.09.2009 в 21:09.
Goodwin98 вне форума Ответить с цитированием
Старый 13.09.2009, 21:16   #3
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Кстати вот это будет делать тоже самое
Код:
proc SetPos,pos,hFile
mov ecx,[pos]
lp:
invoke ReadFile,[hFile],[buffer],1,Size,0
loop lp
ret
endp
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 13.09.2009, 21:17   #4
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
По умолчанию

Goodwin98 спасибо за ответ, но когда
Код:
ret
jmp lp
поменял на
Код:
jnz lp
ret
программа капитально висит.
Crivel вне форума Ответить с цитированием
Старый 13.09.2009, 21:34   #5
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Нужно сохранять eax (или ecx в моем варианте) перед вызовом апи.
Код:
proc SetPos,pos,hFile
mov eax,0
lp:
push eax
invoke ReadFile,[hFile],[buffer],1,Size,0
pop eax
add eax,1
cmp eax,[pos]
jnz lp
ret
endp
Можно вообще использовать SetFilePointer для этих целей.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 13.09.2009 в 21:45.
Goodwin98 вне форума Ответить с цитированием
Старый 13.09.2009, 21:46   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Crivel, вопрос принципиальный. Вы же с нормальными файлами дело имеете? Так там можно одной API функцие установить позицию в нужное место.
Иначе, какой-нибудь 8 Гб файл, на предпоследний байт ой как долго ставиться будет


ПОКА ПИСАЛ, УЖЕ ДАЛИ ОТВЕТ!
Цитата:
Сообщение от Goodwin98
Можно вообще использовать SetFilePointer для этих целей.
+1
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.09.2009, 21:46   #7
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
По умолчанию

Огромное спасибо. Очень помогли.

P.S. Serge_Bliznykov, у меня файл не большой. Просто к программе прилеплен файл типа с помощью джойнера. Она сама из себя читает. Объём не большой.
Crivel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедура не работает Михаил Юрьевич Общие вопросы Delphi 4 03.06.2008 07:22
Паскаль. Определить номер позиции,в которой символы отличаются Stelix Помощь студентам 6 06.11.2007 16:53
не работает хранимая процедура yulia БД в Delphi 11 28.05.2007 19:00