Consider the following segment ofaC4 f code for multiplication of two matrices A
ID: 650050 • Letter: C
Question
Consider the following segment ofaC4 f code for multiplication of two matrices A and B of size (N*N) each Thus, matrix C is the product of matrix A and matrix B. For example, for Write an assembly program for matrix multiplication assuming all the elements arc integers and the matrices are stored in main memory I) Initially, you may hard code the input matrices A and B of size 3x3 each in your program You can choose either storing them in rosy -major or column -major order Observe the cache performance 2) Optimized Matrix multiplication for Slim3 Optimize your code (by storing matrices in a particular order, code -reordering etc ) and cache organization (block size placement policy dci to get the maximum hit -rate for a fir male size of 128 bytes Submit the optimized mult3 .asm file mentioning the optimized cache organization for 14,...3 in your report 3) Verify the cache hit -rate that you observed from the simulator by your hand -calculations.Explanation / Answer
Assembly Program for Matrix Multiplication:
name "matrix_multiplication"
include "emu8086.inc"
org 100h ; directive make tiny com file.
.model small
.stack 100h
.data
size dw 3
A db ?,?,?,?,?,?,?,?,?
B db ?,?,?
C db ?,?,?
message_a db 10,13,"type the elements of matrix A:$"
message_b db 10,13,"type the elements of array B:$"
rez db 10,13,"the result is:$"
.code
start:
mov ax,@data
mov ds,ax
mov bx, 0 ;
read_a:
;compare with sizexsize
mov ax, size
mul size
cmp bx, ax
je reset_counter
;display message
mov dx, offset message_a
mov ah, 09h
int 21h
;read element
mov ah, 01h
int 21h
sub al, 30h
mov A[bx], al
inc bx
jmp read_a
reset_counter:
mov bx, 0
jmp read_b
read_b:
;compare with size
mov ax, size
cmp bx, ax
je calcul
;display message
mov dx, offset message_b
mov ah, 09h
int 21h
;read element
mov ah, 01h
int 21h
sub al, 30h
mov B[bx], al
inc bx
jmp read_b
calcul:
mov bx,0
mov cx,0
for_i:
mov ax, size
cmp bx, ax
je print
mov al,b.size
mul bx
mov al, A[bx+1]
mov bh, B[bx+1]
mul bh
add C[bx], ah
mov al, b.A[bx+2]
mov bl, b.B[bx+2]
mul al
add C[bx], ah
mov al, b.A[bx+3]
mov bl, b.B[bx+3]
mul al
add C[bx], ah
inc bx
jmp for_i
print:
mov dx, offset rez
mov ah,09h
int 21h
mov ax,size
mul size
mov cx,ax
mov ax,0
mov bx,0
print_c:
cmp bx,cx
je finish
mov al, C[bx]
CALL PRINT_NUM
inc bx
jmp print_c
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
finish:
ret
end start
end
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.