⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zsy.asm

📁 汇编语言课程设计 矩阵相乘运算(实现3*4与4*5矩阵相乘运算
💻 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 + -