Статус нашего сайта: |
ICQ Information Center |
ICQ SHOP 5-значные 6-значные 7-значные 8-значные 9-значные Rippers List ОПЛАТА СТАТЬИ СЕКРЕТЫ HELP CENTER OWNED LIST РОЗЫСК!New! ICQ РЕЛИЗЫ Протоколы ICQ LOL ;-) Настройка компьютера Аватарки Смайлики СОФТ Mail Checkers Bruteforces ICQTeam Soft 8thWonder Soft Other Progs ICQ Patches Miranda ICQ ФорумАрхив! ВАШ АККАУНТ ICQ LiveJournal
РекламаНаш канал:irc.icqinfo.ru |
Таненбаум Э.- Архитектура компьютера. стр.581Механизм работы таких программ демонстрирует подпрограмма erout (строки 43-48 кода). Она обрабатывает числа, выходящие за пределы допустимого диапазона. Во-первых, в строке 43 в стек помещается адрес сообщения (в АХ). Затем в стек отправляется число системного вызова _PRINTF. Далее выполняется системный вызов, стек очищается, и программа выполняет возврат. Остальные десять подпрограмм — от routO до rout8 — загружают адреса своих сообщений в регистр АХ, а затем переходят ко второй строке erout, выводят сообщения и завершают подпрограмму. Один из способов адаптировать программу к таблицам диспетчеризации — изменить ее таким образом, чтобы из вводимых символов формировалось осмысленное сообщение. К примеру, все символы, кроме восьмеричных цифр, могут составить сообщение об ошибке. Буферизованный и произвольный доступ к файлам Программа InFilBuf.s, представленная в листинге В.8, являет собой пример произвольного файлового ввода-вывода. Она допускает, что файл состоит из произвольного числа символьных строк, каждая из которых потенциально может отличаться по длине от других. Сначала эта программа считывает файл и формирует таблицу, в которой запись п отражает положение начала строки п в файле. Впоследствии можно запросить конкретную символьную строку, отыскать запись для нее в таблице и считать с помощью системных вызовов 1 seek и read. Имя файла при стандартном вводе указывается в первой вводимой строке. Программа состоит из нескольких относительно независимых кодовых фрагментов, которые можно адаптировать для иных целей. Листинг В.8. Программа, реализующая буферизованный и произвольный доступ к файлу
В первых пяти строках кода определяются номера системных вызовов и размер буфера, а указатель базы, как обычно, настраивается на вершину стека. В строках 6-13 из стандартного ввода считывается имя файла, а затем оно сохраняется в символьной строке с меткой linein. Если имя файла не закрыто новой строкой, выводится сообщение об ошибке, а процесс заканчивается с ненулевым состоянием. Все эти действия отражены в строках 38-45. Обратите внимание, что адрес имени файла помещается в стек в строке 39, адрес сообщения об ошибке—в строке 40. Само сообщение об ошибке (представленное в строке ИЗ) представляет собой запрос на строку $s в формате PRINTF. Здесь же выполняется вставка содержимого строки linein. |