彙編實現矩陣的轉置
題意:
給定乙個 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 位置的資料進行調換,效果...