- 1
- 0
- 约2.46万字
- 约 79页
- 2016-12-30 发布于广东
- 举报
【例10—11】 试编制一个程序,完成矩阵乘向量的运算。 分析:设有一个矩阵Am×n,有一个n维列向量Bn×1,则Am×n×Bn×1=Cm×1,当m=n=4时有: 即:C1=a11*b1+a12*b2+a13*b3+a14*b4 C2=a21*b1+a22*b2+a23*b3+a24*b4 C3=a31*b1+a32*b2+a33*b3+a34*b4 C4=a41*b1+a42*b2+a43*b3+a44*b4 从以上分析可以看出,计算乘积向量C的一个元素,就要采用循环计算来完成,而对于控制C向量4 个元素的计算,它又是一层循环,所以完成矩阵乘向量的运算需要采用二重循环结构。程序流程图如图10-7所示。 说明:选用BX寄存器作为C向量的变址寄存器;SI为矩阵A的数据变址寄存器;DI为B向量的变址寄存器。 在数据段定义中,先将结果单元清零。在程序中不必安排清零指令。程序清单如下: DATA SEGMENT MA DB 2,3,3,5 DB 6,7,8,9 DB 9,8,7,6 DB 5,3,3,2 MB DB 1,2,3,4 MC DW 4 DUP (0) ;结果单元已清零 DATA ENDS STAK SEGMENT STACK DB 100 DUP(?) STAK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV SI,0 ;A矩阵的变址寄存器清0 MOV BX,0 ;C向量的变址寄存器清0 MOV CX,4 ;置外循环次数 LOP1:PUSH CX ;外循环数进栈保护 MOV DI,0 ;B向量的变址寄存器清0 MOV CX,4 ;置内循环次数 LOP2: MOV AL,[SI +MA] MUL BYTE PTR [DI+MB] ADD [BX+MC],AX ;完成 INC SI INC DI LOOP LOP2 ; 内循环控制 ADD BX,2 POP CX LOOP LOP1 MOV AL,4CH INT 21H CODE END END START 分析:降序排序的要求,是在找到最大数后,将此最大数放在首地址处;再找次大数,且置于最大数的后面。依此类推,直到将所有数都按照降序排列完为止。显然,这是一个重复寻找最大数的问题。每次要找一个最大数,要逐个与数列进行比较,这是一个循环程序结构。把它作为内循环处理。当找到一个最大数后,还要在数列中找下一个次大的数即其它余下各数中的最大数,再重复使用内循环程序。这个不断重复寻找最大数的过程,即控制重复执行内循环的程序部分作为外循环程序,所以这是一个二重循环的问题。图10—10为该程序的流程图。 在源程序中,用CX作为外循环计数器,初值为100-1。SI作外循环数据序列的地址指针。在进入内循环后,用DX作内循环的计数器,初值与外循环计数器相等。用DI作内循环地址指针,初始值同外循环地址指针。正因为是外循环控制内循环次数和地址的初始位置,所以两者取值相同。源程序为: DATA SEGMENT X DB 6,36,61,22,33,┉ ; 共100个字节的数据数列 DATA ENDS CODE SEGMENT ASSUME CS:CODE,
原创力文档

文档评论(0)