Статус нашего сайта: |
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Чтобы понять, как это все работает, полезно открыть файл 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. |