Задание для лабораторной работы N 5. Язык Ассемблера для IBM PC гр. 350 - 354 Макроопределения и поразрядные операции. Цель работы: научиться создавать и использовать макроопределения с целью введения команд для работы со словами данных нестандартной разрядности. Задание: Разрядность слова некоторого гипотетического процессора - N бит (число бит для каждого варианта различно и определено в таблице 1). Слова могут принимать положительные или отрицательные значения. Отрицательные значения хранятся в дополнительном коде. Моделирование работы с данными такого вида осуществляется средствами IBM PC (семейство процессоров 80х86). Объект моделирования: массив N-разрядных слов из 15-20 элементов. Элементы располагаются в памяти реальной машины без промежутков (т.е. младшие разряды одного слова и старшие разряды следующего могут размещаться в одном байте). Для решения поставленной задачи написать следующие макроопределения: 1) Чтение элемента из моделируемого массива по его порядковому номеру; 2) Запись элемента в массив на указанное место; 3) Задано в таблице 1 (отдельно для каждого варианта). В некоторых вариантах это макроопределение должно возвращать результат работы в регистре AX. Написать программу на языке ассемблера, в которой задаётся моделируемый массив. Дальнейшие действия с этим массивом описаны для каждого варианта в таблице 1 (номер варианта указан в столбце "В"). Необходимо использовать все разработанные макроопределения. Для всех вычислений нужно использовать исходные, а не результирующие значения элементов. Вывод на экран исходного и результирующего массивов осуществить в виде двух панелей (как в Norton Commander'е). Исходный массив размещается на левой панели, результирующий - на правой. Таблица 1. ┌───┬────┬──────────────────┬────────────────────────────────────────────────┐ │ В │К-во│ Третье │ Действия, которые необходимо │ │ │бит │ макроопределение │ произвести с исходным массивом │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 1 │ 15 │ (отсутствует) │ Отсортировать массив по убыванию. │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 2 │ 18 │ (отсутствует) │ Отсортировать массив по возрастанию. │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 3 │ 14 │ (отсутствует) │ Подсчитывается среднее арифметическое всех │ │ │ │ │ ненулевых элементов. Оно записывается на место │ │ │ │ │ первого нулевого элемента (если он есть) или │ │ │ │ │ на место первого элемента массива (если все │ │ │ │ │ элементы в массиве ненулевые). │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 4 │ 19 │ Целочисленное │ Элемент результирующего массива представляет │ │ │ │ деление со зна- │ собой остаток от деления соответствующего ему │ │ │ │ ком двух 19-раз- │ по номеру элемента исходного массива на наи- │ │ │ │ рядных слов. │ меньший по модулю ненулевой элемент исходного │ │ │ │ │ исходного массива. │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 5 │ 20 │ Умножение со │ Элемент результирующего массива представляет │ │ │ │ знаком двух 20- │ собой произведение соответствующего ему по но- │ │ │ │ разрядных слов. │ меру элемента исходного массива и следующего │ │ │ │ │ за ним элемента. Для последнего элемента в ка- │ │ │ │ │ честве сомножителя берётся первый элемент. │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 6 │ 13 │ Вычисление сред- │ Все нулевые элементы массива заменяются сред- │ │ │ │ него арифметиче- │ ним арифметическим наибольшего и наименьшего │ │ │ │ ского двух 13- │ элементов массива. │ │ │ │ разрядных слов. │ │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 7 │ 21 │ Сравнение i-го и │ Массив сортируется по возрастанию значений │ │ │ │ j-го элементов: │ элементов. │ │ │ │ если ">", AX=-1; │ │ │ │ │ если "=", AX=0; │ │ │ │ │ если "<", AX=1. │ │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 8 │ 19 │ Поиск заданного │ В массиве подсчитываются все вхождения неко- │ │ │ │ значения в мас- │ торого наперёд заданного значения. Результат │ │ │ │ сиве: AX={номер │ записывается на место первого элемента в мас- │ │ │ │ элемента} (если │ сиве. │ │ │ │ не найдено, -1). │ │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 9 │ 22 │ Арифметический │ Каждый элемент массива сдвигается вправо на │ │ │ │ сдвиг элемента │ число разрядов, которое определяется содержи- │ │ │ │ вправо на задан- │ мым младших пяти разрядов предыдущего элемен- │ │ │ │ ное число разря- │ та. Для первого элемента в качестве предыдуще- │ │ │ │ дов (до 22). │ го берётся последний. │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 1 │ 17 │ Циклический │ Каждый элемент массива циклически сдвигается │ │ 0 │ │ сдвиг элемента │ вправо на определённое в программе число раз- │ │ │ │ вправо на задан- │ рядов. │ │ │ │ ное число разря- │ │ │ │ │ дов (до 17). │ │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 1 │ 15 │ Подсчёт числа │ Каждый элемент результирующего массива прини- │ │ 1 │ │ единиц в двоич- │ мает значение, равное количеству единиц в дво- │ │ │ │ ном представле- │ ичном представлении элемента исходного массива │ │ │ │ нии элемента. │ с соответствующим номером. │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 1 │ 23 │ Переворачивание │ Каждый отрицательный элемент массива перево- │ │ 2 │ │ 23-разрядного │ рачивается, т.е. старший бит меняется с млад- │ │ │ │ элемента. │ шим, 2-й с начала - со 2-м с конца и т.д. │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 1 │ 18 │ Вычисление сред- │ На место каждого элемента массива с чётным │ │ 3 │ │ него арифметиче- │ порядковым номером записывается среднее ариф- │ │ │ │ ского двух 18- │ метическое предыдущего и следующего элементов. │ │ │ │ разрядных слов. │ Если последний элемент имеет чётный номер, то │ │ │ │ │ в качестве следующего для него берётся первый. │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 1 │ 21 │ Вычитание задан- │ От каждого элемента массива отнять среднее │ │ 4 │ │ ного числа из │ арифметическое всех элементов. Если при вычи- │ │ │ │ 21-разрядного │ тании произошёл перенос или заём, элементу со- │ │ │ │ элемента с на- │ ответственно присваивается наибольшее или наи- │ │ │ │ сыщением. │ меньшее из допустимых значений. │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 1 │ 17 │ Целочисленное │ Каждый элемент массива делится на наименьший │ │ 5 │ │ деление со зна- │ элемент, больший единицы (разумеется, положи- │ │ │ │ ком двух 17-раз- │ тельный). На место элемента записывается част- │ │ │ │ рядных слов. │ ное от деления. │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 1 │ 20 │ Замена младших │ У каждого элемента массива заменить младшие │ │ 6 │ │ 10 разрядов эле- │ десять разрядов на соответствующие биты следу- │ │ │ │ мента. │ ущего элемента. Для последнего элемента в ка- │ │ │ │ │ честве следующего берётся первый. │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 1 │ 14 │ Поиск элемента, │ Каждый элемент с чётным номером "округляется" │ │ 7 │ │ ближайшего к за- │ в сторону ближайшего по значению соседнего │ │ │ │ данному числу: │ элемента (приравнивается к нему). Для послед- │ │ │ │ если i-й ближе, │ него элемента соседними являются первый и │ │ │ │ чем j-й, то AX=0,│ предпоследний элементы массива. │ │ │ │ иначе AX=1. │ │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 1 │ 22 │ Подсчёт числа │ В двоичном представлении элемента массива-ре- │ │ 8 │ │ единиц в двоич- │ зультата единицами заполняется столько младших │ │ │ │ ном представле- │ разрядов, сколько единиц содержится в двоичном │ │ │ │ нии элемента. │ представлении соответствующего элемента исход- │ │ │ │ │ ного массива. Остальные разряды заполняются │ │ │ │ │ нулями. │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 1 │ 19 │ Сложение двух │ К отрицательным элементам массива прибавить │ │ 9 │ │ 19-разрядных │ наибольший элемент (положительный), к положи- │ │ │ │ слов. │ тельным - наименьший (отрицательный). │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 2 │ 13 │ Сравнение i-го и │ Рассматриваются пары элементов: первый с по- │ │ 0 │ │ j-го элементов: │ следним, второй с предпоследним и т.д. Если │ │ │ │ если ">", AX=-1; │ элементы в паре стоят в порядке возрастания, │ │ │ │ если "=", AX=0; │ оба элемента заменяются на единицу, если в по- │ │ │ │ если "<", AX=1. │ рядке убывания - на минус единицу, если эле- │ │ │ │ │ менты равны - на ноль. │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 2 │ 25 │ Изменение знака │ Изменить знак всех отрицательных элементов │ │ 1 │ │ элемента. │ исходного массива. │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 2 │ 14 │ Циклический │ Каждый положительный элемент массива цикли- │ │ 2 │ │ сдвиг элемента │ чески сдвигается влево на число разрядов, оп- │ │ │ │ влево на задан- │ ределяемое содержимым четырёх младших разрядов │ │ │ │ ное число разря- │ следующего элемента. Для последнего элемента в │ │ │ │ дов (до 14). │ качестве следующего берётся первый. │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 2 │ 21 │ (отсутствует) │ Отсортировать последовательность всех отрица- │ │ 3 │ │ │ тельных элементов массива по убыванию. Все ос- │ │ │ │ │ тальные элементы должны остаться на своих мес- │ │ │ │ │ тах. │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 2 │ 17 │ (отсутствует) │ Отсортировать последовательность всех положи- │ │ 4 │ │ │ тельных элементов массива по возрастанию. Все │ │ │ │ │ остальные элементы должны остаться на своих │ │ │ │ │ местах. │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 2 │ 21 │ Арифметический │ Каждый элемент массива сдвигается вправо на │ │ 5 │ │ сдвиг элемента │ число разрядов, которое определяется его по- │ │ │ │ вправо на задан- │ рядковым номером в массиве. │ │ │ │ ное число разря- │ │ │ │ │ дов (до 21). │ │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 2 │ 14 │ Вычисление сред- │ Элемент массива-результата представляет собой │ │ 6 │ │ него арифметиче- │ среднее арифметическое всех элементов исходно- │ │ │ │ ского всех эле- │ го массива с номерами, не превышающими номер │ │ │ │ ментов с i-го по │ вычисляемого элемента (например, с первого по │ │ │ │ j-й. │ пятый - для вычисления пятого элемента). │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 2 │ 15 │ (отсутствует) │ Расположить отрицательные элементы в начале │ │ 7 │ │ │ массива, после них - все остальные. Исходный │ │ │ │ │ порядок элементов внутри обеих последователь- │ │ │ │ │ ностей сохраняется. │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 2 │ 23 │ Арифметический │ Все элементы с чётными значениями сдвигаются │ │ 8 │ │ сдвиг элемента │ вправо (делятся на 2), с нечётными - сдвигают- │ │ │ │ на 1 бит в за- │ ся влево (умножаются на 2). │ │ │ │ данную сторону. │ │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 2 │ 20 │ Циклический │ Каждый элемент циклически сдвигается на число │ │ 9 │ │ сдвиг элемента │ разрядов, определяемое содержимым младших пяти │ │ │ │ на заданное чис- │ разрядов предыдущего элемента. Если предыдущий │ │ │ │ ло разрядов (до │ элемент - положительный, производится сдвиг │ │ │ │ 20) в заданную │ вправо, если отрицательный - влево. Для перво- │ │ │ │ сторону. │ го элемента в качестве предыдущего берётся по- │ │ │ │ │ следний. │ ├───┼────┼──────────────────┼────────────────────────────────────────────────┤ │ 3 │ 19 │ Вычисление суммы │ На место каждого нулевого элемента массива │ │ 0 │ │ всех элементов с │ записать сумму всех элементов, расположенных │ │ │ │ i-го по j-й. │ после него. Если нет нулевых элементов, про- │ │ │ │ │ извести те же действия для наименьшего элемен- │ │ │ │ │ та. │ └───┴────┴──────────────────┴────────────────────────────────────────────────┘