天天看点

DSP 汇编综合任务编程 求最大最小值

在数据存储器60H-69H设置数

组a[10]= ]={5,9,3,2,6,1,4,8,7,10}

在数据存储器0100H-0109H设置数

组x[10]={25,34,15,26,31,62,51,18,26,54},要求

分别计算a0*x0,a1*x1,……,a9*x9乘积的最大值和最小值,结

果分别放在数据存储器1000H和1001H单元。

.title  "min_max.asm"
        .mmregs                 ;将寄存器符号设置为全局可用
Y       .usect  "Y",H     ;定义一个叫 Y的寄存器

X       .usect  "X",H     ;定义一个叫  X的寄存器

        .data
table:  .word   ,,,,,,,,,
tal:    .word   ,,,,,,,,,
        .def    start      ;.def表示某符号在本文件定义,可为其他文件引用
        .text
start:      STM     #Y,AR2     ;将立即数存放 在AR2存储器映像寄存器
            RPT     #9
            MVPD    table,*AR2+     ;实现table里的10个数传到数据存储器60H--69H
            STM     #X,AR3     ;将立即数存放 在AR3存储器映像寄存器
            RPT     #9
            MVPD    tal,*AR3+       ;实现tal里的10个数传到数据存储器100H-109H

            LD      #0,A
            STM     #Y,AR3
            STM     #X,AR2
            LD      *AR3+,T 
            MPYU    *AR2+, A
            LD      *AR3,T  
            MPYU    *AR2,B
            MIN     B
            CALL SUM
            LD      #0,A
            STM     #Y,AR3
            STM     #X,AR2
            LD      *AR3+,T 
            MPYU    *AR2+, A
            LD      *AR3,T  
            MPYU    *AR2,B
            MAX     B
            CALL STLM   ; 调用子程序
end:        B       end
SUM:
            STM #8,AR4
loop:   

            LD      *AR3+,T 
            MPYU    *AR2+, A    
            MIN     B
            STL     B,*(H)

            BANZ loop,*AR4-     ;判断AR4中的数是否为0,不为0就跳到loop
            RET          
STLM:
            STM #8,AR4
lop:    
            LD      *AR3+,T 
            MPYU    *AR2+, A

            MAX     B
            STL     B,*(H)  


            BANZ lop,*AR4-      ;判断AR4中的数是否为0,不为0就跳到loop
            RET          
        .end
           

继续阅读