![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 24.06.2010
Сообщений: 1
|
![]()
Привет всем!!!
Захотелось подсунуть программе данные из файла тоесть когда она запросит Readln(S); то строку S надо взять из памяти... тут я перехватываю нужную функцию, но дело в том что он читает Н-ное количество символов до энтера.. эмулировать клавиатурный набор нет смысла.. следовательно надо сделать это заменив обработчик функции и разобраться как переводится паскалевский оператор Readln(....); на ASM??? Все что я знаю, это то что читает он из файла с хэндлом 0... с помощью функции 3Fh 21ого прерывания... P.S помогите пожалуйста так как Турбодебаггером очень сложно выискивать нужный оператор... все.. разобрался __)) Последний раз редактировалось BaJIuK; 24.06.2010 в 20:52. |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 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. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
задачи через writeln и readln | MELKOVSKY | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 24.01.2008 14:04 |