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

Таненбаум Э.- Архитектура компьютера. стр.570


Таненбаум Э.- Архитектура компьютера. стр.570 Таненбаум Э.- Архитектура компьютера.

а б

Рис. В.5. Содержимое окна трассера при выполнении программы из листинга В.1

Листинг В.1. Ассемблерный код программы HlloWrld.s

Таненбаум Э.- Архитектура компьютера.

В строках 5, 18 и 20 содержатся метки, обозначенные двоеточием (:). Они представляют численные значения, схожие с константами. В данном случае ассемблеру приходится определять эти численные значения. Поскольку метка start находится в начале секции текста, соответствующее значение принимается за 0, но значения в последующих метках секции текста (в этом примере они не показаны) обуславливаются количеством предшествующих байтов кода. Теперь рассмотрим строку 6. Она заканчивается разностью двух меток — численной константой. Таким образом, строку 6 можно приравнять к следующему выражению:

MOV СХД2

Разница между ними заключается лишь в том, что в одном случае длину строки определяет ассемблер, а в другом — программист. Указанное здесь значение выражает объем пространства в секции данных, зарезервированное для размещения строки, расположенной в строке 19. Команда M0V в строке 6 представляет собой команду копирования de -hw в регистр СХ.

Содержание строк 7-11 демонстрирует механизм формирования системных вызовов в применяемом наборе инструментов. Фактически, эти строки представляют собой переведенный на языке ассемблера вызов функции из языка С:

writeü. hw, 12);

Здесь первый параметр представляет собой дескриптор файла стандартного вывода (1), второй выражает адрес отображаемой строки (hw), а третий — длину строки (12). В строках 7-9 эти параметры помещаются в стек в обратном порядке, что соответствует последовательности вызова, принятой в С и применяемой данной программой трассировки. В строке 10 в стек вводится номер системного вызова для функции write (4), а в строке 11 выполняется сам вызов. Такой порядок по большей части соответствует механизму выполнения программы на языке ассемблера в клонах UNIX (или Linux), однако при работе в другой операционной системе его необходимо скорректировать в расчете на конкретные правила выполнения системных вызовов. Впрочем, даже при работе в среде Windows ассемблер as88 и трассер t88 реализуют правила вызовов, принятые в UNIX.

Системный вызов в строке 11 ответственен за вывод данных. Код в строке 12 выполняет очистку стека, возвращая указатель стека к значению, которое у него было до размещения в стеке четырех 2-байтных слов. Если вызов write проводится успешно, число записанных байтов возвращается в регистре АХ. В строке 13 результат системного вызова после строки 11 вычитается из исходной длины строки, записанной в СХ; тем самым производится проверка успешности вызова, то есть фактической записи всех байтов. Таким образом, код завершения должен быть равен нулю при успешном вызове и, соответственно, не равен нулю в противном случае. В строках 14 и 15 подготавливается системный вызов exit, осуществляемый в строке 16; для этого коды завершения и функции, относящиеся к вызову EXIT, отправляются в стек.

Имейте в виду, что в командах M0V и SUB первый аргумент указывает на приемник, а второй — на источник. Такова особенность нашего ассемблера; в других ассемблерах порядок может быть иным. Выбор разработчиками того или иного варианта, по большому счету, произволен.


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

.