Here's some more code. No real progress:
.MODEL SMALL ;Defines memory model as small which uses seperate segments for code and data
.386 ;Microprocessor number
.STACK ;Stack segment defined as 1024 by default
.DATA ;Begins definition of the data type used in this project
row DB ?
col DB ?
e DW ?
ep1 DW ?
D DB ?
d DW ?
ROW DB ?
COLUMN DB ?
M DW 65025 DUP(?)
RREF DB "matrix", 0
.CODE
MAIN PROC FAR
.STARTUP
;Program:
MOV BP, 0
MOV SI, 0
MOV AX, 3D02h ;Open file
MOV DX, OFFSET RREF
INT 21H
MOV BX, AX
MOV CX,2 ;Want to read two bytes.
MOV DX, OFFSET ROW
MOV AH, 3FH ;Read
INT 21H
JC QUIT
CMP AX, 2
JNE QUIT
MOV CX,8 ;Want to read eight bytes.
MOV DX, OFFSET M
MOV AH, 3FH ;Read
INT 21H
JC QUIT
CMP AX, 8
JNE QUIT
IF (ROW LT COLUMN)
MOV D, ROW
ELSEIF (ROW GT COLUMN)
MOV D, COLUMN
ENDIF
MOV row, D
MOV col, D
;MOV AX, d
;MOV BX, 8
;MUL BX
;ADD AX, 2 ;M[d] = d*8+2
MOV EAX, 0
MOV SI, D ;d=(col-1)*ROW+(row-1)
L1: MOV AL, col ;Determine number of diagonals
SUB AL, 1
MOV BL, row
MOV DL, BL
SUB BL, 1
MUL DL
ADD AX, BL
MOV d, AX
;e=M(I,I)
;ep1=M(I+1,I)
MOV EAX, M[d*8+2]
MOV e, EAX
MOV AL, col
SUB AL, 1
MOV BL, row
ADD BL, 1
MOV DL, BL
SUB BL, 1
MUL DL
ADD AX, BL
MOV d, AX
MOV EBX, M[d*8+2]
MOV ep1, EBX
ADD row, 1
MOV col, 1
FINIT
FLD1
FLD1
FADD ST(1), ST(1)
CMP ST(1), ep1
JE SKIP
L2: FADD ST(1), ST
CMP ST(1), ep1
JNE L2
SKIP: FCHS
FDIVR
QUIT: .EXIT
MAIN ENDP
END