Программирование

Автор: Пользователь скрыл имя, 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

Файлы: 1 файл

opersist.doc

— 242.50 Кб (Скачать)

Применение:  
Команда применяется для восстановления содержимого вершины стека в регистр, ячейку памяти или сегментный регистр. Заметим, что недопустимо восстановление значения в сегментный регистр cs.
 

my_proc proc    near       

push    ax       

push    bx

;тело процедуры, в которой изменяется содержимое

;регистров ax и bx

...       

pop     bx       

pop     ax       

ret       

endp        

DEC

(DECrement operand by 1)

Уменьшение операнда на единицу

Схема команды:  dec операнд 

     Назначение: уменьшение значения операнда в памяти или регистре на 1.

      Алгоритм  работы:  
команда вычитает 1 из операнда.

      Состояние флагов после выполнения команды:

11 07 06 04 02
OF SF ZF AF PF
r r r r

      Применение:  
Команда dec используется для уменьшения значения байта, слова, двойного слова в памяти или регистре на единицу. При этом заметьте то, что команда не воздействует на флаг cf.

  mov     al,9

...        

dec     al      ;al=8        

JMP

(JuMP)

Переход безусловный

Схема команды:  jmp метка 

     Назначение: используется в программе для организации безусловного перехода как внутри текущего сегмента команд, так и за его пределы. При определенных условиях в защищенном режиме работы команда jmp может использоваться для переключения задач.

      Алгоритм  работы: 
Команда jmp в зависимости от типа своего операнда изменяет содержимое либо только одного регистра eip, либо обоих регистров cs и eip:

  • если операнд в команде jmp — метка в текущем сегменте команд (a8, 16, 32), то ассемблер формирует машинную команду, операнд которой является значением со знаком, являющимся смещением перехода относительно следующей за jmp команды. При этом виде перехода изменяется только регистр eip/ip;
  • если операнд в команде jmp — символический идентификатор ячейки памяти (m16, 32, 48), то ассемблер предполагает, что в ней находится адрес, по которому необходимо передать управление. Этот адрес может быть трех видов:
    • значением абсолютного смещения метки перехода относительно начала сегмента кода. Размер этого смещения может быть 16 или 32 бит в зависимости от режима адресации;
    • дальним указателем на метку перехода в реальном и защищенном режимах, содержащим два компонента адреса — сегментный и смещение. Размеры этих компонентов также зависят от установленного режима адресации (use16 или use32). Если текущим режимом является use16, то адрес сегмента и смещение занимают по 16 бит, причем смещение располагается в младшем слове двойного слова, отводимого под этот полный адрес метки перехода. Если текущим режимом является use32, то адрес сегмента и смещение занимают, соответственно, 16 и 32 бит, — в младшем двойном слове находится смещение, в старшем — адрес сегмента;
    • адресом в одном из 16 или 32-разрядных регистров — этот адрес представляет собой абсолютное смещение метки, на которую необходимо передать управление, относительно начала сегмента команд.

Для понимания  различий механизмов перехода в реальном и защищенном режимах нужно помнить  следующее. В реальном режиме микропроцессор просто изменяет cs и eip/ip в соответствии с содержимым указателя в памяти. В защищенном режиме микропроцессор предварительно анализирует байт прав доступа AR в дескрипторе, номер которого определяется по содержимому сегментной части указателя. В зависимости от состояния байта AR микропроцессор выполняет либо переход, либо переключение задач.

     Состояние флагов после выполнения команды (за исключением  случая переключения задач):

выполнение  команды не влияет на флаги

      Применение:  
Команду jmp применяют для осуществления ближних и дальних безусловных переходов без сохранения контекста точки перехода.  

LEA

(Load Effective Address)

Загрузка эффективного адреса

Схема команды:  lea приемник,источник 

     Назначение: получение эффективного адреса (смещения) источника.

      Алгоритм  работы:

      алгоритм  работы команды зависит от действующего режима адресации (use16 или use32):

  • если use16, то в регистр приемник загружается 16-битное значение смещения операнда источник;
  • если use32, то в регистр приемник загружается 32-битное значение смещения операнда источник.

      Состояние флагов после выполнения команды:

выполнение  команды не влияет на флаги

      Применение:  
Данная команда является альтернативой оператору ассемблера offset. В отличие от offset команда lea допускает индексацию операнда, что позволяет более гибко организовать адресацию операндов.

;загрузить в регистр bx адрес пятого элемента массива mas

.data

mas     db      10 dup (0)

.code

...        

mov     di,4       

lea     bx,mas[di]

;или        

lea     bx,mas[4]

;или        

lea     bx,mas+4        

MUL

(MULtiply)

Умножение целочисленное без учета знака

Схема команды:  mul множитель_1 

     Назначение: операция умножения двух целых чисел без учета знака.

      Алгоритм  работы:

Команда выполняет умножение двух операндов без учета знаков. Алгоритм зависит от формата операнда команды и требует явного указания местоположения только одного сомножителя, который может быть расположен в памяти или в регистре. Местоположение второго сомножителя фиксировано и зависит от размера первого сомножителя:

  • если операнд, указанный в команде — байт, то второй сомножитель должен располагаться в al;
  • если операнд, указанный в команде — слово, то второй сомножитель должен располагаться в ax;
  • если операнд, указанный в команде — двойное слово, то второй сомножитель должен располагаться в eax.

Результат умножения помещается также в  фиксированное место, определяемое размером сомножителей:

  • при умножении байтов результат помещается в ax;
  • при умножении слов результат помещается в пару dx:ax;
  • при умножении двойных слов результат помещается в пару edx:eax.

      Состояние флагов после выполнения команды (если старшая  половина результата нулевая):

11 07 06 04 02 00
OF SF ZF AF PF CF
0 ? ? ? 0

Состояние флагов после выполнения команды (если старшая половина результата ненулевая):

11 07 06 04 02 00
OF SF ZF AF PF CF
1 ? ? ? 1

      Применение:  
Команда mul выполняет целочисленное умножение операндов без учета их знаковых разрядов. Для этой операции необходимо наличие двух операндов-сомножителей, размещение одного из которых фиксировано, а другого задается операндом в команде. Контролировать размер результата удобно используя флаги cf и of.
 

mn_1    db      15

mn_2    db      25

...        

mov     al,mn_1       

mul     mn_2       

Информация о работе Программирование