矩阵的转置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


三、运行结果

new2

posted @ 2009-12-25 21:26  石莹  阅读(379)  评论(0编辑  收藏  举报