Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

ЛАБОРАТОРНАЯ РАБОТА № ___

Тема лабораторной работы: написание программы на языке ассемблер для обработки одномерных массивов.

Цель работы: изучение команд передачи управления (Jmp, Jххх, Loop) на примерах программ работы с массивами.

1. Теоретические положения.

1.1. Организация циклов в программе

Цикл можно организовать с использованием команд условного перехода (Jххх, где ххх – сокращенное обозначение различных условий перехода, например JNZ Jump if Not Zero, JGE Jump if Greater or Equal, и т. п.

Пример:

XOR BX, BX

Label1: ADD BX, 20d

CMP BX, 443d ; сравнить (compare) 1-й операнд с вторым

JL Label1 ; переход, если «меньше» (Jump if Less)

Цикл можно также организовать с помощью команд цикла LOOP (LOOPE/LOOPNE). Команда LOOP использует регистр CX в качестве счетчика цикла, она уменьшает регистр CX на 1 и передает управление на метку, если содержимое CX не равно 0. Если вычитание 1 из регистра CX привело к его обнулению, команда LOOP не делает перехода и выполняется следующая за нею команда.

Пример:

MOV CX, LOOP_COUNT

Label2: . . . . . . ; …тело цикла

LOOP Label2

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

Если LOOP_COUNT был равен 0, то цикл выполнится 65536 раз!

Команда LOOPE –цикл, пока [(флаг нуля = 1) И (CX не 0)]. Выход, если [(флаг нуля = 0) ИЛИ (CX = 0)]. Тем самым становится возможным двойственное завершение цикла.

Команда LOOPNE – наоборот, выход из цикла, если флаг нуля = 0 ИЛИ если в регистре CX получился 0. То есть, также возможно двойственное завершение цикла.

НЕ нашли? Не то? Что вы ищете?

Имеется еще команда JCXZ – «переход, если CX = 0». Команда не проверяет ни одного флага и не влияет ни на один из них.

Эта команда может, например, применяться в начале цикла, чтобы пропустить тело цикла, если переменная счетчика (CX) равна нулю.

1.2. Организация последовательного перебора элементов одномерного массива

Для организации последовательного доступа к элементам массива необходимо использовать один из следующих методов косвенной адресации:

-  базовая – в регистр ВХ загружается адрес начала массива, затем в цикле значение регистр ВХ увеличивается на 2, если элемента массива равна слову, или на 1 если – байту.

-  индексная – аналогично предыдущему, только адрес начала массива загружается в один из индексных регистров (SI, DI).

-  В базовая со смещением – в регистр ВХ загружается 0. При адресации к элементу в команде указываем [BX + A], где А – имя массива. Используются и такие виды записи: [A+BX ] или A [BX ]. Затем в цикле значение регистра ВХ увеличивается на 2, если длина элемента массива равна слову, или на 1 если – байту.

-  индексная со смещением – аналогично предыдущему, только 0 загружается в SI либо DI. Адресация элемента выглядит как [SI +A]; возможно [A+ SI] или A [SI].

Пример приведен в таблице.

Таблица

Пример: подсчитать количество отрицательных элементов массива А(20).

Dosseg

.model small

.stack 100h

.data

A dw 7, -3, 5, 2, 4, 8, -11, 27,

6, 4, 8, -9, 5, 3, 11, 1,

12, -7, 14, 9

count db 0

.code

mov ax,@data

mov ds, ax

mov cx,20

sub si, si

L1: mov bx, [a+si]

cmp bx, 0

JGE L2

inc count

L2: add si,2

loop L1

mov ah, 4ch

int 21h

end

;«сокращенные» директивы

;описания сегментов

;могут использоваться

;объявляем массив чисел

;объявляем переменную счетчик

;тоже сокращ. директива опис. сегмента

; устанавливаем регистр DS

; в начало сегмента данных

; заносим длину массива

; обнуляем SI

; заносим в BX значение из массива

; сравниваем с 0

; если >=0, то переход на метку L2

; увеличиваем счетчик

; переходим к следующему элементу

; пока не конец – на L1

; 4Ch – функция выхода из

; программы по 21h прерыванию

2. Порядок выполнения работы

2.1. Составить программу для обработки элементов одномерного массива согласно заданному варианту. Варианты заданий даны в приложении А. Длина элементов исходного массива задается директивой DW. Значение элементов массива выбрать для контрольного просчета самостоятельно.

2.2. Получить загрузочный модуль.

2.3. Протестировать выполнение программы в отладчике.

3. Содержание отчета

3.1.  Исходные данные для выполнения работы.

3.2.  Листинг программы.

3.3.  Анализ результатов выполнения программы.

3.4.  Выводы.

Приложение А

Варианты заданий к лабораторной работе

Вари-ант

Задание

1.   

Дан массив С[16]. В i-том элементе массива обнулить i-тый бит. Найти сумму элементов нового массива.

2.   

Дан массив С[15] заполненный 0, 1, -1 произвольным образом. Найти сумму элементов массива. Если результат >0 то инвертировать массив.

3.   

Дан массив В[52]. В отрицательных элементах обнулить старшие байты. Определить как изменится местоположение максимального элемента

4.   

Подсчитать все отрицательные элементы массива В[45]. Найти минимальный отрицательный элемент

5.   

Дан массив С[20]. Найти минимальный элемент с установленным 13 битом и максимальный элемент с установленным 3 битом. Определить разницу между полученными значениями.

6.   

Дан массив В[45]. Найти минимум среди элементов содержащих единицу в разрядах 11 и 7.

7.   

Дан массив С[37]. Найти минимум среди нечетных элементов массива, найти максимум среди четных. Четным считается элемент, содержаний четное количество единиц.

8.   

Дан массив В[45]. Поменять старшие и младшие байты элементов массива местами. Найти положение максимального элемента до и после перестановки.

9.   

Дан массив С[35]. Найти максимум в массиве и вычесть его из всех остальных элементов.

10.   

Дан массив В[2]. Заполнить его до размера 17 элементов таким образом, что бы каждый последующий элемент массива был равен сумме двух предыдущих.

11.   

Дан массив А[35]. Найти сумму старших байтов элементов массива, которые содержат 1 в 0 бите и 0 в 10 бите.

12.   

Дан массив А[16]. Первую четверть массива поменять со второй, а третью с четвертой.

13.   

Дан массив А[14]. Поменять местами 0-ой и 1-ый элементы массива, 2-ой и 3-й, и т. д.

14.   

Дан массив С[37]. Найти максимум. В массиве поменять местами младшие и старшие байты. Найти новый максимум. Сложить полученные числа.

15.   

Дан массив С[16] состоящий из 0 и 1. Составить число следующим образом – i-тый бит равен i-тому элементу массива.

16.   

Дан массив В[16]. Определить среднее арифметическое массива, не используя команду деления.

17.   

Дан массив А[56]. Найти сумму отрицательных и сумму положительных элементов массива, инвертировать суммы.

18.   

Дан массив А[32]. Найти минимальный элемент нового массива В, элементы которого получены по следующему правилу: В[i] равен числу единиц i-того элемента массива А, если А[i]<0 ; иначе В[i] равен количеству нулей А[i]

СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ

1.  Асемблер. Язык и программирование для IBM PC. .К: Век+, К.: НТИ, 2003.- 736 с.

2.  Персональные ЭВМ IBM PC и XT. Программирование на языке ассемблера. –М.: Радио и связь, 1991.- 336 с.

3.  Assembler для DOS, Windows и Unix. – М.: ДМК, 1999. – 640 с.