Автор: Пользователь скрыл имя, 17 Мая 2011 в 11:22, курсовая работа
Оптимизируя быстродействие и размер программы, применяют конкретные методы, относящиеся к переходам и вызовам подпрограмм, а также метод отказа от универсальности, оптимизации циклов, применение таблиц управляющих параметров, а также об ориентированных на конкретные модели процессоров командах. Чтобы программы на ассемблере принесли максимум пользы, иногда стоит оптимизировать размер, иногда - быстродействие, а иногда - лучше оставить все как было.
ВВЕДЕНИЕ 4
1. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ. ПРЕРЫВАНИЯ 5
1.1. Таблица векторов прерываний 5
1.2. Пpoгpaммиpoвaниe кoнтpoллepa пpepывaний 7
1.3. Зaпpeт/paзpeшeниe oтдeльныx aппapaтныx пpepывaний. 8
1.4. Haпиcaниe coбcтвeннoгo пpepывaния. 9
1.5. Дoпoлнeниe к cущecтвующeму пpepывaнию. 10
2. АЛГОРИТМ РЕШЕНИЯ. 11
3. ОПИСАНИЕ ПРОГРАММЫ. 11
ВЫВОД 13
СПИСОК ЛИТЕРАТУРЫ 14
Приложение 1. Структурная схема алгоритма. 15
Приложение 2. Листинг программы. 16
Приложение 3. Перечень используемых команд. 19
Применение:
Команда применяется для восстановления
содержимого вершины стека в регистр,
ячейку памяти или сегментный регистр.
Заметим, что недопустимо восстановление
значения в сегментный регистр cs.
my_proc proc
near
push ax push bx ;тело процедуры, в которой изменяется содержимое ;регистров ax и bx ... pop bx pop ax ret endp |
(DECrement operand by 1)
Уменьшение операнда на единицу
Схема команды: | dec операнд |
Назначение: уменьшение значения операнда в памяти или регистре на 1.
Алгоритм
работы:
команда вычитает 1 из операнда.
Состояние флагов после выполнения команды:
|
Применение:
Команда dec используется для уменьшения
значения байта, слова, двойного слова
в памяти или регистре на единицу. При
этом заметьте то, что команда не воздействует
на флаг cf.
|
(JuMP)
Переход безусловный
Схема команды: | jmp метка |
Назначение: используется в программе для организации безусловного перехода как внутри текущего сегмента команд, так и за его пределы. При определенных условиях в защищенном режиме работы команда jmp может использоваться для переключения задач.
Алгоритм
работы:
Команда jmp в зависимости от типа своего
операнда изменяет содержимое либо только
одного регистра eip, либо обоих регистров
cs и eip:
Для понимания различий механизмов перехода в реальном и защищенном режимах нужно помнить следующее. В реальном режиме микропроцессор просто изменяет cs и eip/ip в соответствии с содержимым указателя в памяти. В защищенном режиме микропроцессор предварительно анализирует байт прав доступа AR в дескрипторе, номер которого определяется по содержимому сегментной части указателя. В зависимости от состояния байта AR микропроцессор выполняет либо переход, либо переключение задач.
Состояние флагов после выполнения команды (за исключением случая переключения задач):
|
Применение:
Команду jmp применяют для осуществления
ближних и дальних безусловных переходов
без сохранения контекста точки перехода.
(Load Effective Address)
Загрузка эффективного адреса
Схема команды: | lea приемник,источник |
Назначение: получение эффективного адреса (смещения) источника.
Алгоритм работы:
алгоритм работы команды зависит от действующего режима адресации (use16 или use32):
Состояние флагов после выполнения команды:
|
Применение:
Данная команда является альтернативой
оператору ассемблера offset. В отличие от
offset команда lea допускает индексацию операнда,
что позволяет более гибко организовать
адресацию операндов.
|
(MULtiply)
Умножение целочисленное без учета знака
Схема команды: | mul множитель_1 |
Назначение: операция умножения двух целых чисел без учета знака.
Алгоритм работы:
Команда выполняет умножение двух операндов без учета знаков. Алгоритм зависит от формата операнда команды и требует явного указания местоположения только одного сомножителя, который может быть расположен в памяти или в регистре. Местоположение второго сомножителя фиксировано и зависит от размера первого сомножителя:
Результат умножения помещается также в фиксированное место, определяемое размером сомножителей:
Состояние флагов после выполнения команды (если старшая половина результата нулевая):
|
Состояние флагов после выполнения команды (если старшая половина результата ненулевая):
|
Применение:
Команда mul выполняет целочисленное умножение
операндов без учета их знаковых разрядов.
Для этой операции необходимо наличие
двух операндов-сомножителей, размещение
одного из которых фиксировано, а другого
задается операндом в команде. Контролировать
размер результата удобно используя флаги
cf и of.
|