Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- BITS 32
- GLOBAL _asm_main
- EXTERN _printf
- SECTION .data
- row1 dd 5,7,3,1
- row2 dd 10,2,8,7
- row3 dd 1,4,2,5
- row4 dd 9,1,8,6
- matrixB dd 4,9,3,1
- inimsgA db "A =", 10, 0
- inimsgB db "B =", 10, 0
- resmsgC db "Result =", 10, 0
- fmtmsg db "%d %d %d %d", 10, 0
- ;ctr1 db 4
- ;ctr2 db 4
- SECTION .bss
- ;matrixC resd 4
- ;timestamp resb 16
- SECTION .text
- _asm_main:
- ENTER 0,0
- PUSH EBX
- ; ReaD TimeStamp Counter
- ;RDTSC
- ; Save initial timestamp
- ;MOV [timestamp], EAX
- ;MOV [timestamp+8], EDX
- ; push EAX and EDX to stack
- ;PUSH EAX
- ;PUSH EDX
- ; Do the code now
- ; [START]
- print_matrixA_msg:
- PUSH inimsgA ; push message label "A =" to the stack
- CALL _printf ; call external printf
- ADD ESP,4 ; pop stack 4*1 bytes
- print_matrixA_rowA:
- MOV EBX, [row1+12] ; load element into EBX
- PUSH EBX ; push element
- MOV EBX, [row1+8]
- PUSH EBX
- MOV EBX, [row1+4]
- PUSH EBX
- MOV EBX, [row1]
- PUSH EBX
- PUSH fmtmsg ; push the format to display the row
- CALL _printf ; call external printf
- ADD ESP,20 ; pop stack 4*5 bytes
- print_matrixA_rowB:
- MOV EBX, [row2+12] ; load element into EBX
- PUSH EBX ; push element
- MOV EBX, [row2+8]
- PUSH EBX
- MOV EBX, [row2+4]
- PUSH EBX
- MOV EBX, [row2]
- PUSH EBX
- PUSH fmtmsg ; push the format to display the row
- CALL _printf ; call external printf
- ADD ESP,20 ; pop stack 4*5 bytes
- print_matrixA_rowC:
- MOV EBX, [row3+12] ; load element into EBX
- PUSH EBX ; push element
- MOV EBX, [row3+8]
- PUSH EBX
- MOV EBX, [row3+4]
- PUSH EBX
- MOV EBX, [row3]
- PUSH EBX
- PUSH fmtmsg ; push the format to display the row
- CALL _printf ; call external printf
- ADD ESP,20 ; pop stack 4*5 bytes
- print_matrixA_rowD:
- MOV EBX, [row4+12] ; load element into EBX
- PUSH EBX ; push element
- MOV EBX, [row4+8]
- PUSH EBX
- MOV EBX, [row4+4]
- PUSH EBX
- MOV EBX, [row4]
- PUSH EBX
- PUSH fmtmsg ; push the format to display the row
- CALL _printf ; call external printf
- ADD ESP,20 ; pop stack 4*5 bytes
- print_matrixB_msg:
- PUSH inimsgB ; push message label "B =" to the stack
- CALL _printf ; call external printf
- ADD ESP,4 ; pop stack 4*1 bytes
- print_matrixB:
- MOV EBX, [matrixB+12] ; load element into EBX
- PUSH EBX ; push element
- MOV EBX, [matrixB+8]
- PUSH EBX
- MOV EBX, [matrixB+4]
- PUSH EBX
- MOV EBX, [matrixB]
- PUSH EBX
- PUSH fmtmsg ; push the format to display the row
- CALL _printf ; call external printf
- ADD ESP,20 ; pop stack 4*1 bytes
- print_matrixC_msg:
- PUSH resmsgC ; push message label "Result =" to the stack
- CALL _printf ; call external printf
- ADD ESP, 4 ; pop stack 4*1 bytes
- ; [END]
- ;
- ; pop EAX and EDX from stack
- ;POP EAX
- ;POP EDX
- ; get difference of two timestamps
- ;SUB EAX, [timestamp]
- ;SUB EDX, [timestamp + 8]
- LEAVE
- RET
Advertisement
Add Comment
Please, Sign In to add comment