Статус нашего сайта: |
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 |
Таненбаум Э.- Архитектура компьютера. стр.559Файлы открываются вызовом OPEN или CREAT. В обоих случаях первым аргументом является адрес начала строки, содержащей имя файла. Вторым аргументом в вызове OPEN могут быть 0 (если файл нужно открыть для чтения), 1 (если файл открывается для записи) или 2 (если файл открывается для чтения и записи). Если при наличии прав записи указанный файл не существует, в процессе вызова он создается. Во время вызова CREAT создается пустой файл с полномочиями, заданными на основании второго аргумента. Вызовы OPEN и CREAT возвращают двухбайтовое целое и помещают его в регистр АХ, который называется дескриптором файла и с помощью которого этот файл можно прочесть, записать или закрыть. Отрицательное возвращенное значение свидетельствует о том, что вызов завершился ошибкой. Перед началом выполнения программы открываются три файла с дескрипторами: 0 для стандартного ввода, 1 для стандартного вывода и 2 для стандартного вывода ошибок. У вызовов READ и WRITE три аргумента: дескриптор файла, буфер, в котором хранятся данные, и число передаваемых байтов. Поскольку аргументы размещаются в стеке в обратном порядке, сначала в стек вводится число байтов, затем — адрес начала буфера, далее — дескриптор файла, и наконец — номер вызова (READ или WRITE). Этот порядок размещения аргументов в стеке аналогичен стандартной последовательности вызова в языке С: read(fd, buffer, bytes); Эта команда реализуется путем введения в стек параметров в следующем порядке: bytes, buffer, fd. У вызова CLOSE один аргумент — дескриптор файла. При успешном закрытии файла он возвращает значение 0 в регистре АХ. Вызов EXIT требует сохранения в стеке статуса выхода и не возвращает значение. Вызов LSEEK изменяет указатель чтения-записи в открытом файле. Первым аргументом здесь выступает дескриптор файла. Поскольку второй аргумент является длинным словом, в стек сначала помещается старшее слово, а затем младшее — даже в том случае, если смещение умещается в одном слове. Третий аргумент определяет метод вычисления нового значения указателя чтения-записи: относительно начала файла (0), текущего положения (1) или конца файла (2). Возвращаемое значение определяет новое положение указателя относительно начала файла; в формате длинного слова оно сохраняется в комбинации регистров DX : АХ. Перейдем к функциям, не являющимся системными вызовами. Функция GETCHAR считывает один символ из файла стандартного ввода и помещает его в регистр AL; при этом значение АН обнуляется. При ошибке слово в регистре АХ целиком приравнивается к значению -1. Вызов PÜTCHAR записывает один байт в файл стандартного вывода. Выводимым значением при успешной записи является именно этот байт; при ошибке выводится -1. Вызов PRINTF выводит отформатированные данные. Первым аргументом служит адрес форматной строки, задающей формат выводимых данных. Строка Ы указывает на то, что следующим аргументом является целое число в стеке, которое при выводе преобразуется в десятичное представление. Аналогичным образом, строка °4х осуществляет преобразование в шестнадцатеричное, а Хо — в восьмеричное представление. Строка Xs определяет следующий аргумент как строку с завершающим нулем, которая при вызове передается с помощью адреса в стеке. Количество дополнительных аргументов в стеке должно соответствовать количеству указателей преобразования в форматной строке. |