矩阵的转置2
王爽汇编语言第二版学习笔记
一、题目要求
在一个段中定义一个16*16(256个字节)的矩阵,并从00-FF填充数据。编程程序,实现该矩阵的转置,不允许使用其它的任何内存空间(包括栈)
二、实现代码
assume cs:codesg,ds:datasg
datasg segment
db 256 dup (0)
datasg ends
codesg segment
start:
mov ax,datasg
mov ds,ax
mov bx,0
mov al,0
mov cx,256
s0: ;填充矩阵
mov [bx],al
inc al
inc bx
loop s0
mov bx,1 ;使用bx控制横向列偏移地址
mov bp,10h ;使用bp控制纵向行偏移地址
mov cx,15
s:
mov dx,cx ;保存cx,准备进入内层循环
mov si,0 ;用si控制横向的行偏移地址
mov di,0 ;用di控制纵向的列偏移地址
mov cx,bx ;在第一行有1个数需要交换,第二行有2个数需要交换。。。
s1:
mov al,[bx+si] ;读取数据并交换位置
mov ah,ds:[bp+di]
mov [bx+si],ah
mov ds:[bp+di],al
inc di
add si,10h
loop s1
inc bx
add bp,10h
mov cx,dx
loop s
mov ax,4c00h
int 21h
codesg ends
end start
三、运行结果