Автор: Пользователь скрыл имя, 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
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
MOV
(MOVe operand)
Схема команды: | mov приемник,источник |
Назначение: пересылка данных между регистрами или регистрами и памятью.
Алгоритм
работы: копирование второго операнда
в первый операнд.
Состояние флагов после выполнения команды: выполнение команды не влияет на флаги
Применение:
Команда 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 | 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 номер_прерывания |
Назначение: вызов подпрограммы обслуживания прерывания с номером прерывания, заданным операндом команды.
Алгоритм работы:
Состояние флагов после выполнения команды:
09 | 08 |
IF | TF |
0 | 0 |
Применение:
Как видно из синтаксиса, существуют две
формы этой команды:
;вызов
обработчика аппаратного прерывания 08h
из программы:
int 08h |
CMP
(CoMPare operands)
Сравнение операндов
Схема команды: | cmp операнд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 источник |
Назначение: размещение содержимого операнда источник в стеке.
Алгоритм работы:
Состояние флагов после выполнения команды: выполнение команды не влияет на флаги.
Применение:
Команда 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:
Состояние флагов после выполнения команды: выполнение команды не влияет на флаги.