Архитектура операционной системы UNIX :: Бах Морис Дж.
Страница:
266 из 715
Если же бит переноса в регистре PS при переходе из режима ядра в режим задачи имеет нулевое значение, процесс с адреса 7 переходит по адресу 86 и возвращает управление вызвавшей программе (адрес 64); регистр 0 содержит возвращаемое функцией значение.
char name[] = "file";
main() {
int fd;
fd = creat(name, 0666);
}
Фрагменты ассемблерной программы, сгенерированной в системе Motorola 68000
Адрес Команда
—
# текст главной программы
—
58: mov &0x1b6, (%sp) # поместить код 0666 в стек
5e: mov &0x204, -(%sp) # поместить указатель вершины стека и переменную «имя файла» в стек
64: jsr 0x7a # вызов библиотечной функции создания файла
—
# текст библиотечной функции создания файла
7a: movq &0x8, %d0 # занести значение 8 в регистр 0
7c: trap &0x0 # внутреннее прерывание операционной системы
7e: bcc &0x6 ‹86› # если бит переноса очищен, перейти по адресу 86
80: jmp 0x13c # перейти по адресу 13c
86: rts # возврат из подпрограммы
—
# текст обработки ошибок функции
13c: mov %d0, &0x20e # поместить содержимое регистра 0 в ячейку 20e (переменная errno)
142: movq &-0x1, %d0 # занести в регистр 0 константу -1
144: mova %d0, %a0
146: rts # возврат из подпрограммы
Рисунок 6.13. Системная функция creat и сгенерированная программа ее выполнения в системе Motorola 68000
Рисунок 6.14. Конфигурация стека для системной функции creat
Несколько библиотечных функций могут отображаться на одну точку входа в список системных функций.
|< Пред. 264 265 266 267 268 След. >|