Статус нашего сайта: |
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 |
Таненбаум Э.- Архитектура компьютера. стр.558Иногда в процессе вызова подпрограммы значения регистров процессора меняются. В этой связи полезно сделать так, чтобы вызывающая программа не знала о том, какие регистры используются вызываемой программой. Для этого проще всего ввести для системных вызовов и обычных подпрограмм одни и те же соглашения. Предполагается, что в вызываемой программе могут изменяться значения регистров АХ и DX. Если в одном из этих регистров содержится ценная информация, желательно, чтобы вызывающая процедура разместила ее в стеке до выполнения аналогичной операции с аргументами. Если подпрограмма использует и другие регистры, их можно поместить в стек непосредственно в начале ее выполнения и извлечь из него перед запуском команды RET. Таким образом, желательно сделать так, чтобы вызывающая процедура сохраняла значения регистров АХ и DX (если в них содержатся значимые данные), а вызываемая — значения других регистров, которые она перезаписывает. Системные вызовы и системные подпрограммы Поскольку программы запускаются поверх операционной системы, при программировании на языке ассемблера не нужно самостоятельно реализовывать операции открытия, закрытия, чтения и записи файлов. Интерпретатор поддерживает семь системных вызовов и пять функций, позволяющих ему работать на разных платформах. Все они перечислены в табл. В.4. Таблица В,4, Некоторые системные вызовы и подпрограммы UNIX, поддерживаемые интерпретатором
Все эти двенадцать программ запускаются в стандартном порядке вызова: в первую очередь, в стеке в обратном порядке размещаются все необходимые аргументы; затем в стек вводится номер вызова; наконец, выполняется команда системного исключения SYS без операндов. Все необходимые данные, в том числе номер вызова той или иной системной службы, системная программа извлекает из стека. Возвращаемые значения записываются либо в регистр АХ, либо в комбинацию регистров DX : АХ (если они соответствуют длинному слову). После завершения команды SYS значения всех регистров гарантированно сохраняются. В стеке после вызова остаются и аргументы. Если они не понадобятся для следующего вызова, вызывающая процедура должна скорректировать содержимое указателя стека. Для удобства имена системных вызовов можно в начале программы определить как константы; в таком случае к ним можно будет обращаться не по номеру, а по имени. Позже мы рассмотрим несколько системных вызовов на примерах, а пока что воздержимся от излишней детализации. |