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

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


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

Чтобы понять, как это все работает, полезно открыть файл hlloWrld.s в любом текстовом редакторе (от применения текстовых процессоров в данном случае лучше отказаться). В UNIX это можно сделать в ex, vi или emacs; в Windows выбор естественным образом падает на Блокнот (Notepad), для вызова которого обычно следует выбрать команду Пуск ► Все программы ► Стандартные ► Блокнот (Start ► Programs ► Accessories ► Notepad).

Текстовый процессор Word не годится, так как и при выводе на экран и при сохранении он может исказить текст программы.

Измените сообщение в строке 19, сохраните файл, ассемблируйте его и запустите в трассере. Так вы сделаете первый шаг в области программирования на языке ассемблера.

Регистры общего назначения

Следующий пример в подробностях демонстрирует механизм отображения регистров, а также один из «подводных камней» операции умножения по версии процессора 8088. Часть программы genReg.s, начиная с метки start, представлена в листинге В.2, а на рис. В.6 показана секция регистров окна трассера после выполнения строки 7.

Листинг В.2. Часть программы genReg.s

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

Рис. В.6. Секция регистров окна трассера: после выполнения строки 7 (а); после семи проходов цикла умножения (б)

Следующая команда в строке 4 загружает в регистр АХ значение 258:

В результате регистр АН получает значение 1, а регистр AL — 2. Далее, в строке 5, значения AL и АН суммируются, и значение АН оказывается равным трем. В строке 6 в СХ копируется содержимое переменной times (10). В строке 7 в регистр ВХ загружается адрес переменной muldat, равный 2, поскольку она находится во втором байте секции данных. Именно в этот момент сделан снимок экрана, представленный на рис. В.6, а. Следует иметь в виду, что значение АН составляет 3, значение AL — 2, а АХ — 770; в этом нет ничего удивительного, так как 3 х 256 + 2 = 770.

Следующая команда (в строке 8) копирует содержимое переменной muldat в регистр АХ. Таким образом, после нажатия клавиши возврата каретки значение АХ изменится на 625.

Теперь мы готовы запустить цикл, призванный умножить содержимое регистра АХ на слово 2ВХ (то есть muldat + 2), в котором находится значение 2. Неявным целевым адресом для команды MUL является комбинация регистров DX : АХ. В первом проходе цикла результат (1250) умещается в одно слово, поэтому он сохраняется в регистре АХ, а значение DX остается нулевым. Содержимое всех регистров после 7 проходов цикла умножения показано на рис. В.6, б.

Так как исходным значением АХ являлось 625, после семи операций умножения на 2 результат становится равным 80 000. Поскольку он не помещается в регистр АХ, произведение сохраняется в 32-разрядном регистре, образуемом путем конкатенации регистров DX : АХ; таким образом, в DX содержится значение 1, а в АХ — 14 464. При вычислении действительно получается, что 1 х 65 536 + + 14 464 = 80 000. Обратите внимание, что значением СХ на данном этапе является 4, поскольку команда LOOP уменьшает его на единицу во время каждого прохода. Так как исходным значением этого регистра было 10, после семи вызовов команды MUL (и шести проходов команды LOOP) значение СХ уменьшилось до 4.


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

.