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

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

    095  mov dl,char

    096  mov ah,2h

    097  int 21h

    098  pop dx

    099  pop bx

    100  pop ax

    101  dec al

    102  jz strgo        ;если выведены все символы,то переход

    103  jmp loop1       ;иначе вывести следующий символ

    104   strgo:      dec bl          ;изменить  позицию

    105  push ax

    106  push bx

    107  push dx

    108  mov dl,chend    ;последний символ-пробел

    109  mov ah,2h

    110  int 21h

    111  ;---------задержка

    112  mov al,255

    113   cwait0:    mov bl,255

    114   cwait1: mov bh,255

    115   cwait2: dec bh

    116  jnz cwait2

    117  dec bl

    118  jnz cwait1

    119  dec al

    120  jnz cwait0

    121  pop dx

    122  pop bx

    123  pop ax

    124  jmp loop0          ;переход если не достигли края зкрана

    125   exit: ;выход из программы

    126  pop  bx

    127  pop  dx

    128  pop  ax

    129  mov  ax, 4c00h

    130  int  21h

    131end start

 

Приложение 3.  Перечень используемых команд.

MOV

(MOVe operand)

Пересылка операнда

 

  

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

Назначение: пересылка данных между регистрами или регистрами и памятью.

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

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

Применение:  
Команда mov применяется для различного рода пересылок данных, при этом, несмотря на всю простоту этого действия, необходимо помнить о некоторых ограничениях и особенностях выполнения данной операции:

  • направление пересылки в команде mov всегда справа налево, то есть из второго операнда в первый;
  • значение второго операнда не изменяется;
  • оба операнда не могут быть из памяти (при необходимости можно использовать цепочечную команду movs);
  • лишь один из операндов может быть сегментным регистром;
  • желательно использовать в качестве одного из операндов регистр al/ax/eax, так как в этом случае TASM генерирует более быструю форму команды mov.
 mov     al,5

mov     bl,al

mov     bx,ds       

 

MOV

(MOVe operand to/from system registers)

Пересылка операнда в системные  регистры (или из них) 

 

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

Назначение: пересылка данных между регистрами или регистрами и памятью.

Алгоритм  работы: копирование второго операнда в первый.  
Состояние флагов после выполнения команды: выполнение команды не влияет на флаги.

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

       Применение: Команда mov применяется для различного рода пересылок данных, при этом, несмотря на всю простоту этого действия, необходимо помнить о некоторых ограничениях и особенностях выполнения данной операции: направление пересылки в команде mov всегда справа налево, то есть  из второго операнда в первый; значение второго операнда не изменяется; оба операнда не могут быть из памяти; лишь один из операндов может быть сегментным регистром; желательно использовать в качестве одного из операндов регистр  al/ax/eax, так как в этом случае TASM генерирует более быструю  форму команды mov.

       Для выполнения ряда стандартных функций  используются программы, входящие в состав MsDos. Для того, чтобы использовать такую программу необходимо ее номер записать в регистр ah, параметры в другие регистры и вызвать ее командой int 21h.

       Команда mov также применяется для обмена данными между системными регистрами. Это одна из немногих возможностей доступа к содержимому этих регистров. Данную команду можно использовать только на нулевом уровне привилегий либо в реальном режиме работы микропроцессора.

.286

;переключение микропроцессора в защищенный

режим36:        

mov     eax,cr0        

bts     eax,0       

mov     cr0,eax        

 

INT

(INTerrupt)

Вызов подпрограммы обслуживания прерывания

  Схема команды:  int номер_прерывания 

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

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

  • записать в стек регистр флагов eflags/flags и адрес возврата. При записи адреса возврата вначале записывается содержимое сегментного регистра cs, затем содержимое указателя команд eip/ip;
  • сбросить в ноль флаги if и tf;
  • передать управление на программу обработки прерывания с указанным номером. Механизм передачи управления зависит от режима работы микропроцессора (см. уроки 15 и 17).

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

09 08
IF TF
0 0

Применение:  
Как видно из синтаксиса, существуют две формы этой команды:

  • int 3 — имеет свой индивидуальный код операции 0cch и занимает один байт. Это обстоятельство делает ее очень удобной для использования в различных программных отладчиках для установки точек прерывания путем подмены первого байта любой команды. Микропроцессор, встречая в последовательности команд команду с кодом операции 0cch, вызывает программу обработки прерывания с номером вектора 3, которая служит для связи с программным отладчиком.
  • Вторая форма команды занимает два байта, имеет код операции 0cdh и позволяет инициировать вызов подпрограммы обработки прерывания с номером вектора в диапазоне 0–255. Особенности передачи управления, как было отмечено, зависят от режима работы микропроцессора.
;вызов обработчика аппаратного прерывания 08h из программы:       

 int     08h        

 
 
 

CMP

(CoMPare operands)

Сравнение операндов 

 

Схема команды:  cmp операнд1,операнд2 

Назначение: сравнение двух операндов.

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

  • выполнить вычитание (операнд1-операнд2);
  • в зависимости от результата установить флаги, операнд1 и операнд2 не изменять (то есть результат не запоминать).

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

11 07 06 04 02 00
OF SF ZF AF PF CF
R R r r r r

Применение:  
Данная команда используется для сравнения двух операндов методом вычитания, при этом операнды не изменяются. По результатам выполнения команды устанавливаются флаги. Команда cmp применяется с командами условного перехода и командой установки байта по значению setcc.

len     equ     10

...       

cmp     ax,len        

 jne     m1      ;переход если (ax)<>len       

jmp     m2      ;переход если ax)=len        

 

PUSH

(PUSH operand onto stack)

Размещение  операнда в стеке 

 

Схема команды:  push источник 

Назначение: размещение содержимого операнда источник в стеке.

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

  • уменьшить значение указателя стека esp/sp на 4/2 (в зависимости от значения атрибута размера адреса — use16 или use32);
  • записать источник в вершину стека (адресуемую парой ss:esp/sp).

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

Применение:  
Команда push используется совместно с командой pop для записи значений в стек и извлечения их из стека. Размер записываемых значений — слово или двойное слово. Также в стек можно записывать непосредственные значения. Заметьте, что в отличие от команды pop в стек можно включать значение сегментного регистра cs. Другой интересный момент связан с регистром sp. Команда push esp/sp записывает в стек значение esp/sp по состоянию до выдачи этой команды. В микропроцессоре i8086 по этой команде записывалось скорректированное значение sp. При записи в стек 8-битных значений для них все равно выделяется слово или двойное слово (в зависимости от use16 или use32).

my_proc proc    near       

push    ax       

push    bx

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

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

...       

pop     bx       

pop     ax       

ret       

endp

 

POP

(POP operand from the stack)

Извлечение  операнда из стека 

 

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

Назначение: извлечение слова или двойного слова из стека.

Алгоритм  работы:  Алгоритм работы команды зависит от установленного атрибута размера адреса — use16 или use32:

  • загрузить в приемник содержимое вершины стека (адресуется парой ss:esp/sp);
  • увеличить содержимое esp/sp на 4 (2 байта) для use32 (соответственно для use16).

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

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