ЗАДАЧА: выполнить упорядочение массива данных, содержащего 70 байт и расположенного с адреса 0150Н по убыванию.
ОТЧЕТ
по лабораторным работам по дисциплине:
«Вычислительные машины, комплексы и сети»
Выполнил:
студент группы 36-62
Дудалова А.М.
Принял:
к.т.н. доцент
Томус Ю. Б.
Альметьевск 2008
ЛАБОРАТОРНАЯ РАБОТА №1
ЗАДАЧА: Взять число из массива, определить четность, сформировать два массива (четный и нечетный). Размер исходного массива 70.
LXI H,0100H ;задаем массив с адреса 0100Н
MVI B,46H ;задаем размер исходного массива
LXI D,0200H ;задаем начальный адрес для нового массива
M2: MOV A,M ;первое число закидываем в аккумулятор
ANI 01H ;проверяем число на четность
JZ M1 ;если число четное, то идем на М1
MOV A,M ;
XCHG ;если нечетное, закидываем его в массив для
нечетных чисел
MOV M,A ;
INX H ;берем следующее число
XCHG
INX H ;берем следующее число
DCRB ;проверяем, все ли элементы массива были
рассмотрены
JNZ M2 ;если нет, то начинаем заново
M3: LXI H,0100H ;переходим к первому элементу
MVI B,46H ;задаем количество повторений
LXI D,0300H ;задаем начальный адрес для четных чисел
M5: MOV A,M ;закидываем первое число в аккумулятор
ANI 01H ;проверяем на четность
JNZ M4 ;если нечетное, то идем на М4
MOV A,M ;
XCHG ; если четное, закидываем в массив с четными
числами
MOV M,A ;
INX H ;берем следующее число
XCHG
INX H ;берем следующее число
DCR B ; проверяем, все ли элементы массива были
рассмотрены
JNZ M5 ;если нет, то повторяем
HLT ;если да, то заканчиваем
M1: INX H ;берем следующее число
DCR B ; проверяем, все ли элементы массива были
рассмотрены
JNZ M2 ;если нет, то идем на М2
JMP M3 ;
M4: INX H ;
DCR B ; проверяем, все ли элементы массива были
рассмотрены
JNZ M5 ;если нет, то идем на М5
HLT ;если да, то заканчиваем
ПРИЛОЖЕНИЕ:
ЛАБОРАТОРНАЯ РАБОТА №2
ЗАДАЧА: Выполнить пересылку массива данных, содержащего 70 байт и расположенного, начиная с адреса 100Н в зону памяти 200Н, при этом расставить элементы массива в убывающем порядке.
LXI D,0200H ;задаем начальный адрес для нового массива
M5: LXI H,0100H ;задаем массив с адреса 0100Н
MVI B,46H ;задаем размер исходного массива
M1: MOV A,M ;закидываем первое число в аккумулятор
DCR B ;проверяем, все ли элементы массива были
рассмотрены
JZ M2 ;если да,то идем на М2
M3: INX H ;берем следующее число
CMP M ;сравниваем его с предыдущим
JZ M1 ;если они равны, то идем на М1
JC M1 ;если больше, идем на М1
DCR B ;проверяем, все ли элементы рассмотрены
JNZ M3 ;если нет, то повторяем
M2:CMP M ;сравниваем последнее число с аккумулятором
JZ M4 ;если разница равна нулю, то идем на М4
DCX H ;берем предыдущий элемент
JMP M2 ;переходим на М2
M4:MVI C,OO ;обнуляем содержимое регистра С
MOV M,C ;обнуляем ячейку памяти первого массива
XCHG ;меняем местами содержимое H и D
MOV M,A ;содержимое аккумулятора записываем в ячейку
памяти первого массива
INX H ;берем следующее число
XCHG ;меняем местами содержимое D и Н
MOV A,E ;проверяем все ли элементы массива были
CPI 46H рассмотрены
JNZ M5 ;если нет, то идем на М5
HLT ;иначе заканчиваем
ПРИЛОЖЕНИЕ
ЛАБОРАТОРНАЯ РАБОТА №3
ЗАДАЧА: выполнить упорядочение массива данных, содержащего 70 байт и расположенного с адреса 0150Н по убыванию.
MVI B, 46H ;Задаём размер массива
M3:MVI D, 46H ;Задаём размер массива
LXI H, 0150H ;Задаём адрес первого элемента массива
M1:DCR D ; проверяем, все ли элементы массива были
рассмотрены
JZ M4 ;если да, то идем на М4
MOV A,M ;помещаем элемент массива в аккумулятор
INX H ;переходим к следующему элементу массива
SUB M ;сравниваем его с предыдущим элементом
JP M1 ;если предыдущий элемент больше, переходим на М1
DCX H ;берем меньшее из двух чисел
MOV A,M ;помещаем его в аккумулятор
INX H ;переходим к следующему элементу
MOV C,M ;помещаем его в регистр С
MOV M,A ;меняем местами два числа массива
DCX H ;
MOV M,C ;
INX H ;переходим к следующим элементам массива
JMP M1 ;переходим к М1
M4:DCR B ; внешний цикл повторяем 70 раз
JZ M2 ;
JMP M3 ;
M2:HLT
ПРИЛОЖЕНИЕ
ЛАБОРАТОРНАЯ РАБОТА №4
ЗАДАНИЕ: сдвинуть массив данных, содержащий 70 байт и расположенного с адреса 0150Н на 2 байта влево, а на освободившееся место поставить число двухбайтовое, равных количеству единиц в перемещаемом массиве.
LXI H,0150H ;задаем начальный адрес массива
MVI B,46H ;задаем размер массива
MVI E,00H ;обнуляем регистр E
M3: MVI C,09H ;считаем количество единиц в массиве
MOV A,M ;закидываем элемент массива в аккумулятор
M1: RLC ;сдвигаем элемент массива на один разряд влево
DCR C ;проверяем, каждый ли разряд рассмотрен
JZ M2 ;если да, то идем на М2
JNC M1 ;если нет, проверяем, 0 или 1, если 0, то проверяем
следующий разряд
INX D ;если 1, то к количеству единиц прибавляем 1
JMP M1 ;переходим на М1
M2:MOV A,M
DCX H
DCX H ;перемещаемся на одну ячейку влево
MOV M,A ;помещаем в эту ячейку предыдущее число
INX H ;перемещаемся на три ячейки вправо
INX H
INX H ;
DCR B ; проверяем, все ли числа рассмотрены
JNZ M3 ;если нет, то повторяем
DCX H ;
MOV M,E ; если да, то помещаем в последнюю ячейку
количество единиц
DCX H
MOV M,D
HLT ;
ПРИЛОЖЕНИЕ:
ЛАБОРАТОРНАЯ РАБОТА №5
ЗАДАНИЕ: произвести обмен содержимым блоков памяти, расположенных по адресу 0100Н и 0200Н. При этом проинвертировать массивы и расставить элементы массивов в возрастающем порядке.
LXI SP,0401H ;указываем ячейку памяти, где будет находиться стек
LXI H,0100H ;задаем начальный адрес первого массива
LXI D,0200H ;задаем начальный адрес второго массива
MVI B,46H ;задаем размеры массивов
M1: MOV A,M ;помещаем первый элемент первого массива в аккумулят.
CMA ;инвертируем этот элемент
XCHG ;переходим на второй массив
MOV C,M ;помещаем элемент второго массива в регистр С
MOV M,A ;помещаем инвертированный элемент первого массива
во второй массив
MOV A,C ;помещаем этот элемент в аккумулятор
CMA ;инвертируем этот элемент
XCHG ;возвращаемся к первому массиву
MOV M,A ;помещаем туда проинвертированный элемент второго
массива
INX H ;переходим к следующим элементам массивов
INX D ;
DCR B ;проверяем, все ли элементы массивов рассмотрены
JNZ M1 ;если нет, то повторяем
MVI B,46H ;
M5: LXI H,040FH ;начинаем с последнего числа
PUSH B ;помещаем размер массива в стек
M6: MOV A,M ;помещаем это число в аккумулятор
DCR B ; проверяем, все ли элементы массивов рассмотрены
JZ M3 ;если да, то идем на М3
DCX H ;перемещаемся на одну ячейку назад
JZ M6 ;
JNC M6 ;если условие выполняется, то продолжаем
DCX H ;перемещаемся на ячейку назад
DCR B ; проверяем, все ли элементы массивов рассмотрены
JNZ M2 ;если нет, то повторяем
INX H ;берем следующее число
MOV D,M ;помещаем его во второй массив
MOV M,A ;содержимое аккумулятора помещаем в первый массив
INX H ;берем следующее число
M3: CMP M ;сравниваем это число с предыдущим
JZ M4 ;если они равны, то переходим на М4
INX H ;берем следующее число
JMP M3 ;переходим на М3
M4: MOV M,D ;элемент второго массива копируем в первый
LDA 0400H ;содержимое ячейки памяти 0400Н помещаем в регистр А
DCR A ;уменьшаем содержимое регистра А
STA 0400H ;содержимое аккумулятора перемещаем в ячейку 0400Н
POP B ;вытаскиваем из стека значение В
JNZ M5 ;если он не равен нулю, то повторяем с М5
MVI B,46H ;
M11: LXI H,060FH ;задаем адрес первой ячейки временного массива
PUSH B ;Bв стек
M8: MOV A,M ;содержимое ячейки памяти нового массива помещаем
;в аккумулятор
DCR B ;проверяем, все ли элементы массива были рассмотрены
JZ M7 ;если да, то переходим на М7
DCX H ;в противном случае переходим к предыдущему элементу
M10: CMP M ;сравниваем его с последующим
JZ M8 ;если они равны, переходим на М8
JNC M8 ;если это число больше, то переходим на М8
DCX H ;переходим на одну ячейку влево
DCR B ; проверяем, все ли элементы массива рассмотрены
JNZ M10 ;если нет, то повторяем
INX H ; переходим к следующему числу
MOV D,M ;перемещаем его во второй массив
MOV M,A ;содержимое аккумулятора помещаем в первый массив
INX H ;переходим к следующему числу
M7: CMP M ;сравниваем его с предыдущим
JZ M9 ;если они равны, переходим на М9
INX H ;смещаемся на ячейку вправо
JMP M7 ;повторяем
M9: MOV M,D ;содержимое второго массива копируем в первый
LDA 0400H ; содержимое ячейки памяти 0400Н помещаем в регистр А
DCR A ;
STA 0400H ;
POP B ;
JNZ M11 ;
HLT ;
ПРИЛОЖЕНИЕ: