WINDLX 體系結構 彙編實現矩陣乘法

2021-06-04 19:40:54 字數 3071 閱讀 4063

貌似是 2023年10月份寫的,現在都不清楚了其中的一些細節,其實應該早點記錄的。

主要是 實現如下的**

; double s1 = 1.10001 ,s2 = 2.20002 

; for(int i = 0 ; i < 10 ; i ++) 

;    for(j = 0 ; j < 10 ; j ++) 

;     ma[i][j] = mb[i][j] = 1 

;下面是矩陣乘法的主迴圈

; for(int i = 0 ; i < 10 ; i ++) 

;     for(j = 0 ; j < 10 ; j ++) 

;         

;            mc[i][j] = data; 

;        } 

;    

其實就是三層迴圈,思路清晰就很好解決,會寫一層迴圈就會寫三層,暫存器的分別對應哪個值,一定要清楚  ,下面是**。不過是沒有優化的,因為這個是北郵體系結構的作業,所以優化的**就不貼出,其實優化的手段就是減少相關。

;author : fu xiang ;[email protected]

;採取用陣列的形式來表示矩陣,假設陣列下標從0 開始 ,矩陣為 10*10

;那麼有 矩陣ma[i][j] <--> array[i * 10 + j]

;採取行儲存方式,即用陣列來表示矩陣 比如10*10 的矩陣,那麼 陣列的第乙個元素 對應ma[0][0]

;第10個元素對應 ma[0][10] 第11個元素 對應m[1][0] 以此類推

;主要是實現如下的c **

; double s1 = 1.10001 ,s2 = 2.20002

; for(int i = 0 ; i < 10 ; i ++)

; for(j = 0 ; j < 10 ; j ++)

; ma[i][j] = mb[i][j] = 1

; for(int i = 0 ; i < 10 ; i ++)

; for(j = 0 ; j < 10 ; j ++)

;

; mc[i][j] = data;

; }

;

.data

ma: .space 400

mb: .space 400

mc: .space 400

s1: .float 1.0

.text

.global main

main:

addi r1,r0,ma ;將ma的位址 賦給r1

addi r3,r2,mb

addi r11, r1, #400 ;ma的 末位址

lf f2,s1

;對矩陣ma mb進行初始化

init:

sf 0(r1),f2 ;將f1的值賦給ma[i]

sf 0(r3),f2

addi r1,r1,#4 ;

addi r3,r3,#4

slt r2,r1,r11 ; 比較r1 和ma的末位址是否相等,

bnez r2,init ;不等 則繼續迴圈

;主迴圈 開始

addi r21,r0,#40 ;常量

addi r22,r0,#10 ;常量

addi r23,r0,#4

addi r29,r0,#0 ;

addi r7,r29,0 ;i = 0

loop1:

addi r8,r29,0 ;j = 0

loop2:

addi r9,r29,0 ;k = 0;

movi2fp f0,r29 ;data = 0 給變數賦0

;下面開始第三層的主迴圈

loop3:

multu r11,r7,r21 ;r11 = i * 40

multu r1,r9,r23 ;r1 = k * 4

addu r11,r11,r1 ;計算出 ma[i][k] 的位址

ld f2,ma(r11)

multu r13,r9,r21 ;r13 = k * 40

multu r1,r8,r23 ;;r1 = i * 4

addu r13,r13,r1 ;計算出 mb[k][i] 的位址

ld f4,mb(r13)

multf f6,f2,f4

addf f0,f0,f6 ;data += ma[i][k] * mb[k][j];

addi r9,r9,#1

slt r2,r9,r22 ;r9 即 k是否等於10

bnez r2,loop3 ;不等 繼續迴圈

;; 那麼 這裡要完成這個操作mc[i][j] = data;

multu r13,r7,r21 ;r13 = i *40

multu r1,r8,r23 ;r1 = j*4

addu r13,r13,r1 ;計算 mc[i][j] 的位址

sf mc(r13),f0

addi r8,r8,#1

slt r2,r8,r22 ;r8 即 j是否等於10

bnez r2,loop2 ;不等 繼續迴圈

addi r7,r7,#1

slt r2,r7,r22 ;r7 即 i是否等於10

bnez r2,loop1 ;不等 繼續迴圈

trap 0 ; end of program

mysql 體系結構 了解MySQL體系結構

mysql 資料庫體系結構圖 mysql 由以下幾部分組成 1 connectors 不同語言中與 sql 的互動 show variables like connection variable name value character set connection utf8 collation c...

簡述mysql體系結構 MySQL體系結構

一 mysql登入方式 一 tcp ip方式 遠端 本地 mysql uroot poldboy123 h 10.0.0.51 p3306 二 socket方式 mysql uroot poldboy123 s tmp mysql.sock 二 例項介紹 例項 mysqld後台守護程序 主線程 ma...

軟體體系結構 軟體體系結構概論

開學到現在我已經上了三節軟體體系結構的課程,現在我想把自己學到的整理歸納一下。此篇隨筆對應於教材軟體體系結構概論一章。首先談一談我剛接觸這門課程是的感受。那就是 我靠 軟體也會有體系結構?以前只學過資料結構 演算法 基本的程式語言,覺得程式設計無非就是使用者給我需求,我便按照需求來程式設計序就好,從...