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

📄 matrix.asm

📁 提示用户输入一个3*4和4*5的矩阵
💻 ASM
字号:
	.MODEL SMALL
	.STACK 64
;******************************************
	.DATA
	msg0		db	'please input matrixA(3*4)(element-range: 0 to 255):$'
	msg1		db	'please input matrixB(4*5)(element-range: 0 to 255):$'
	msg2		db	'do matrixA*matrixB,get matrixC(3*5):$'
	msg3		db	'                            Matrix Multiply                                 $'
	 
	LF		db	0ah
	CR		db	0dh
	SPA		db	20h
	
	GENE		db	1,10,100
	
	matrixA		db	12 dup(0)
	matrixB		db	20 dup(0) 
	matrixC		dw	15 dup(0)
	
	tempNum	db	0,0,0
		
	I		db	0
	J		db	0
	K		db	0
	
	buffer		db	256 dup(?)	
	
	argList		dw	?,?,? ;READMATRIX  arg-list
	
;******************************************
	.CODE

;MAIN proc
MAIN PROC FAR
START:

	mov ax,@data
	mov ds,ax
	mov es,ax	
	
	;*******
		
	;set text mode
	mov ah,00h
	mov al,03h
	int 10h
	
	mov ah,09h	
	lea dx,msg3 ;get msg addr
	int 21h

	call LFCR
	call LFCR
	
	;matrixA input
	lea ax,matrixA
	mov argList,ax     
	mov ax,12
	mov argList+2,ax 
	lea ax,msg0
	mov argList+4,ax 
	call READMATRIX
	
	call LFCR	
	call LFCR
	
	;matrixB input
	lea ax,matrixB
	mov argList,ax     
	mov ax,20
	mov argList+2,ax 
	lea ax,msg1
	mov argList+4,ax 
	call READMATRIX

	;C=A mul B
	call MATRIXMUL
	
	call LFCR
	call LFCR
	
	;print matrixC	
	mov ah,09h	
	lea dx,msg2 ;get msg addr
	int 21h
	
	call LFCR

	call PRINTMATRIXC  
	
	;press any key to exit
	mov ah,08h
	int 21h	
	
	;*******	
		
	;return DOS	
	mov ax,4C00H
	int 21h
	
MAIN ENDP
;MAIN proc

;*************sub procedures*****************

;READMATRIX  proc
READMATRIX PROC NEAR
	push ax	
	push bx
	push cx
	push dx
	push si
	push di	
	
	mov ah,09h	
	mov dx,argList+4 ;get msg addr
	int 21h
	
	call LFCR   
	
	;*********************
	
	call READSOURCE  

	mov cx,argList+2 ;get matrix element count 
	mov si,0000h ;buffer index		
	mov di,0000h
	
GOON:	mov al,buffer[si]
	inc si	
	
	mov dx,0000h
	lea bx,GENE
	
	cmp al,'$'	
	jz EXIT	
	
	cmp al,CR	
	jz GTNM
	
	cmp al,SPA
	jz GTNM
	
	sub al,30h
	mov tempNum[di],al
	inc di	

	jmp GOON
	
GTNM:	dec di
	mov al,tempNum[di]
	mov ah,[bx]
	inc bx	
	mul ah
	add dl,al
	cmp di,0
	jnz GTNM	

PUTIN:	mov ax,argList+2
	sub ax,cx
	mov di,ax
	mov bx,argList
	mov [bx][di],dl ;put in one matrix element
	
	mov di,0000h
	
	loop GOON
	
EXIT:	pop di
	pop si
	pop dx	
	pop cx
	pop bx
	pop ax	

	ret
READMATRIX ENDP
;READMATRIX  proc

;READSOURCE  proc
READSOURCE  PROC NEAR
	push ax	
	push si	
		
	mov si,0000h
	
NEXT:	mov ah,01h
	int 21h
	
	mov buffer[si],al
	inc si
	
	cmp al,CR	
	jz GOON1
	
	cmp al,SPA
	jz GOON2
	
	cmp al,'$'
	jz HU	
	
	jmp NEXT	 

GOON1:	call LFCR   

GOON2:	jmp NEXT	
	
HU:	mov al,'$'
	mov buffer[si],al
	dec si
	mov al,SPA
	mov buffer[si],al

	pop si	
	pop ax
	
	ret
READSOURCE  ENDP
;READSOURCE  proc

;LFCR  proc
LFCR  PROC NEAR
	push ax
	push dx
	
	mov ah,02h
	mov dl,CR
	int 21h
	
	mov ah,02h
	mov dl,LF
	int 21h
	
	pop dx
	pop ax
	
	ret
LFCR  ENDP
;LFCR  proc

;MATRIXMUL  proc
MATRIXMUL  PROC NEAR
	push ax	
	push bx
	push cx
	push dx
	push si
	
	mov dx,0000h
	
LOOPI:	inc I
	cmp I,4
	jz QUIT	
	mov al,00h
	mov J,al

LOOPJ:	inc J
	cmp J,6
	jz LOOPI
	mov al,00h
	mov K,al
	
LOOPK:	inc K
	cmp k,5
	jz GO
	;done
	mov al,I
	dec al
	mov cl,4
	mul cl
	mov ah,K
	dec ah
	add al,ah
	mov ah,00h	
	mov si,ax
	mov al,matrixA[si]
	mov ah,00h
	push ax	
	
	mov al,K
	dec al
	mov cl,5
	mul cl
	mov ah,J
	dec ah
	add al,ah
	mov ah,00h
	mov si,ax
	mov al,matrixB[si]
	mov ah,00h
	
	pop bx
	mul bl
	add dx,ax	
	;done	
	jmp LOOPK	

GO:	;done
	mov al,I
	dec al
	mov cl,5
	mul cl
	mov ah,J
	dec ah
	add al,ah
	mov ah,00h
	mov si,ax
	add si,si
	mov matrixC[si],dx	
	
	mov dx,0000h
	;done
	jmp LOOPJ

QUIT:	pop si
	pop dx	
	pop cx
	pop bx
	pop ax	

	ret
MATRIXMUL  ENDP
;MATRIXMUL  proc

;PRINTMATRIXC  proc
PRINTMATRIXC  PROC NEAR
	push ax
	push bx
	push cx
	push dx
	push si
	
	mov cx,15
	
LP:	mov ax,15
	sub ax,cx
	mov si,ax
	mov dx,si
	add si,si	
	mov ax,matrixC[si]
	
	call PRINTELEM	
	
	;check if could cr lf
	inc dx
	mov ax,dx
	mov dx,0000h
	mov bx,5
	div bx
	cmp dx,0000h
	jnz GOLP
	call LFCR
	
GOLP:	loop LP
	
	pop si
	pop dx
	pop cx
	pop bx
	pop ax
	
	ret
PRINTMATRIXC  ENDP
;PRINTMATRIXC  proc

;PRINTELEM  proc
PRINTELEM  PROC NEAR
	push ax
	push bx
	push dx	
	
	mov dx,007eh	
	push dx			
	
GO1:	mov bx,10
	mov dx,0000h
	div bx	
	push dx
	 
	cmp ax,0
	jnz GO1
	
GO2:	pop ax
	cmp al,7eh
	jz QT
	add al,30h
	mov dl,al
	mov ah,02h
	int 21h
	jmp GO2
	
QT:	mov ah,02h
	mov dl,SPA
	int 21h
	
	pop dx
	pop bx
	pop ax
	
	ret
PRINTELEM  ENDP
;PRINTELEM  proc

END START ;end of assembly

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -