Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Топ:
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Когда производится ограждение поезда, остановившегося на перегоне: Во всех случаях немедленно должно быть ограждено место препятствия для движения поездов на смежном пути двухпутного...
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Интересное:
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Дисциплины:
2023-01-01 | 38 |
5.00
из
|
Заказать работу |
|
|
Команды передачи управления.
Команда безусловного перехода.
jmp метка
Используется в программе для организации безусловного перехода как внутри текущего сегмента команд, так и за его пределы. При определенных условиях в защищенном режиме работы команда jmp может использоваться для переключения задач. Команду jmp применяют для осуществления ближних и дальних безусловных переходов без сохранения контекста точки перехода.
Команды условного перехода.
Команды для работы с беззнаковыми числами: JA/JNBE – переход, если больше; JAE/JNB/JNC - переход, если больше или равно; JB/JNAE/JC - переход, если меньше; JBE/JNA - переход, если меньше или равно.
Команды для работы со знаковыми числами: JG/JNLE - переход, если больше; JGE/JNL - переход, если больше или равно; JL/JNGE - переход, если меньше; JLE/JNG - переход, если меньше или равно; JNS - переход, если больше нуля; JS - переход, если меньше нуля.
Команды, общие для знаковых и беззнаковых чисел: JE/JZ - переход, если равно переход, если ноль; JNE/JNZ - переход, если не равно переход, если не ноль.
Команды вызова процедур. Команды организации циклов.
Команды вызова процедур.
call цель
Передача управления близкой или дальней процедуре с запоминанием в стеке адреса точки возврата.
push источник
Размещение содержимого операнда источник в стеке.
pop приемник
Извлечение слова или двойного слова из стека.
ret ret число
Возврат управления из процедуры вызывающей программе.
Команды организации циклов.
loop метка
Организация цикла со счетчиком в регистре cx.
loope/loopz метка loopne/loopnz метка
Организация цикла со счетчиком в регистре cx с учетом флага zf.
Работа с массивами. Одномерные массивы, двумерные статические массивы.
|
Одномерные массивы.
Объявление массива на языке Си:
short mas[3];
short *pt;
pt = mas;
Адрес элемента массива:
pt + 1 ≡ mas + 1 ≡ &mas[1]
Значение элемента массива:
*(pt + 1) ≡ *(mas + 1) ≡ mas[1]
Имя массива является его начальным адресом
Пример. Найти сумму элементов одномерного массива целых чисел
void InputArrKey(int *a, int n);
void PrintArr(int *a, int n);
extern "C" int const n = 5;
extern "C" int a[5];
extern "C" int s;
extern "C” void sum();
MODEL FLAT, C
DATA
EXTRN a: DWORD, n: DWORD, s: DWORD
CODE
PUBLIC C sum
Sum PROC
XOR EBX, EBX
XOR EAX, EAX
MOV ECX, n
JECXZ end1
cycle: ADD EAX, DWORD PTR a[EBX]
ADD EBX, 4
LOOP cycle
End1: MOV s, EAX
RET
Sum ENDP
END
add EAX, DWORD PTR a[EBX]
add EAX, DWORD PTR [a + EBX]
add EAX, DWORD PTR [EBX]+a
В качестве индексного регистра можно использовать регистры EBX, ESI, EDI
Двумерные статические массивы.
Объявление статического массива
на языке Си:
short mas [3][2];
Адрес элемента массива:
mas ≡ &mas[0][0]
Значение элемента массива:
**mas ≡ mas[0][0]
Адрес элемента массива:
mas + 1 ≡ &mas[1][0]
Значение элемента массива:
**(mas + 1) ≡ mas[1][0]
Пример. Найти сумму элементов двумерного массива целых чисел
#include <time.h>
extern "C" int const n = 3;
extern "C" int const m = 2;
extern "C" int a[n][m];
extern "C" int s;
extern "C" void sum2x();
MODEL FLAT, C
DATA
EXTRN a: DWORD, n: DWORD,
m: DWORD, s: DWORD
M4 DD?
CODE
PUBLIC C sum2x
Sum2x PROC
XOR EBX, EBX
XOR EAX, EAX
MOV EDX, m
SHL EDX, 2
MOV m4, EDX
MOV ECX, n
JECXZ endl
Cycle1: PUSH ECX
XOR ESI, ESI
MOV ECX, m
JECXZ endl
cycle2:
ADD EAX, DWORD PTR a[EBX][ESI]
ADD ESI, 4
LOOP cycle2
ADD EBX, m4
POP ECX
LOOP cycle1
Endl: MOV s, EAX
RET
Sum2x ENDP
END
Работа с массивами. Двумерные динамические массивы.
Двумерные динамические массивы.
Объявим динамический массив на языке Си:
short **mas;
mas ≠ &mas[0][0]
mas + 1 ≠ &mas[1][0]
Адрес элемента массива:
*mas ≡ &mas[0][0]
Значение элемента массива:
|
**mas ≡ mas[0][0]
Адрес элемента массива:
*(mas + 1) ≡ mas[1][0]
Значение элемента массива:
**(mas + 1) ≡ mas[1][0]
Пример. Найти сумму элементов двумерного массива целых чисел.
void InputArrDyn(int **b,int n,int m)
{
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
b[i][j] = rand()/1000;
}
void PrintArrDyn(int **b,int n,int m)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cout << b[i][j] << "\t";
cout << endl;
}
}
DATA
EXTRN b: DWORD, n: DWORD,
m: DWORD, s: DWORD
CODE
PUBLIC C sum2xDyn
Sum2xDyn PROC
MOV EDX, b
MOV EBX, [EDX]
XOR EAX, EAX
MOV ECX, n
JECXZ endl
Cycle1: PUSH ECX
XOR ESI, ESI
MOV ECX, m
JECXZ endl
cycle2:
ADD EAX, DWORD PTR [ESI][ESI]
ADD ESI, 4
LOOP cycle2
MOV EBX, [EDX+4]
POP ECX
LOOP cycle1
Endl: MOV s, EAX
RET
sum2xDyn ENDP
END
Команды обработки строк.
Команды обработки строк позволяют работать с последовательностью символов (байт) как с единым целым. В языке Си строка – последовательность символов, оканчивающаяся символом
с кодом ноль «\0». Нулевой символ не входит в строку. Для Ассемблера содержимое строки не имеет значения, главное – длина символа. Длина символа равна байту, слову или двойному слову.
Для обработки последовательности символов (байт, слов, двойных слов) используются команды-префиксы:
· REP – повторять, пока ECX ¹ 0
· REPE/REPZ – повторять, пока ECX ¹ 0 или пока ZF = 1
· REPNE/REPNZ – повторять, пока ECX ¹ 0 или пока ZF = 0
Адрес строки-источника находится в регистре ESI. Адрес строки-приемника находится в регистре EDI. В процессе выполнения строковых команд регистры ESI и EDI автоматически изменяются на длину символа строки в зависимости от флага направления (DF – Direction Flag).
Если DF = 0, то значения ESI и EDI увеличиваются (строка обрабатывается слева направо – в сторону больших адресов). Если DF = 1, то значения ESI и EDI уменьшаются (строка обрабатывается справа налево – в сторону меньших адресов). Флаг DF устанавливается и сбрасывается командами STD и CLD
Команды пересылки:
· MOVSB – копирование строки байтов
· MOVSW – копирование строки слов
· MOVSD – копирование строки двойных слов
Команды сравнения:
· CMPSB – сравнение строк байтов
· CMPSW – сравнение строк слов
· CMPSD – сравнение строк двойных слов
Команды поиска (сканирования):
· SCASB – сканирование строки байт (сравнение элементов строки с AL)
|
· SCASW – сканирование строки слов (регистр AX)
· SCASD – сканирование строки двойных слов (регистр EAX)
· Изменяется регистр EDI
Команды чтения из строки:
· LODSB – чтение байта из строки в AL
· LODSW – чтение слова из строки в AX
· LODSD – чтение двойного слова из строки в регистр EAX
· Изменяется регистр ESI
Команды записи в строку:
· STOSB – запись байта из регистра AL в элемент строки
· STOSW – запись слова из регистра AX в элемент строки
· STOSD – запись двойного слова из регистра EAX в элемент строки
· Изменяется регистр EDI
|
|
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!