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

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


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

Команда REP SCASB выполняет приращение регистра DI, так что после совпадения целевой индекс указывает на символ нуля, следующий за символом новой

строки. В строке 12 выполняется отрицательное приращение DI на 2; в результате этот регистр указывает на последнюю букву слова.

Если сканирование символьной строки идет в обратном порядке, а отображается она посимвольно, значит, наша задача решена; в таком случае флаг направления в строке 10 переустанавливается, и начинается обратная регулировка индексных регистров в строковых командах. Теперь команда L0DSB в строке кода 14 копирует символ в AL, а в строке 15 этот символ помещается в стек рядом с PUTCHAR, что позволяет команде SYS отобразить его.

Команды, находящиеся в строках 18 и 19, выводят новую строку, и программа традиционно закрывается вызовом EXIT.

В текущей версии программы, впрочем, содержится ошибка. Ее можно найти путем пошаговой трассировки.

Команда /str помещает строку str в поле данных трассера. Так как числовое значение адреса данных известно, мы можем выяснить, как меняются значения в индексных регистрах в отношении положения символьной строки.

Ошибка, впрочем, обнаруживается только после многократного нажатия клавиши возврата каретки. Команды трассера помогают сократить время локализации ошибки. Запустите программу трассировки и введите команду 13, которая переместит нас в середину цикла. Далее с помощью команды b установим контрольную точку в строке 15. Создав две новые строки, мы увидим, что в поле вывода отображается последняя буква «е». Запустив команду г, мы заставим программу трассировки работать вплоть до следующей контрольной точки или до завершения процесса. Таким образом, последовательно запуская команду г, можно видеть все буквы, пока мы не подберемся к решению проблемы. С этого момента программу трассировки можно будет перевести в пошаговый режим и проанализировать происходящее при выполнении важнейших команд.

Мы также можем установить дополнительную контрольную точку в той или иной строке кода, но при этом нужно учитывать включение файла syscalnr.h, приводящее к смещению номеров строк кода на 20. Следовательно, чтобы установить контрольную точку, скажем, в строке 16, нужно ввести команду 36Ь. Впрочем, от этого неуклюжего способа лучше отказаться в пользу установки глобальной метки start в строке 2 перед расположенной в ней командой — тогда контрольную точку в нужной строке кода можно будет установить командой

/start + 14b

К тому же такой способ установки контрольной точки позволяет не обращать внимания на размер включаемого файла.

Таблицы диспетчеризации

В некоторых языках программирования существуют операторы выбора, позволяющие выбирать один из нескольких возможных вариантов действий в зависимости от численного значения переменной. Подобного рода многовариантное ветвление иногда оказывается полезным и в программах на языке ассемблера. Возьмем, к примеру, набор подпрограмм системных вызовов, объединенных в программе перехвата исключений SYS. Пример программирования многовари антного ветвления на языке ассемблера 8088 показан в коде программы jumptbl.s, представленном в листинге В.7.


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

.