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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2010, 19:56   #1
BaJIuK
Новичок
Джуниор
 
Регистрация: 24.06.2010
Сообщений: 1
По умолчанию Readln

Привет всем!!!

Захотелось подсунуть программе данные из файла
тоесть когда она запросит Readln(S); то строку S надо взять из памяти...
тут я перехватываю нужную функцию, но дело в том что он читает Н-ное количество символов до энтера.. эмулировать клавиатурный набор нет смысла.. следовательно надо сделать это заменив обработчик функции и разобраться как переводится паскалевский оператор
Readln(....); на ASM???
Все что я знаю, это то что читает он из файла с хэндлом 0... с помощью функции 3Fh 21ого прерывания...

P.S помогите пожалуйста так как Турбодебаггером очень сложно выискивать нужный оператор...



все.. разобрался __))

Последний раз редактировалось BaJIuK; 24.06.2010 в 20:52.
BaJIuK вне форума Ответить с цитированием
Старый 25.06.2010, 04:21   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

BaJIuK
Если я правильно понял требуется на ассемблере вывести первую строку из файла? Последовательность действий следующая:
1) Открываете файл и получаете его handle. Для открытия файла служит функция 3Dh. Регистры DS:DX должны содержать адрес строки с именем файла, строка должна заканчиваться нулем и может содержать путь к файлу. В регистре AL должен находиться код доступа к файлу. В данном случае AL=0 "Открытие для чтения"
2) Получаете длину файла. В регистре AH должен находится номер функции (42h). В регистре BX должен находится файловый номер, который выдала функция создания или открытия файла. AL=2, CX=DX=0, после вызова этой функции в регистрах DX:AX будет возвращена длина файла в байтах
3) выделяете буфер в памяти равный длине вашего файла. Можно заранее, а можно динамически
4) читаете ваш файл в буфер. Чтение файла происходит с помощью функции 3Fh. При вызове этой функции в регистре BX должен находиться файловый номер, в регистре CX – количество байт, которое нужно прочитать, в регистрах DS:DX должен находиться адрес области памяти, в которую будет прочитан файл. В регистре AH должен находиться номер функции (3Fh).
5) с начала буфера ищете символ перевода строки 0Dh, 0Ah используйте команду repne scasb
6) теперь у вас есть и первая строка и ее длина
7) выводите строку на экран

Последний раз редактировалось Mikl___; 25.06.2010 в 08:29.
Mikl___ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задачи через writeln и readln MELKOVSKY Паскаль, Turbo Pascal, PascalABC.NET 3 24.01.2008 14:04