📄 zsy.asm
字号:
DATA SEGMENT ;数据段定义
INFORMATION DB "Please enter the matrix1!$" ;提示说明
SPACE DB 0DH,0AH,"$" ;换行
MATRIX1 DB 12 DUP(0),"$" ;矩阵1
MATRIX2 DB 20 DUP(0),"$" ;矩阵2
RESULT DW 15 DUP(0),"$" ;矩阵相乘结果
M1 DB 0DH,0AH,"The matrix1:$" ;提示信息
M2 DB 0DH,0AH,"The matrix2:$"
M3 DB 0DH,0AH,"Matrix1*Matrix2:$"
DATA ENDS
;*********************************************************************
CODE SEGMENT;定义代码段
ASSUME CS:CODE,DS:DATA
;------------------------------------------------------------------
START:
MOV AX,DATA ;置DS段初值
MOV DS,AX
SHOWINFORMATION:
LEA DX,INFORMATION ;取信息提示地址偏移量
MOV AH,9 ;9号功能调用显示提示信息
INT 21H
;
LEA DX,M1;提示输入矩阵1
MOV AH,9
INT 21H
LEA DX,SPACE
MOV AH,9
INT 21H ;换行
;
MOV CX,12
MOV BX,OFFSET MATRIX1 ;取矩阵1的偏移地址
MOV SI,0
INPUT1:
MOV AH,1
INT 21H ;1号功能调用,用来输入数组数值
SUB AL,30H
MOV [BX],AL
INC BX
INC SI
MOV AH,2
MOV DL,20H
INT 21H ;输出空格
CMP SI,4
JNZ L1
LEA DX,SPACE
MOV AH,9
INT 21H ;换行
MOV SI,0
L1: LOOP INPUT1
;;;;;
LEA DX,M2 ;提示输入矩阵2
MOV AH,9
INT 21H
LEA DX,SPACE
MOV AH,9
INT 21H ;换行
;
MOV CX,20
MOV BL,OFFSET MATRIX2 ;取矩阵2的偏移地址
MOV SI,0
INPUT2:
MOV AH,1
INT 21H ;1号功能调用,用来输入数组数值
SUB AL,30H
MOV [BX],AL
INC BX
INC SI
MOV AH,2
MOV DL,20H
INT 21H ;输出空格
CMP SI,5
JNZ L2
LEA DX,SPACE
MOV AH,9
INT 21H ;换行
MOV SI,0
L2: LOOP INPUT2
;
SUB AX,AX ;ax = 0
MOV DL,OFFSET MATRIX1
MOV DH,OFFSET MATRIX2
MOV BH,OFFSET RESULT
SUB CX,CX
MOV CX,5
CALL LINEMULCOLOUM ;调用矩阵1第1行和矩阵2的列相乘子程序
MOV DL,OFFSET MATRIX1+4
MOV DH,OFFSET MATRIX2
MOV BH,OFFSET RESULT+10
MOV CX,5
CALL LINEMULCOLOUM ;调用矩阵1第2行和矩阵2的列相乘子程序
MOV DL,OFFSET MATRIX1+8
MOV DH,OFFSET MATRIX2
MOV BH,OFFSET RESULT+20
MOV CX,5
CALL LINEMULCOLOUM ;调用矩阵1第3行和矩阵2的列相乘子程序
LEA DX,M3 ;显示相乘后的结果
MOV AH,9
INT 21H
CALL PRINTRESULT
MOV AH,4CH
INT 21H
;---------------------------------------------------------
LINEMULCOLOUM PROC NEAR ;矩阵相乘子程序
MOV AL,BH
AND AH,00H
MOV BP,AX
DEC DH
AGAIN:
PUSH CX
INC DH
PUSH DX
MOV CX,4 ;设置循环次数
MOV BL,DH
AND DX,00FFH ;把DH置零
MOV SI,DX
AND BX,00FFH
MOV DI,BX
MOV DX,0000
MULTI:
MOV AL,[SI] ;取矩阵1的偏移地址
MOV BL,[DI] ;取矩阵2的偏移地址
IMUL BL ;矩阵1的行和矩阵2的列相乘
ADD DX,AX
INC SI
ADD DI,5
LOOP MULTI
MOV DS:[BP],DX
ADD BP,2
POP DX
POP CX
LOOP AGAIN
EXIT: RET
LINEMULCOLOUM ENDP
;-------------------------------------------------------
PRINTRESULT PROC NEAR
LEA BX,RESULT
LEA DX,SPACE
MOV AH,9
INT 21H ;换行
MOV CX,15
MOV SI,0
PRINT:
PUSH CX
MOV AX,WORD PTR[BX]
CMP AX,100
JB NEXT
MOV CH,100
DIV CH
MOV CL,AH
MOV DL,AL
ADD DL,30H
MOV AH,2
INT 21H
MOV AL,CL
NEXT:
MOV CH,10
MOV AH,0
DIV CH
ADD AH,30H
MOV DH,AH
ADD AL,30H
MOV DL,AL
MOV AH,2
INT 21H
MOV DL,DH
MOV AH,2
INT 21H
MOV AH,2
MOV DL,20H
INT 21H ;输出空格
ADD BX,2
INC SI
CMP SI,5
JNZ LP
LEA DX,SPACE
MOV AH,9
INT 21H ;换行
MOV SI,0
LP: POP CX
LOOP PRINT
RET
PRINTRESULT ENDP
;-----------------------------------------------------
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -