Assembly Language
;Included the irvine library as stated INCLUDE Irvine32.INC .DATA ;size of the array is declared as stated SizeOfMyColumn=5 ;indicates the cloumn size SizeOfMyRow=4 ;indicates size of row SerialNum DWORD 0 ; serial number is defined quaNum DWORD 0 ; quantity number is defined ProductNum DWORD 0 ;product number is defined ask BYTE "Enter Salespersons num, quantity sold, product num(press _ve num to end the LOOP): ",0 My1stMessage BYTE "Required Martix is printed",0 My2ndMessage BYTE "The total sales for salesperson ",0 My3rdMessage BYTE "The total sales for product ",0 ;The array value is initilized to 0 MySale DWORD 0,0,0,0,0 DWORD 0,0,0,0,0 DWORD 0,0,0,0,0 DWORD 0,0,0,0,0 .CODE ;this marks the code area of program main PROC ; main program starts here readUserInput: ;program will be termnated when -ve number is entered MOV ebx,OFFSET MySale MOV edx,OFFSET ask CALL writestring CALL crlf CALL readInt ; it will get salesman number as integer MOV [SerialNum],eax ; it will save salesman number into SerialNum cmp eax,0 ; if negative number entered jl noMoreInput ; exit the LOOP and stop input CALL readInt MOV [quaNum],eax CALL readInt MOV [ProductNum],eax ;this will save the sales into matrix MOV eax,SerialNum dec eax MOV edi,SizeOfMyColumn MUL edi MOV edi,ProductNum dec edi ADD eax,edi MOV edi,TYPE DWORD MUL edi ADD ebx,eax MOV eax,quaNum MOV [ebx],eax ; it will store the quaNum value into matrix jmp readUserInput ; it will run the program until -ve number entered ;If input value is entered noMoreInput: ; output the sales matrix MOV edx, OFFSET My1stMessage CALL writestring ;New line is printed CALL crlf MOV ecx,SizeOfMyRow*SizeOfMyColumn MOV ebx,OFFSET MySale MOV esi,0 MygetTheValue: ; gets every values from the matrix MOV eax,[ebx+esi] ; value is prined CALL WriteDec MOV al,32 ; al= ascii of space character ; it will the print space CALL WriteChar ADD esi,4 ; it prints only five values th the row cdq MOV eax,esi MOV edi,20 DIV edi cmp edx,0 jne next CALL crlf ; new line is printed next: LOOP MygetTheValue MOV ecx,SizeOfMyRow ;salesmen's sale is printed MOV esi,0 MOV edi,1 DisplaySales: MOV ebx,OFFSET MySale MOV edx,OFFSET My2ndMessage CALL writestring MOV eax,edi CALL WriteDec MOV al,':' CALL WriteChar CALL crlf ;new line is printed MOV eax,esi CALL sumOfRow CALL WriteDec CALL crlf INC esi INC edi LOOP DisplaySales CALL crlf ; Display sales for each product MOV ecx,SizeOfMyColumn MOV esi,0 MOV edi,1 DisplayProductSales: MOV ebx,OFFSET MySale MOV edx,OFFSET My3rdMessage CALL writestring MOV eax,edi CALL WriteDec MOV al,':' CALL WriteChar CALL crlf MOV eax,esi CALL sumOfColmn CALL WriteDec CALL crlf INC esi INC edi LOOP DisplayProductSales CALL crlf exit main ENDP ;this function will complete the sum of the row sumOfRow PROC USES ebx ecx edx esi edi MOV edi,SizeOfMyRow INC edi MUL edi MOV edi,TYPE DWORD MUL edi ADD ebx,eax ; it will store the starting address of the row MOV eax,0 ; store sum=0 MOV esi,0 ; store index=0 MOV ecx , SizeOfMyColumn ; it is created to count the loop L1: ; LOOP starts here MOV edx,[ebx+esi] ; it will take the row value ADD eax,edx ; row's value is ADDed to the sum ADD esi,4 ; increment of the index up to the point ;here starts the next value of the row LOOP L1 ; continue until ecx is not 0 RET ; it will return ths main sumOfRow ENDP ;it will performs the sum of the column sumOfColmn PROC USES ebx ecx edx esi edi MOV edi,TYPE DWORD MUL edi ADD ebx,eax ; it will store the starting address of the column MOV eax,0 ; store sum=0 MOV esi,0 ; store index=0 MOV ecx , SizeOfMyRow ; it is created to count the LOOP L2: ;LOOP satrts here MOV edx,[ebx+esi] ; it will take the row value ADD eax,edx ; row's value is added to the sum push eax MOV eax,SizeOfMyColumn MOV edi,TYPE DWORD MUL edi ADD esi,eax POP eax LOOP L2 ; LOOP is repeated until ecx value RET ; return to main and is not equal to zero sumOfColmn ENDP END main ;end of main and end of program