Привет! Необходимо сделать лабораторную работу на асм (fasm) в эмуляторе emu8086. Задание под спойлером Спойлер: Задания 4. Используя прямую (первый вариант) и косвенную (второй вариант) адресацию, написать программы на ассемблере, выполняющие алгоритмы преобразований. Примечания к кодированию программ: 1) программа с использованием прямой адресации будет похожа на приведенную в предыдущей лабораторной работе программу, только непосредственные значения смещений в командах должны измениться в соответствии с заданным алгоритмом; 2) для варианта косвенной адресации зашлите адреса начала массивов в базовый и индексный регистры, например командами: MOV BX, SOURCE MOV DI, DEST, и далее используйте регистры BX и DI для адресации элементов массивов. Провести отладку программы и проверить получаемые результаты. 4.1. Задать одномерный массив, состоящий из 10 элементов. Заполнить массив константами. Переместить заданный массив в другую область памяти (другой массив), поменяв местами элементы с четными и нечетными номерами (поставив каждый элемент с четным номером на место нечетного элемента и каждый элемент с нечетным номером – на место четного) а) элементы массива – однобайтовые; б) элементы массива – двухбайтовые; 4.2. Задать одномерный массив, состоящий из 10 элементов. Заполнить массив константами. Переместить в другую область памяти элементы с нечетными номерами а) элементы массива – однобайтовые; б) элементы массива – двухбайтовые; 4.3. Задать одномерный массив, состоящий из 10 элементов. Заполнить массив константами. Переместить в другую область памяти элементы с четными номерами а) элементы массива – однобайтовые; б) элементы массива – двухбайтовые; 4.4. Задать одномерный массив, состоящий из 10 элементов. Заполнить массив константами. Создать новый одномерный массив, поместив в него на место элементов с четными номерами элементы заданного массива с нечетными номерами и обнулив элементы нового массива с нечетными номерами а) элементы массива – однобайтовые; б) элементы массива – двухбайтовые; 4.5. Задать одномерный массив, состоящий из 10 элементов. Заполнить массив константами. Создать новый одномерный массив, поместив в него на место элементов с нечетными номерами элементы заданного массива с нечетными номерами и заполнив элементы нового массива с четными номерами максимальными значениями констант а) элементы массива – однобайтовые; б) элементы массива – двухбайтовые. 5. Разработать программу на языке ассемблера с использованием команд перехода и организации циклов 5.1. Преобразовать символьную строку заданной длины, изменив все строчные буквы латинского алфавита на прописные. 5.2. Определить, сколько цифровых и нецифровых символов присутствует в заданной символьной строке. 5.3. Определить, сколько символов кириллицы и латиницы присутствует в заданной символьной строке. 5.4. Определить, сколько знаков отношения (<,>,=) присутствует в заданной символьной строке. 5.5. Преобразовать заданную символьную строку, изменив прописные буквы латиницы на их порядковые номера в алфавите. Примечание к кодированию заданий 5.1-5.5: при написании алгоритмов преобразований необходимо использовать таблицу кодов ASCII. 5.6. Подсчитать количество положительных и отрицательных элементов в заданном векторе и определить, каких элементов в векторе больше а) элементы вектора однобайтовые; б) элементы вектора двухбайтовые. 5.7. Подсчитать количество нулевых и ненулевых элементов в заданном векторе и определить, каких элементов в векторе больше а) элементы вектора однобайтовые; б) элементы вектора двухбайтовые. 5.8. Подсчитать количество неотрицательных элементов в заданном двумерном массиве а) элементы массива однобайтовые; б) элементы массива двухбайтовые. 5.9. Подсчитать количество неположительных элементов в заданном двумерном массиве а) элементы массива однобайтовые; б) элементы массива двухбайтовые. 5.10. Подсчитать количество положительных и отрицательных элементов в заданном двумерном массиве и определить, каких элементов в нем больше а) элементы массива однобайтовые; б) элементы массива двухбайтовые. Примечание к кодированию пунктов 5.8-5.10: в программе необходимо реализовать такую конструкцию, как “вложенные циклы”. Кроме того, понятие массива и индексации массива весьма условны, ибо в памяти ЭВМ элементы массива располагаются последовательно, строка за строкой, в результате чего физическая структура двумерного массива и вектора (одномерного массива) оказываются одинаковыми. Отличие двумерного массива и вектора заключается в интерпретации области памяти, отведенной этим структурам. Наращивание индекса элемента структуры определяется алгоритмом обработки. 6. Задан массив чисел из 10 элементов (для двумерного 10х10) (элементы массива от 0 до 9) 6.1. Найти первый максимальный элемент вектора и вывести на экран его индекс: а) элементы вектора однобайтовые; б) элементы вектора двухбайтовые. 6.2. Найти максимальный элемент вектора и подсчитать и вывести на экран количество таких элементов а) элементы вектора однобайтовые; б) элементы вектора двухбайтовые. 6.3. Найти первый максимальный элемент двухмерного массива и вывести на экран его индекс: а) элементы массива однобайтовые; б) элементы массива двухбайтовые. 6.4. Найти сумму всех отрицательных элементов двухмерного массива, а среди положительных найти максимальный и вывести на экран его индекс: а) элементы массива однобайтовые; б) элементы массива двухбайтовые. 6.5. Найти сумму всех положительных элементов двухмерного массива, а среди отрицательных найти минимальный и указать его местоположение: а) элементы массива однобайтовые; б) элементы массива двухбайтовые. 6. Найти минимальный и максимальный элементы двухмерного массива и вывести на экран их индекс: а) элементы массива однобайтовые; б) элементы массива двухбайтовые. Примечания к реализации вывода значений элементов и их индексов на экран дисплея: - десятичная цифра отличается от символа этой цифры на 30h, в чем легко убедиться, изучив таблицу кодов ASCII. Например, если искомый максимальный элемент записан в переменную max, то фрагмент программы для его вывода на экран дисплея может быть следующим: mov dl, max add dl, 02h int 21h - предыдущий фрагмент применим в случае, если максимальное значение элемента является однозначным. Если элементы массива двухзначные (лежат в диапазоне от 10 до 99), то сначала необходимо выделить отдельные цифры, а затем их последовательно их распечатать: mov al, max cbw ;преобразуем байт в полное слово div byte c ;константа с объявлена в сегменте данных как c equ 10 mov dl,al ;старшую цифру помещаем в dl add dl, 02h ; и выводим ее на экран int 21h mov dl,ah ;младшую цифру помещаем в dl add dl, 02h ; и выводим ее на экран int 21h