Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Система команд микропроцессора Intel 80x86. (Тема 4)

Содержание

Система команд микропроцессора
Система команд микропроцессора Intel 80x86 Система команд микропроцессора Команды пересылки данных Команды пересылки данныхКоманда MOV – пересылка данныхФормат командыmov , Действие команды В Команды пересылки данныхКоманда MOV – пересылка данныхПример 1. Обмен значениями регистров (EAX Команды пересылки данныхКоманда MOV – пересылка данныхПример 2. Реализация команды A=B			mov EAX, A			mov B, EAX Арифметические команды Арифметические командыКоманда ADD – сложениеФормат командыadd , Действие команды В операнд Приемник Арифметические командыКоманда ADD – сложениеПример 1. Сложение двух регистров (ECX = EAX Арифметические командыКоманда ADD – сложениеПример 2. Реализация команды C=A+B			mov EAX, A			add EAX, B			mov C, EAX Арифметические командыКоманда ADC – сложение с учетом переносаФормат командыadc , Действие команды Арифметические командыКоманда ADC – сложение с учетом переносаПример 1. Сложение двух 64-разрядных Арифметические командыКоманда ADC – сложение с учетом переносаПример 2. Сложение двух 64-разрядных Арифметические командыКоманда INC – увеличение на единицуФормат командыinc Действие команды Операнд увеличивается Арифметические командыКоманда SUB – вычитаниеФормат командыsub , Действие команды В операнд Приемник Арифметические командыКоманда SUB – вычитаниеПример 1. Вычитание двух регистров (ECX = EAX Арифметические командыКоманда SUB – вычитаниеПример 2. Реализация команды C = A – Арифметические командыКоманда SBB – вычитание с учетом переносаФормат командыsbb , Действие команды Арифметические командыКоманда SBB – вычитание с учетом переносаПример 1. Вычитание двух 64-разрядных Арифметические командыКоманда SBB – вычитание с учетом переносаПример 2. Вычитание двух 64-разрядных Арифметические командыКоманда DEC – уменьшение на единицуФормат командыdec Действие команды Операнд уменьшается Арифметические командыКоманда MUL – умножение беззнаковых чиселФормат командыmul Действие команды В зависимости Арифметические командыКоманда MUL – умножение беззнаковых чиселОсобенности команды Размер произведения всегда в Арифметические командыКоманда DIV – деление беззнаковых чиселФормат командыdiv Действие команды В зависимости Арифметические командыКоманда DIV – деление беззнаковых чиселОсобенности команды Размер неполного частного и Арифметические командыКоманда IMUL – умножение знаковых чиселФормат команды 		imul   	imul Арифметические командыКоманда IMUL – умножение знаковых чиселДействие команды, случай первый соответствует команде Арифметические командыКоманда IMUL – умножение знаковых чиселДействие команды, случаи второй и третий Арифметические командыКоманда IMUL – умножение знаковых чиселПример. Реализация команды C = A Арифметические командыКоманда IDIV – деление знаковых чиселФормат командыidiv Действие команды Соответствует команде Арифметические командыКоманда CBW – преобразование байта в словоФормат командыcbwДействие команды Заполняет регистр Арифметические командыКоманда CBW – преобразование байта в словоПример 1. Вычисление C = Арифметические командыКоманда CBW – преобразование байта в словоПример 2. Вычисление C = Арифметические командыКоманда CWD – преобразование слова в двойное словоФормат командыcwdДействие команды Заполняет Арифметические командыКоманда CWDE – преобразование слова в двойное словоФормат командыcwdeДействие команды Заполняет Арифметические командыКоманда CDQ – преобразование двойного слова в учетверенное словоФормат командыcdqДействие команды Арифметические командыКоманда CDQ – преобразование двойного слова в учетверенное словоПример. Вычисление C Арифметические команды	Для преобразования типа беззнаковых операндов достаточно заполнить соответствующий регистр (часть регистра) Команды перехода Команды перехода	Команды перехода предназначены для изменения линейной последовательности выполнения программы.	Принцип работы всех Команды перехода	Все команды перехода имеют одинаковый формат:j*** 	Адрес команды может указываться непосредственно, Команды перехода	Все команды перехода делятся на команды безусловного и условного перехода.	При выполнении Команды переходаКоманда JMP – безусловный переходФормат командыjmp Действие команды заносит в регистр Команды перехода	При выполнении команды условного перехода переход осуществляется, если выполняется некоторое условие Команды перехода Команды перехода	Обычно команды условного перехода размещают в программе после арифметических команд.	(Напомним, что Команды перехода	Часто в программе возникает необходимость сравнить значения двух чисел. Для этих Команды переходаСравнение беззнаковых чисел		cmp , 		j** Команды перехода	Для удобства восприятия программы можно использовать команды-синонимы:		ja	↔	jnbe		jae	↔	jnb		jb	↔	jnae		jbe	↔	jna Команды переходаСравнение знаковых чисел		cmp , 		j** Команды перехода	Для удобства восприятия программы можно использовать команды-синонимы:		jg	↔	jnle		jge	↔	jnl		jl	↔	jnge		jle	↔	jng Реализация алгоритмических структур Реализация алгоритмических структур	Как было сказано ранее, использование команд перехода позволяет реализовать последовательность Реализация алгоритмических структур1.	Неполное ветвление if (усл) { команда; }усл–+командаНепосредственная реализация затруднительна, поскольку Можно преобразовать блок-схему так, чтобы она содержала только подходящие элементы				J*** 				JMP 				: 								: ...Реализация алгоритмических структурусл+–команда Реализация алгоритмических структур	Пример. Фрагмент алгоритма поиска наибольшего элемента массива if(max < A[i]) Эффективнее будет заменить условие на противоположное				     JN** Реализация алгоритмических структур	Пример. Фрагмент алгоритма поиска наибольшего элемента массива if(max < A[i]) Реализация алгоритмических структур2.	Полное ветвление if (усл) { команда1; } else   { команда2; }усл–+команда1команда2 Заменим блок-схему на более подходящую Пример. Поиск наибольшего из двух чисел if(A > B) Замена условия упрощает конструкцию: Пример. Фрагмент алгоритма нахождения НОД if(A > B) Можно переставить блоки местами: Реализация алгоритмических структур3.	Цикл с предусловием   while (усл) { команда; }усл–+командаПолучается Реализация алгоритмических структурВозможно несколько вариантов реализации, например:усл+–команда!усл+–команда Реализация алгоритмических структурВозможно несколько вариантов реализации, например:NachaloCikla: Пример. Алгоритм нахождения НОДNachalo:  CMP EAX, EBX  JE Konec Реализация алгоритмических структур4.	Цикл с постусловием   do { команда; } while(усл);усл+–командаNachalo: Реализация алгоритмических структур	Реализация цикла с постусловием на языке Ассемблера оказывается настолько простой, Реализация алгоритмических структур5.	Цикл с параметром for(i = A; i = B; i--) Массивы Массивы	Одним из самых распространенных применений циклов является обработка массивов*.	* Массив – структурированный Массивы	При работе с массивами необходимо помнить,  что все элементы массива располагаются Массивы	Архитектура процессора не накладывает никаких ограничений на смысл и правила использования элементов Массивы	Точно также понятие индекса элемента массива является условным, поскольку для процессора существуют Массивы	В общем случае адрес элемента массива вычисляется по формуле:база + индекс * размер_элемента Массивы	При работе с массивами используются косвенные методы адресации:	–	косвенная базоваяINC [EBX]	–	косвенная базовая со Массивы	Схема последовательной обработки элементов массива:       MOV МассивыПример. Инициализация элементов массива  MOV EBX, offset Massiv  ; адрес Массивы	В том случае, когда размер элемента массива  равен 1, 2, 4 МассивыПример. Сумма элементов массива  MOV EBX, offset Massiv  ; адрес
Слайды презентации

Слайд 2 Система команд микропроцессора

Система команд микропроцессора

Слайд 3 Команды пересылки данных

Команды пересылки данных

Слайд 4 Команды пересылки данных
Команда MOV – пересылка данных

Формат команды

mov

Команды пересылки данныхКоманда MOV – пересылка данныхФормат командыmov , Действие команды

,

Действие команды В операнд Приемник заносится значение операнда Источник

Запись

на языке высокого уровня
Приемник = Источник;

Слайд 5 Команды пересылки данных
Команда MOV – пересылка данных

Пример 1.

Команды пересылки данныхКоманда MOV – пересылка данныхПример 1. Обмен значениями регистров

Обмен значениями регистров (EAX и EBX)

mov ECX, EAX

; ECX = EAX
mov EAX, EBX ; EAX = EBX
mov EBX, ECX ; EBX = ECX

Слайд 6 Команды пересылки данных
Команда MOV – пересылка данных

Пример 2.

Команды пересылки данныхКоманда MOV – пересылка данныхПример 2. Реализация команды A=B			mov EAX, A			mov B, EAX

Реализация команды A=B

mov EAX, A
mov B, EAX


Слайд 7 Арифметические команды

Арифметические команды

Слайд 8 Арифметические команды
Команда ADD – сложение

Формат команды

add ,

Действие

Арифметические командыКоманда ADD – сложениеФормат командыadd , Действие команды В операнд

команды В операнд Приемник заносится сумма операнда Приемник и операнда

Источник

Запись на языке высокого уровня
Приемник += Источник;

Слайд 9 Арифметические команды
Команда ADD – сложение

Пример 1. Сложение двух

Арифметические командыКоманда ADD – сложениеПример 1. Сложение двух регистров (ECX =

регистров (ECX = EAX + EBX)

mov ECX, EAX

; ECX = EAX
add ECX, EBX ; ECX += EBX

Слайд 10 Арифметические команды
Команда ADD – сложение

Пример 2. Реализация команды

Арифметические командыКоманда ADD – сложениеПример 2. Реализация команды C=A+B			mov EAX, A			add EAX, B			mov C, EAX

C=A+B

mov EAX, A
add EAX, B
mov C, EAX


Слайд 11 Арифметические команды
Команда ADC – сложение с учетом переноса

Формат

Арифметические командыКоманда ADC – сложение с учетом переносаФормат командыadc , Действие

команды

adc ,

Действие команды В операнд Приемник заносится сумма операнда

Приемник, операнда Источник и бита CF (переноса от предыдущего арифметического действия)

Запись на языке высокого уровня
Приемник += Источник + CF;

Слайд 12 Арифметические команды
Команда ADC – сложение с учетом переноса

Пример

Арифметические командыКоманда ADC – сложение с учетом переносаПример 1. Сложение двух

1. Сложение двух 64-разрядных чисел (EBX; EAX) += (EDX;

ECX)

add EAX, ECX
adc EBX, EDX

Слайд 13 Арифметические команды
Команда ADC – сложение с учетом переноса

Пример

Арифметические командыКоманда ADC – сложение с учетом переносаПример 2. Сложение двух

2. Сложение двух 64-разрядных чисел
(C = A + B)

mov

EAX, A
add EAX, B
mov C, EAX
mov EAX, A + 4
adc EAX, B + 4
mov C + 4, EAX


Слайд 14 Арифметические команды
Команда INC – увеличение на единицу

Формат команды

inc

Арифметические командыКоманда INC – увеличение на единицуФормат командыinc Действие команды Операнд



Действие команды Операнд увеличивается на 1

Запись на языке высокого уровня
Операнд++;


Слайд 15 Арифметические команды
Команда SUB – вычитание

Формат команды

sub ,

Действие

Арифметические командыКоманда SUB – вычитаниеФормат командыsub , Действие команды В операнд

команды В операнд Приемник заносится разность операнда Приемник и операнда

Источник

Запись на языке высокого уровня
Приемник -= Источник;

Слайд 16 Арифметические команды
Команда SUB – вычитание

Пример 1. Вычитание двух

Арифметические командыКоманда SUB – вычитаниеПример 1. Вычитание двух регистров (ECX =

регистров (ECX = EAX – EBX)

mov ECX, EAX

; ECX = EAX
sub ECX, EBX ; ECX -= EBX

Слайд 17 Арифметические команды
Команда SUB – вычитание

Пример 2. Реализация команды

Арифметические командыКоманда SUB – вычитаниеПример 2. Реализация команды C = A

C = A – B

mov EAX, A
sub EAX, B
mov

C, EAX

Слайд 18 Арифметические команды
Команда SBB – вычитание с учетом переноса

Формат

Арифметические командыКоманда SBB – вычитание с учетом переносаФормат командыsbb , Действие

команды

sbb ,

Действие команды В операнд Приемник заносится разность операнда

Приемник и суммы операнда Источник и бита CF (переноса от предыдущего арифметического действия)

Запись на языке высокого уровня
Приемник -= Источник + CF;

Слайд 19 Арифметические команды
Команда SBB – вычитание с учетом переноса

Пример

Арифметические командыКоманда SBB – вычитание с учетом переносаПример 1. Вычитание двух

1. Вычитание двух 64-разрядных чисел (EBX; EAX) -= (EDX;

ECX)

sub EAX, ECX
sbb EBX, EDX

Слайд 20 Арифметические команды
Команда SBB – вычитание с учетом переноса

Пример

Арифметические командыКоманда SBB – вычитание с учетом переносаПример 2. Вычитание двух

2. Вычитание двух 64-разрядных чисел
(C = A – B)

mov

EAX, A
sub EAX, B
mov C, EAX
mov EAX, A + 4
sbb EAX, B + 4
mov C + 4, EAX


Слайд 21 Арифметические команды
Команда DEC – уменьшение на единицу

Формат команды

dec

Арифметические командыКоманда DEC – уменьшение на единицуФормат командыdec Действие команды Операнд



Действие команды Операнд уменьшается на 1

Запись на языке высокого уровня
Операнд--;


Слайд 22 Арифметические команды
Команда MUL – умножение беззнаковых чисел

Формат команды

mul

Арифметические командыКоманда MUL – умножение беззнаковых чиселФормат командыmul Действие команды В



Действие команды В зависимости от размера операнда Источник: 1 байт: AX

= AL * Источник; 2 байта: (DX; AX) = AX * Источник; 4 байта: (EDX; EAX) = EAX * Источник;

Слайд 23 Арифметические команды
Команда MUL – умножение беззнаковых чисел

Особенности команды Размер

Арифметические командыКоманда MUL – умножение беззнаковых чиселОсобенности команды Размер произведения всегда

произведения всегда в два раза больше размера множителей

Пример. Реализация

команды C = A * B
mov EAX, A
mul B
mov C, EAX ; возможна потеря ; разрядов !!!

Слайд 24 Арифметические команды
Команда DIV – деление беззнаковых чисел

Формат команды
div

Арифметические командыКоманда DIV – деление беззнаковых чиселФормат командыdiv Действие команды В


Действие команды В зависимости от размера операнда Источник: 1 байт: AL

= AX / Источник; AH = AX % Источник;
2 байта: AX = (DX; AX) / Источник; DX = (DX; AX) % Источник;
4 байта: EAX = (EDX; EAX) / Источник; EDX = (EDX; EAX) % Источник;

Слайд 25 Арифметические команды
Команда DIV – деление беззнаковых чисел

Особенности команды Размер

Арифметические командыКоманда DIV – деление беззнаковых чиселОсобенности команды Размер неполного частного

неполного частного и остатка всегда в два раза меньше

размера делимого.

Пример. Реализация команды C = A / B
mov EAX, A
mov EDX, 0
div B
mov C, EAX

Слайд 26 Арифметические команды
Команда IMUL – умножение знаковых чисел

Формат команды
imul

Арифметические командыКоманда IMUL – умножение знаковых чиселФормат команды 		imul  	imul

imul , imul , ,


Слайд 27 Арифметические команды
Команда IMUL – умножение знаковых чисел

Действие команды,

Арифметические командыКоманда IMUL – умножение знаковых чиселДействие команды, случай первый соответствует

случай первый соответствует команде MUL, но учитывается знаковый бит
Пример.

10000000 10000000 mul 00000010 imul 00000010
0000000100000000 1111111100000000
(128 * 2 = 256) (-128 * 2 = -256)

Слайд 28 Арифметические команды
Команда IMUL – умножение знаковых чисел

Действие команды,

Арифметические командыКоманда IMUL – умножение знаковых чиселДействие команды, случаи второй и

случаи второй и третий – операнд-приемник должен быть регистром; – операнд-источник2 должен быть

непосредственным значением из диапазона [-128; +127]; – результат умножения усекается до размера операнда-приемника (возможна потеря разрядов)

Слайд 29 Арифметические команды
Команда IMUL – умножение знаковых чисел

Пример. Реализация

Арифметические командыКоманда IMUL – умножение знаковых чиселПример. Реализация команды C =

команды C = A * B

mov EAX, A
imul EAX,

B ; возможна потеря !!!
mov C, EAX

Слайд 30 Арифметические команды
Команда IDIV – деление знаковых чисел

Формат команды
idiv

Арифметические командыКоманда IDIV – деление знаковых чиселФормат командыidiv Действие команды Соответствует



Действие команды Соответствует команде DIV, но учитывается знаковый бит


Слайд 31 Арифметические команды
Команда CBW – преобразование байта в слово

Формат

Арифметические командыКоманда CBW – преобразование байта в словоФормат командыcbwДействие команды Заполняет

команды
cbw
Действие команды Заполняет регистр AH значением старшего бита регистра AL,

т.е. расширяет AL → AX

Слайд 32 Арифметические команды
Команда CBW – преобразование байта в слово

Пример

Арифметические командыКоманда CBW – преобразование байта в словоПример 1. Вычисление C

1. Вычисление C = A + B
(Слово = Байт

+ Слово)

mov AL, A
cbw
add AX, B
mov C, AX

Слайд 33 Арифметические команды
Команда CBW – преобразование байта в слово

Пример

Арифметические командыКоманда CBW – преобразование байта в словоПример 2. Вычисление C

2. Вычисление C = A / B (Байт =

Байт / Байт)

mov AL, A
cbw
idiv B
mov C, AL

Слайд 34 Арифметические команды
Команда CWD – преобразование слова в двойное

Арифметические командыКоманда CWD – преобразование слова в двойное словоФормат командыcwdДействие команды

слово

Формат команды
cwd
Действие команды Заполняет регистр DX значением старшего бита регистра

AX, т.е. расширяет AX → (DX; AX)

Слайд 35 Арифметические команды
Команда CWDE – преобразование слова в двойное

Арифметические командыКоманда CWDE – преобразование слова в двойное словоФормат командыcwdeДействие команды

слово

Формат команды
cwde
Действие команды Заполняет старшую часть регистра EAX значением старшего

бита регистра AX, т.е. расширяет AX → EAX

Слайд 36 Арифметические команды
Команда CDQ – преобразование двойного слова в

Арифметические командыКоманда CDQ – преобразование двойного слова в учетверенное словоФормат командыcdqДействие

учетверенное слово

Формат команды
cdq
Действие команды Заполняет регистр EDX значением старшего бита

регистра EAX, т.е. расширяет EAX → (EDX; EAX)

Слайд 37 Арифметические команды
Команда CDQ – преобразование двойного слова в

Арифметические командыКоманда CDQ – преобразование двойного слова в учетверенное словоПример. Вычисление

учетверенное слово

Пример. Вычисление C = A / B (знаковые

операнды)

mov EAX, A
cdq
idiv B
mov C, EAX

Слайд 38 Арифметические команды
Для преобразования типа беззнаковых операндов достаточно заполнить

Арифметические команды	Для преобразования типа беззнаковых операндов достаточно заполнить соответствующий регистр (часть

соответствующий регистр (часть регистра) нулевыми битами, например, с помощью

команды MOV

Пример. Вычисление C = A / B (беззнаковые операнды)

mov EAX, A
mov EDX, 0 ; xor EDX
div B
mov C, EAX


Слайд 39 Команды перехода

Команды перехода

Слайд 40 Команды перехода
Команды перехода предназначены для изменения линейной последовательности

Команды перехода	Команды перехода предназначены для изменения линейной последовательности выполнения программы.	Принцип работы

выполнения программы.

Принцип работы всех команд перехода заключается в модифицировании

значения регистра EIP (указателя инструкций).

Слайд 41 Команды перехода
Все команды перехода имеют одинаковый формат:

j***

Команды перехода	Все команды перехода имеют одинаковый формат:j*** 	Адрес команды может указываться

команды>

Адрес команды может указываться непосредственно, но чаще всего он

задается с помощью символьной метки:

<метка>: <команда>
. . . . . . .
j*** <метка>

Слайд 42 Команды перехода
Все команды перехода делятся на команды безусловного

Команды перехода	Все команды перехода делятся на команды безусловного и условного перехода.	При

и условного перехода.

При выполнении команды безусловного перехода переход осуществляется

всегда.

Слайд 43 Команды перехода
Команда JMP – безусловный переход

Формат команды
jmp

Команды переходаКоманда JMP – безусловный переходФормат командыjmp Действие команды заносит в

команды>

Действие команды заносит в регистр EIP указанное значение (EIP =

<адрес команды>)

Слайд 44 Команды перехода
При выполнении команды условного перехода переход осуществляется,

Команды перехода	При выполнении команды условного перехода переход осуществляется, если выполняется некоторое

если выполняется некоторое условие перехода.

Условием перехода может являться значение

некоторого флага или комбинация значений нескольких флагов.

Слайд 45 Команды перехода

Команды перехода

Слайд 46 Команды перехода
Обычно команды условного перехода размещают в программе

Команды перехода	Обычно команды условного перехода размещают в программе после арифметических команд.	(Напомним,

после арифметических команд.

(Напомним, что биты регистра флагов EFlags изменяются

в зависимости от результата арифметической операции).

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

Слайд 47 Команды перехода
Часто в программе возникает необходимость сравнить значения

Команды перехода	Часто в программе возникает необходимость сравнить значения двух чисел. Для

двух чисел. Для этих целей перед командами условного перехода

используется команда CMP.

Формат команды
cmp <операнд 1>, <операнд 2>

Действие команды От <операнда 1> отнимает <операнд 2>. Результат вычитания нигде не сохраняется, но в соответствии с его значением изменяются флаги.

Слайд 48 Команды перехода
Сравнение беззнаковых чисел

cmp ,
j**

Команды переходаСравнение беззнаковых чисел		cmp , 		j**



Слайд 49 Команды перехода
Для удобства восприятия программы можно использовать команды-синонимы:

ja ↔ jnbe
jae ↔ jnb
jb ↔ jnae
jbe ↔ jna

Команды перехода	Для удобства восприятия программы можно использовать команды-синонимы:		ja	↔	jnbe		jae	↔	jnb		jb	↔	jnae		jbe	↔	jna

Слайд 50 Команды перехода
Сравнение знаковых чисел

cmp ,
j**

Команды переходаСравнение знаковых чисел		cmp , 		j**



Слайд 51 Команды перехода
Для удобства восприятия программы можно использовать команды-синонимы:

jg ↔ jnle
jge ↔ jnl
jl ↔ jnge
jle ↔ jng

Команды перехода	Для удобства восприятия программы можно использовать команды-синонимы:		jg	↔	jnle		jge	↔	jnl		jl	↔	jnge		jle	↔	jng

Слайд 52 Реализация алгоритмических структур

Реализация алгоритмических структур

Слайд 53 Реализация алгоритмических структур
Как было сказано ранее, использование команд

Реализация алгоритмических структур	Как было сказано ранее, использование команд перехода позволяет реализовать

перехода позволяет реализовать последовательность выполнения команд, отличную от линейной.

Блок-схемы

отдельных команд перехода можно изобразить так:

Слайд 54 Реализация алгоритмических структур
1. Неполное ветвление if (усл) { команда; }

усл

+
команда

Непосредственная

Реализация алгоритмических структур1.	Неполное ветвление if (усл) { команда; }усл–+командаНепосредственная реализация затруднительна,

реализация затруднительна, поскольку блок-схема отдельных элементов конструкции не соответствует

блок-схемам имеющихся операторов перехода.
Необходимо заменить блок-схему на другую.

Слайд 55 Можно преобразовать блок-схему так, чтобы она содержала только

Можно преобразовать блок-схему так, чтобы она содержала только подходящие элементы				J*** 				JMP 				: 								: ...Реализация алгоритмических структурусл+–команда

подходящие элементы


J***

JMP

:

:

...

Реализация алгоритмических структур

усл

+


команда




Слайд 56

Реализация алгоритмических структур
Пример. Фрагмент алгоритма поиска наибольшего элемента

Реализация алгоритмических структур	Пример. Фрагмент алгоритма поиска наибольшего элемента массива if(max <

массива

if(max < A[i])

CMP EAX, A[ESI]
JL Metka1
JMP Metka2
{ Metka1:
max = A[i]; MOV EAX, A[ESI]
}
Metka2: ...

Слайд 57 Эффективнее будет заменить условие на противоположное


Эффективнее будет заменить условие на противоположное				   JN** 				   								: ...Реализация алгоритмических структур!усл+–команда

JN**



:

...

Реализация алгоритмических структур

!усл

+


команда



Слайд 58

Реализация алгоритмических структур
Пример. Фрагмент алгоритма поиска наибольшего элемента

Реализация алгоритмических структур	Пример. Фрагмент алгоритма поиска наибольшего элемента массива if(max <

массива

if(max < A[i])

CMP EAX, A[ESI]
JNL Metka
{
max = A[i]; MOV EAX, A[ESI]
}
Metka: ...

Слайд 59 Реализация алгоритмических структур
2. Полное ветвление if (усл) { команда1; } else

Реализация алгоритмических структур2.	Полное ветвление if (усл) { команда1; } else  { команда2; }усл–+команда1команда2

{ команда2; }


усл

+
команда1

команда2


Слайд 60 Заменим блок-схему на более подходящую

Заменим блок-схему на более подходящую

J*** <метка 1>

JMP <метка 2>

<метка 1>: <команда 1>

JMP <метка 3>

<метка 2>: <команда 2>

<метка 3>: ...

Реализация алгоритмических структур

усл


+

команда1


команда2




Слайд 61

Пример. Поиск наибольшего из двух чисел
if(A >

Пример. Поиск наибольшего из двух чисел if(A > B)

B)

CMP EAX, EBX
JG Metka1
JMP Metka2
{ Metka1:
C = A; MOV ECX, EAX
} JMP Metka3
else
{ Metka2:
C = B; MOV ECX, EBX
}
Metka3: ...

Реализация алгоритмических структур


Слайд 62 Замена условия упрощает конструкцию:

Замена условия упрощает конструкцию:

JN** <метка 2>



<метка 1>: <команда 1>

JMP <метка 3>

<метка 2>: <команда 2>

<метка 3>: ...

Реализация алгоритмических структур

!усл

+


команда1


команда2



Слайд 63

Пример. Фрагмент алгоритма нахождения НОД

if(A > B)

Пример. Фрагмент алгоритма нахождения НОД if(A > B)

CMP

EAX, EBX
{ JNG MetkaB
A –= B; MetkaA: SUB EAX, EBX
} JMP Metka
else
{
B –= A; MetkaB: SUB EBX, EAX
}
Metka: ...

Реализация алгоритмических структур


Слайд 64 Можно переставить блоки местами:

Можно переставить блоки местами:

J*** <метка 1>



<метка 2>: <команда 2>

JMP <метка 3>

<метка 1>: <команда 1>

<метка 3>: ...

Реализация алгоритмических структур

усл

+


команда2


команда1



Слайд 65 Реализация алгоритмических структур
3. Цикл с предусловием while (усл)

Реализация алгоритмических структур3.	Цикл с предусловием  while (усл) { команда; }усл–+командаПолучается

{ команда; }

усл

+
команда


Получается из неполного ветвления путем добавления команды

перехода в начало конструкции (к проверке условия)



Слайд 66 Реализация алгоритмических структур
Возможно несколько вариантов реализации, например:

усл
+

команда




!усл
+

команда



Реализация алгоритмических структурВозможно несколько вариантов реализации, например:усл+–команда!усл+–команда

Слайд 67

Реализация алгоритмических структур
Возможно несколько вариантов реализации, например:

NachaloCikla:

Реализация алгоритмических структурВозможно несколько вариантов реализации, например:NachaloCikla:    NachaloCikla:

NachaloCikla:
...

...
J*** TeloCikla JN** KonecCikla
JMP KonecCikla
TeloCikla: TeloCikla:
... ...
JMP NachaloCikla JMP NachaloCikla
KonecCikla: KonecCikla:
... ...

Слайд 68 Пример. Алгоритм нахождения НОД
Nachalo:
CMP EAX, EBX

Пример. Алгоритм нахождения НОДNachalo: CMP EAX, EBX JE Konec JNG MetkaBMetkaA:

JE Konec
JNG MetkaB
MetkaA:
SUB EAX,

EBX
JMP Metka
MetkaB:
SUB EBX, EAX
Metka:
JMP Nachalo
Konec:
...

while(A != B)
{
if(A > B)
{
A -= B;
}
else
{
B -= A;
}
}

Реализация алгоритмических структур


Слайд 69 Реализация алгоритмических структур
4. Цикл с постусловием do {

Реализация алгоритмических структур4.	Цикл с постусловием  do { команда; } while(усл);усл+–командаNachalo:

команда; } while(усл);

усл
+

команда

Nachalo:

... ; тело
...

; цикла

Proverka:
...
J*** Nachalo

...

Слайд 70 Реализация алгоритмических структур
Реализация цикла с постусловием на языке

Реализация алгоритмических структур	Реализация цикла с постусловием на языке Ассемблера оказывается настолько

Ассемблера оказывается настолько простой, что часто её используют и

для реализации цикла с предусловием:

JMP Proverka
Nachalo:
... ; тело
... ; цикла

Proverka:
...
J*** Nachalo

...


Слайд 71 Реализация алгоритмических структур
5. Цикл с параметром for(i = A; i

Реализация алгоритмических структур5.	Цикл с параметром for(i = A; i = B;

>= B; i--) { команда; }

MOV ESI, A
Nachalo:
CMP ESI, B
JNLE Konec

... ; тело
... ; цикла

INC ESI
JMP Nachalo

Konec:
...

MOV ESI, A
Nachalo:
CMP ESI, B
JNGE Konec

... ; тело
... ; цикла

DEC ESI
JMP Nachalo

Konec:
...


Слайд 72 Массивы

Массивы

Слайд 73 Массивы
Одним из самых распространенных применений циклов является обработка

Массивы	Одним из самых распространенных применений циклов является обработка массивов*.	* Массив –

массивов*.








* Массив – структурированный тип данных, состоящий из некоторого

числа элементов одного типа.

Слайд 74 Массивы
При работе с массивами необходимо помнить, что все

Массивы	При работе с массивами необходимо помнить, что все элементы массива располагаются в памяти последовательно.	Память				 массив

элементы массива располагаются в памяти последовательно.

Память


массив


Слайд 75 Массивы
Архитектура процессора не накладывает никаких ограничений на смысл

Массивы	Архитектура процессора не накладывает никаких ограничений на смысл и правила использования

и правила использования элементов массивов, т.к. в процессоре не

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

Только программист с помощью составленного им алгоритма обработки определяет, как нужно трактовать последовательность байт (слов, удвоенных слов и т.п.), составляющих массив.

Слайд 76 Массивы
Точно также понятие индекса элемента массива является условным,

Массивы	Точно также понятие индекса элемента массива является условным, поскольку для процессора

поскольку для процессора существуют лишь адреса ячеек памяти.

Поэтому задача

программиста – обеспечить верное вычисление адресов элементов массивов.



Слайд 77 Массивы
В общем случае адрес элемента массива вычисляется по

Массивы	В общем случае адрес элемента массива вычисляется по формуле:база + индекс * размер_элемента

формуле:

база + индекс * размер_элемента



Слайд 78 Массивы
При работе с массивами используются косвенные методы адресации:

– косвенная

Массивы	При работе с массивами используются косвенные методы адресации:	–	косвенная базоваяINC [EBX]	–	косвенная базовая

базовая
INC [EBX]

– косвенная базовая со смещением
INC [EBX – 4]

– косвенная базовая

индексная
INC [EBX + ESI * 4]

и т.д.

Слайд 79 Массивы
Схема последовательной обработки элементов массива:

Массивы	Схема последовательной обработки элементов массива:    MOV , :

MOV ,
:

...
<обработка> [<базовый регистр>]
...
ADD <базовый регистр>, <размер элемента>
...
<конец цикла>:


Слайд 80 Массивы
Пример. Инициализация элементов массива

MOV EBX, offset

МассивыПример. Инициализация элементов массива MOV EBX, offset Massiv ; адрес начала

Massiv ; адрес начала массива
MOV ESI,

0 ; индекс элемента массива
Nachalo:
CMP ESI, N ; дошли до конца?
JNL Konec
MOV dword ptr [EBX], 0 ; инициализация
INC ESI ; индекс следующего элемента
ADD EBX, 4 ; адрес следующего элемента
JMP Nachalo
Konec:
...


Слайд 81 Массивы
В том случае, когда размер элемента массива равен

Массивы	В том случае, когда размер элемента массива равен 1, 2, 4

1, 2, 4 или 8, при вычислении адреса можно

использовать масштабирование:

MOV <базовый регистр>, <адрес массива>
MOV <индексный регистр>, 0
<начало цикла>:
...
<обработка> [<базовый регистр> +
<индексный регистр> * <масштаб>]
...
INC <индексный регистр>
...
<конец цикла>:


  • Имя файла: sistema-komand-mikroprotsessora-intel-80x86-tema-4.pptx
  • Количество просмотров: 133
  • Количество скачиваний: 1