彙編實現矩陣的轉置

2021-10-10 23:51:14 字數 2407 閱讀 5111

彙編實現矩陣的轉置

題意:

給定乙個 4 * 5 的矩陣 , 把它轉置後存到 data2.

思路:

首先彙編不向其他語言,可以直接根據下表訪問位址,陣列中的數是放在一段連續的記憶體單元中。也就是說我們轉置後還是相當於儲存在乙個一位陣列中。

所以我們可以先模擬一下轉置的過程,我們要首先把第一列存入data2 ,再把第二列依次存入 data2…,知道最後一列存入。先考慮第一列如何放入,首先把第乙個元素的位址存入暫存器,然後每次 + 4,把這個值存入 data2,同時 data2 的暫存器 ++ ,就可以實現這個功能。那麼第二列我們怎麼讓暫存器回到 第二個元素呢?這裡我們可以再用乙個暫存器儲存上一次是從哪個開始的,每次大迴圈把這個位址 + 1 就好了。

我們也可以不用位址暫存器,直接用乙個 bx 計數器,記錄這一次應該從第幾個元素開始lea si,[data1 + bx] ;每次移動的初始位置,一開始用的 si + bh ,然後發現不行,然後老師說要 16位匹配,所以要用 bx.

一開始要寫二重迴圈不知道何從下手,以為只能用 cx 作迴圈記錄,其實隨便用哪個都行,只要最後判斷一下再跳回開頭就好了。

**:

datas segment

n dw 5

; m dw 4

data1 db 1,2

,3,4

db 10,20

,30,40

db 11,12

,13,14

db 20,30

,40,50

db 21,22

,23,24

data2 db 20

dup(0)

datas ends

codes segment

assume cs:codes,ds:datas

start:

mov ax,datas

mov ds,ax

lea di,data2

lea bp,data1

mov cx,m

mov dh,

0

loop1:

mov si,bp ;每次移動的初始位置

mov bh ,n ;每次迴圈次數

loop2:

mov dh,

[si]

mov [di]

,dh ;移到 data2

inc di

add si,m ;移到下一行

dec bh

cmp bh,

0 ja loop2

inc bp ; 初始位置 ++

loop loop1

mov ah,

4ch int 21h

codes ends

end start

或者:

datas segment

n dw 5

; m dw 4

data1 db 1,2

,3,4

db 10,20

,30,40

db 11,12

,13,14

db 20,30

,40,50

db 21,22

,23,24

data2 db 20

dup(0)

datas ends

codes segment

assume cs:codes,ds:datas

start:

mov ax,datas

mov ds,ax

lea di,data2

mov cx,

4 mov bx,

0

loop1:

lea si,

[data1 + bx]

;每次移動的初始位置

mov dl ,

5;每次迴圈次數

loop2:

mov dh,

[si]

mov [di]

,dh ;移到 data2

inc di

add si,m ;移到下一行

dec dl

cmp dl,

0 ja loop2

inc bx ; 初始位置 ++

loop loop1

mov ah,

4ch int 21h

codes ends

end start

稀疏矩陣的轉置(矩陣轉置和快速轉置)

實現矩陣的轉置 1.將矩陣的行列值相互轉換。2.將每個三元組中的i和j交換。3.重排三元組之間的次序便可實現矩陣的轉置。void transposesmatrix tsmatrix m,tsmatrix t return transposesmatrix快速轉置的原理是 如果能預先確定矩陣m中每一列...

用python實現矩陣轉置

前幾天群裡有同學提出了乙個問題 手頭現在有個列表,列表裡面兩個元素,比如 1,2 之後不斷的新增新的列表,往原來相應位置新增。例如新增 3,4 使原列表擴充為 1,3 2,4 再新增 5,6 擴充為 1,3,5 2,4,6 等等。其實不動腦筋的話,用個二重迴圈很容易寫出來 def trans m a...

C 實現矩陣求轉置

一 矩陣在 中的表現形式可以由乙個二維陣列進行表示 double input newdouble 9 3 乙個九行三列的二維陣列 for int i 0 i 9 i 從 中獲取矩陣資料 二 乙個矩陣的轉置相當於將矩陣中橫縱座標進行調換例如 將 1 3 位置的的資料與 3 1 位置的資料進行調換,效果...