You are on page 1of 4

.

model small
.stack 100h
.data
I DB 0
J DB 0
K DB 0
TEMP DW ?
MATRIX1 DB 50 DUP(1,1,1)
MATRIX2 DB 50 DUP(1,2,3)
ANSWER DB 50 DUP(48)
ROW DW ?
COLUMN DW ?
SEN1 DB "INPUT NUMBER OF ROWS: $"
SEN2 DB "INPUT NUMBER OF COLUMNS: $"
SUM DB 0
.code

JMP MAIN

display proc ;Beginning of procedure


MOV BX, 10 ;Initializes divisor
MOV DX, 0000H ;Clears DX
MOV CX, 0000H ;Clears CX

LOO1:
MOV DX, 0000H ;Clears DX during jump
div BX ;Divides AX by BX
PUSH DX ;Pushes DX(remainder) to stack55
INC CX ;Increments counter to track the number of digits
CMP AX, 0 ;Checks if there is still something in AX to divide
JNE LOO1 ;Jumps if AX is not zero

LOO2:
POP DX ;Pops from stack to DX
ADD DX, 30H ;Converts to it's ASCII equivalent
MOV AH, 02H
INT 21H ;calls DOS to display character
LOOP LOO2 ;Loops till CX equals zero
RET ;returns control
display ENDP

;NEW LINE PRINT FUNCTION


NEWLINE PROC
MOV DX,10
MOV AH,02H
INT 21H
MOV DX,13
MOV AH,02H
INT 21H
RET
NEWLINE ENDP

MULTI PROC ;MULTIPLY ARRAYS


MOV SI,0
MOV BX,0
MOV DI,0

L1:
L2:
MOV SUM,0
L3:
PUSH BX
MOV AX,BX
MOV DX,ROW
MUL DX
MOV BX,AX
MOV CL,MATRIX1[BX+SI]
POP BX
PUSH SI
PUSH BX
MOV BX,SI
MOV AX,BX
MOV DX,ROW
MUL DX
MOV BX,AX
MOV SI,BX

MOV AL,MATRIX2[BX+DI]

POP BX
POP SI
MUL CL
ADD SUM,AL
INC K
INC SI
MOV CX,ROW
CMP K,CL
JNE L3
MOV CL,SUM
PUSH BX
MOV AX,BX
MOV DX,ROW
MUL DX
MOV BX,AX
MOV ANSWER[DI+BX],CL
POP BX
MOV SI,0
MOV K,0
INC J
INC DI
MOV CX,ROW
CMP J,CL
JNE L2
INC I
INC BX
MOV J,0
MOV DI,0
MOV CX,ROW
CMP I,CL
JE H1
JMP L1
H1:
PP:
RET
MULTI ENDP

MAIN PROC
MOV AX,@DATA
MOV DS,AX

MOV DX,OFFSET SEN1


MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
MOV AH,0
MOV ROW,AX
CALL NEWLINE

MOV DX,OFFSET SEN2


MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
MOV AH,0
MOV COLUMN,AX
SUB AX,48
CALL NEWLINE

SUB ROW,48
SUB COLUMN,48

CALL MULTI

MOV BX,0
MOV BX,COLUMN
MOV AX,BX
MUL BL
MOV CH,0
MOV CL,AL
MOV SI,0
PRINTLOOP:
MOV AH,0
MOV AL,ANSWER[SI]
PUSH SI
PUSH CX
CALL display
POP CX
POP SI
MOV DL,32
MOV AH,02H
INT 21H
INC SI
MOV BX,SI
MOV AX,BX
MOV BX,COLUMN
DIV BL
CMP AH,0
JE PRINTNEWLINE
JMP EW
PRINTNEWLINE:
CALL NEWLINE
EW:
LOOP PRINTLOOP

EXIT:
MOV AH,4CH
INT 21H
END
MAIN ENDP

You might also like