Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчет(2).docx
Скачиваний:
5
Добавлен:
17.08.2019
Размер:
568.59 Кб
Скачать

Индивидуальное задание №1: Транспонирование матрицы 4x4

Задание

Составить программу для транспонирования матрицы 4 на 4, которая хранится в памяти в виде массива данных, начиная с адреса H = 001 L = 000.

Анализ задания

Для того чтобы выполнить транспонирование матрицы необходимо каждый элемент матрицы поменять местами с симметричным ему элементом. Для этого, на основании номеров строки и столбца (j и i), вычисляются линейные адреса текущего элемента матрицы и симметричного ему элемента. Затем, по вычисленным адресам, из памяти считываются эти элементы, обмениваются местами и записываются в память на новые места.

Транспонирование выполняется сначала для верхнего левого угла матрицы 1х1, затем для подматрицы 2х2, 3х3 и в конце 4х4.

Назначение РОН:

B – хранение счетчика i;

C – хранение счетчика j;

D – запоминание, считанного из памяти элемента столбца;

E – хранение адреса элемента столбца;

H – хранение номера страницы памяти, на которой лежит массив (H = 001);

L – хранение линейных адресов элементов строки и столбца;

A – вычисление адресов элементов строки и столбца, а так же временное хранение считанного из памяти элемента строки.

Схема алгоритма

см. следующую страницу

Текст программы

Адрес

Код команды

Мнемоника

Комментарии

000

016

MVI C

Обнуление счетчика j

001

000

B2

002

046

MVI H

Загрузка в H старшего байта адреса исходной матрицы

003

001

B2

004

006

MVI B

Обнуление счетчика i

005

000

B2

006

171

MOV A, C

Загрузка в A счетчика j; (А) = j

007

067

STC

Умножение j на 4; (A) = j*4. Умножение реализовано как сдвиг содержимого аккумулятора влево на 2 разряда. Используется сдвиг через перенос и перед каждым сдвигом обнуляется флаг переноса.

010

077

CMC

011

027

RAL

012

067

STC

013

077

CMC

014

027

RAL

015

200

ADD B

Добавление i к A; (A) = j*4 + i. Получение адреса элемента столбца.

016

157

MOV L, A

Запоминание адреса столбца в L и E

017

137

MOV E, A

020

126

MOV D, M

Считывание элемента столбца из памяти

021

170

MOV A, B

(A) = i

022

167

STC

(A) = i*4.

023

077

CMC

024

027

RAL

025

067

STC

026

077

CMC

027

027

RAL

030

201

ADD C

(A) = j + i*4. Адрес элемента строки.

031

157

MOV L, A

Запоминание адреса строки в L

032

176

MOV A, M

Считывание элемента строки из памяти

033

162

MOV M, D

Запись элемента столбца в память на место элемента строки

034

153

MOV L, E

Запись адреса столбца в L

035

167

MOV M, A

Запись элемента строки в память на место элемента столбца

036

170

MOV A, B

Запись i в A; (A) = i

037

221

SUB C

Вычитание j из i; (A) = i-j

040

312

JZ

Условный переход по нулю.

041

047

B2

042

000

B3

043

004

INR B

Инкрементация i; (B) = i+1

044

303

JMP

Безусловный переход

045

006

B2

046

000

B3

047

076

MVI A

Запись в A числа 003; (A) = 003

050

003

B2

051

221

SUB C

Вычитание j из A; (A) = 003 - j

052

312

JZ

Условный переход по нулю.

053

061

B2

054

000

B3

055

014

INR C

Инкрементация j; (C) = j+1

056

303

JMP

Безусловный переход

057

004

B2

060

000

B3

061

166

HLT

Останов

Умножение на 4 в этой программе реализовано как сдвиг влево на 2 разряда с записью в младшие разряды нулей. Но в процессоре Intel 8080 аппаратно реализованы только циклические сдвиги. В результате, чтобы в младшие разряды записывались нули, в программе используется циклический сдвиг через перенос с предварительным сбросом флага переноса в ноль.

Так же, из-за малого количества регистров общего назначения, во время разработки программы много времени ушло, на то чтобы придумать способ назначения регистров блока РОН, таким образом, чтобы не пришлось использовать память. В результате аккумулятор используется для временного хранения, считанного из памяти элемента строки.

Результаты

Адрес

Исходное содержимое

Результат

H

L

001

000

000

000

001

001

001

004

001

002

002

010

001

003

003

014

001

004

004

001

001

005

005

005

001

006

006

011

001

007

007

015

001

010

010

002

001

011

011

006

001

012

012

012

001

013

013

016

001

014

014

003

001

015

015

007

001

016

016

013

001

017

017

017

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]