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

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

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

2023-01-01 38
Команды передачи управления. Команда безусловного перехода. Команды условного перехода. 0.00 из 5.00 0 оценок
Заказать работу

Команды передачи управления.

 

Команда безусловного перехода.

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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.034 с.