Hi,
I have to print a matrix in assembly and the matrix is defined as follows
matrixA DQ 2 ; ROWS
DQ 3 ; COLS
DQ 1, 2, 3 ; 1st row
DQ 4, 5, 6 ; 2nd row
My problem is that I don't know how to reach the ROWS and COLS values in the print_matrix loop. This is what I have done so far(Note that, in the for loops, instead of the value 2 I should have put the number of rows and columns of the matrix)
egment .text
global _start
_start:
main:
mov rax, matrixA ; matrixA.print ()
push rax
call matrix_print
add rsp, 8
mov rax, matrixB ; matrixB.print ()
push rax
call matrix_print
add rsp, 8
; ---------------------------------------------------------------------
matrix_print: ; void matrix_print ()
push rbp ; setup base pointer
mov rbp, rsp
call output_newline ; output.newline()
; for(row=0; row < this.ROWS; row++)
mov rax, 0 ; row=0
nextr: cmp rax, 2 ; row < this.ROWS
jge endr ;
; for(col=0; col < this.COLS; cols++)
mov rbx, 0 ; col=0
nextc: cmp rbx, 2 ; col < this.COLS
jge endc ; if col>=2 go to endc
call output_tab ; output.tab ()
call output_int ; output.int (this.elem[row, col])
inc rbx ; col ++
jmp nextc
endc: inc rax ; row ++
call output_newline
jmp nextr
endr:
pop rbp ; restore base pointer & return
ret
; --------------------------------------------------------------------------
segment .data
; Declare test matrices
matrixA DQ 2 ; ROWS
DQ 3 ; COLS
DQ 1, 2, 3 ; 1st row
DQ 4, 5, 6 ; 2nd row
matrixB DQ 3 ; ROWS
DQ 2 ; COLS
DQ 1, 2 ; 1st row
DQ 3, 4 ; 2nd row
DQ 5, 6 ; 3rd row
matrixC DQ 2 ; ROWS
DQ 2 ; COLS
DQ 0, 0 ; space for ROWS*COLS ints
DQ 0, 0 ; (for filling in with matrixA*matrixB)