Пр о ц е с с о р TMS 3 2 0C4 x
          
        
        
          
            86
          
        
        
          
            
              Подпрограмма умножения матрицы на вектор
            
          
        
        
          ; Входные параметры подпрограммы:
        
        
          ;
        
        
          AR0 - адрес первого элемента первой строки матрицы M
        
        
          ;
        
        
          AR1 - адрес первого элемента вектора-множителя V
        
        
          ;
        
        
          AR2 - адрес первого элемента вектора-произведения P
        
        
          ;
        
        
          AR3 - количество строк матрицы минус единица (K-1)
        
        
          ;
        
        
          IR0  - количество колонок матрицы (N)
        
        
          ; Используемые регистры: AR0,AR1,AR2,AR3,IR0,R0,R2,RC,RE,RS
        
        
          ; Выходные данные в массиве P[ ]
        
        
          ; Характеристики:
        
        
          время выполнения в циклах -  K(N + 11) + 4
        
        
          ;
        
        
          память  -  11 слов
        
        
          
            .global
          
        
        
          
            MATR
          
        
        
          
            MATR
          
        
        
          
            ROWS  SUBI3
          
        
        
          
            2, IR0, RC
          
        
        
          
            RPTBD
          
        
        
          
            DOT
          
        
        
          ; внутренний цикл по N до метки DOT
        
        
          
            LDF
          
        
        
          
            0.0, R2
          
        
        
          ; 0,0
        
        
          →
        
        
          R2
        
        
          
            MPYF3
          
        
        
          ∗
        
        
          
            AR0++(1),
          
        
        
          ∗
        
        
          
            AR1++(1), R0
          
        
        
          ; m[i,0]v[0]
        
        
          →
        
        
          R0
        
        
          
            NOP
          
        
        
          ; (см. команду RPTBD)
        
        
          
            DOT MPYF3
          
        
        
          ∗
        
        
          
            AR0++(1),
          
        
        
          ∗
        
        
          
            AR1++(1),R0
          
        
        
          ; m[i,j]v[j]
        
        
          →
        
        
          R0
        
        
          
            ||
          
        
        
          
            ADDF3
          
        
        
          
            R0, R2, R2
          
        
        
          ; m[i,j-1]v[j-1]+R2
        
        
          →
        
        
          R2
        
        
          ; добавление последнего произведения к сумме в R2
        
        
          
            ADDF
          
        
        
          
            R0, R2
          
        
        
          ; сохранение вычисленного элемента выходного вектора
        
        
          
            STF
          
        
        
          
            R2,
          
        
        
          ∗
        
        
          
            AR2++(1)
          
        
        
          ; возврат указателя AR1 на начальный адрес вектора v[0]
        
        
          
            NOP
          
        
        
          ∗
        
        
          
            - -AR1(IR0)
          
        
        
          ; внешний цикл по K, AR3-1
        
        
          →
        
        
          AR3, переход на ROWS,  если AR3
        
        
          ≥
        
        
          0
        
        
          
            DB
          
        
        
          
            AR3, ROWS
          
        
        
          
            RETS
          
        
        
          ; возврат из п/п
        
        
          
            .end
          
        
        
          
            2.4.2. Умножение комплексных матриц
          
        
        
          Пусть матрица
        
        
          
            
              X
            
          
        
        
          размерностью
        
        
          
            N
          
        
        
          ×
        
        
          
            K
          
        
        
          умножается на матрицу
        
        
          
            
              Y
            
          
        
        
          размерно-
        
        
          стью
        
        
          
            K
          
        
        
          ×
        
        
          
            M
          
        
        
          и обе матрицы являются комплексными. Результирующая матрица
        
        
          
            
              Z
            
          
        
        
          будет иметь размерность
        
        
          
            N
          
        
        
          ×
        
        
          
            M
          
        
        
          и каждый элемент ее будет вычисляться
        
        
          по формуле
        
        
          
            z
          
        
        
          [
        
        
          
            i
          
        
        
          ,
        
        
          
            j
          
        
        
          ] =
        
        
          
            x
          
        
        
          [
        
        
          
            i
          
        
        
          ,0]
        
        
          
            y
          
        
        
          [0,
        
        
          
            j
          
        
        
          ] +
        
        
          
            x
          
        
        
          [
        
        
          
            i
          
        
        
          ,1]
        
        
          
            y
          
        
        
          [1,
        
        
          
            j
          
        
        
          ] + ... +
        
        
          
            x
          
        
        
          [
        
        
          
            i
          
        
        
          ,
        
        
          
            K
          
        
        
          -1]
        
        
          
            y
          
        
        
          [
        
        
          
            K
          
        
        
          -1,
        
        
          
            j
          
        
        
          ],
        
        
          где
        
        
          
            i
          
        
        
          = 0, 1, ...,
        
        
          
            N
          
        
        
          -1;
        
        
          
            j
          
        
        
          = 0, 1, ...,
        
        
          
            M
          
        
        
          -1.
        
        
          Для лучшей организации вычислений матрица
        
        
          
            
              X
            
          
        
        
          располагается в памяти
        
        
          по строкам, а матрицы
        
        
          
            
              Y
            
          
        
        
          и
        
        
          
            
              Z
            
          
        
        
          - по столбцам. Комплексные элементы матриц за-
        
        
          нимают две соседние ячейки памяти, действительная часть числа расположена
        
        
          в ячейке с меньшим адресом. Для адресации массивов (матриц)
        
        
          
            
              X
            
          
        
        
          ,
        
        
          
            
              Y
            
          
        
        
          и
        
        
          
            
              Z
            
          
        
        
          будем
        
        
          использовать вспомогательные регистры AR0, AR1 и AR2 соответственно. Ор-
        
        
          ганизация данных в памяти показана на рис.2.15. Вычисления будут состоять из
        
        
          трех вложенных циклов (рис.2.14). В качестве счетчиков циклов используются