Статус
нашего
сайта:
ICQ Secrets Center is Online  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


Таненбаум Э.- Архитектура компьютера. стр.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 определяет следующий аргумент как строку с завершающим нулем, которая при вызове передается с помощью адреса в стеке. Количество дополнительных аргументов в стеке должно соответствовать количеству указателей преобразования в форматной строке.


⇐ Предыдущая страница| |Следующая страница ⇒

.