帐号 密码  
 
多路树查找-外部查找(B树)【源代码】

多路树查找-外部查找(B树)【下载及演示说明】

双向链表演示程序【下载及演示说明】

循环链表演示程序【下载及演示说明】

链表【讲解】

动态存储分配之边界标识法演示程序【下载及演示说明】

动态存储分配之边界标识法【讲解】

首次适应算法和最佳适应算法【讲解】

动态存储分配之边界标识法【源代码】

振荡排序算法【讲解】

振荡排序演示程序【下载及演示说明】

树和二叉树相互转化【讲解】

深度优先搜索【下载及演示说明】

深度优先搜索【源代码】

朴素字符串匹配演示程序【下载及演示说明】

当前1/4页
首页 上一页 下一页 尾页

算法讲堂

    本栏目所有文章由本站组织业内技术专家原创而成,用汇编语言向学习者讲解经典问题的编程思想和编程方法。

    本栏目所有文章的版权归本站所有,转载请注明出处为汇编网<www.asmedu.net> 。

    现本栏目的内容处于不断添加中,请随时关注。
算法讲堂-》矩阵基本运算实现【源代码】
    ;矩阵的基本操作119
;操作方法:加,减,矩阵相乘,转置,数成矩阵
assume cs:code,ss:stack,ds:data
stack segment
        db 64 dup(0)
stack ends        
data segment 
        matrix0 db 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
        matrix1 db 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
        matrix2 dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 
        matrix3 db 16 dup(0)
data ends        
code segment
        start:  
                mov ax,stack
                mov ss,ax
                mov sp,64
                mov ax,data
                mov ds,ax
                ;加法
                mov si,offset matrix0
                mov di,offset matrix1
                mov bp,offset matrix2
                mov bl,0
                call matrix
                ;减法
                mov bl,1
                call matrix
                ;矩阵相乘
                mov bl,2
                call matrix
                ;转置
                mov si,offset matrix0
                mov di,offset matrix3
                mov bl,3
                call matrix
                ;数乘矩阵
                mov di,offset matrix2
                mov si,offset matrix0
                mov dl,2
                mov bl,4
                call matrix
                mov ax,4c00h
                int 21h
;*****************************************************************************************
        ;矩阵的相关预算,操作矩阵的元素占一个字节单元,相关矩阵均为4x4
        ;bl:矩阵方法的选择
                ;0:加法
                        ;ds:[di]:第一个矩阵的首地址
                        ;ds:[si]:第二个矩阵的首地址
                        ;ds:[bp]:结果矩阵的首地址 
                ;1:减法
                        ;ds:[di]:被减矩阵的首地址
                        ;ds:[si]:减数矩阵的首地址
                        ;ds:[bp]:结果矩阵的首地址 
                ;2:矩阵相乘法
                        ;ds:[di]:第一个矩阵的首地址,被成数
                        ;ds:[si]:第二个矩阵的首地址,成数
                        ;ds:[bp]:结果矩阵的首地址 
                ;3:转置
                        ;ds:[si]:被转置的矩阵首地址
                        ;ds:[di]:结果矩阵首地址
                ;4:数成矩阵
                        ;ds:[si]:被成矩阵的首地址
                        ;dl:成数
                        ;ds:[di]:结果矩阵的首地址
        matrix:
                jmp matrix_start
        ;矩阵具有方法的数量
        method_num db 5
        ;矩阵各个方法的入口地址
        method dw addition,subtration,multiplication,transpose,data_mul
        ;矩阵的行
        matrix_row dw 4
        ;矩阵的列
        matrix_col dw 4
        ;子程序结束的地址
        matrix_end_address dw matrix_end
        ;临时数据
        matrix_temp dw 0
        matrix_start:
                push bx
                cmp bl,byte ptr method_num
                ja method_num_over
                mov bh,0
                add bx,bx
                jmp word ptr method[bx]
        method_num_over:                
                jmp word ptr matrix_end_address
;*********************************************************************        
        ;两个矩阵的加法
        ;ds:[di]:第一个矩阵的首地址,元素为字节型
        ;ds:[si]:第二个矩阵的首地址,元素为字节型
        ;ds:[bp]:结果矩阵的首地址 ,元素为字型
        addition:
                push ax
                push cx
                push bp
                push di
                push si
                mov ax,matrix_row
                mov cx,matrix_col
                mul cl
                mov cx,ax
        add_loop:
                mov al,ds:[di]
                mov ah,0
                mov ds:[bp],ax
                mov al,ds:[si] 
                add ds:[bp],ax
                add bp,2
                inc si
                inc di
                loop add_loop
                pop si
                pop di
                pop bp
                pop cx
                pop ax
                jmp word ptr matrix_end_address
;*********************************************************************        
        ;两个矩阵的减法
        ;ds:[di]:被减矩阵的首地址,元素为字节型
        ;ds:[si]:第二个矩阵的首地址,元素为字节型
        ;ds:[bp]:结果矩阵的首地址 ,元素为字型
        subtration:
                push ax
                push cx
                push bp
                push di
                push si
                mov ax,matrix_row
                mov cx,matrix_col
                mul cl
                mov cx,ax
        sub_loop:
                mov al,ds:[di]
                mov ah,0
                mov ds:[bp],ax                
                mov al,ds:[si] 
                sub ds:[bp],ax
                add bp,2
                inc si
                inc di
                loop sub_loop
                pop si
                pop di
                pop bp
                pop cx
                pop ax
                jmp word ptr matrix_end_address
;*********************************************************************        
        ;两个矩阵的成法
        ;ds:[di]:第一个矩阵的首地址,被成数,元素为字节型
        ;ds:[si]:第二个矩阵的首地址,成数,元素为字节型
        ;ds:[bp]:结果矩阵的首地址 ,元素为字型
        multiplication:
                push ax
                push bx
                push cx
                push bp
                mov matrix_temp,bp 
                mov cx,matrix_row                
        mul_row_loop: 
                push cx
                mov cx,matrix_col
        mul_col_loop:
                push cx 
                push si
                push di
                mov word ptr ds:[bp],0
                ;根据bp计算行列值,bp结果矩阵的存储偏移地址
                push bp
                sub bp,matrix_temp
                mov ax,bp
                pop bp
                mov bl,2
                div bl
                mov ah,0
                mov bl,4
                div bl
                mov bx,ax
                ;ax中为列数
                mov al,ah
                mov ah,0
                add si,ax                
                ;bx中为行数
                mov bh,0
                mov al,4
                mov ah,0
                mul bl
                add di,ax
                ;计算结果矩阵的每个元素
                mov cx,matrix_col
        mul_element_loop:
                ;行
                mov al,ds:[di]
                ;列
                mul byte ptr ds:[si]
                add ds:[bp],ax
                add si,matrix_col
                inc di
                loop mul_element_loop 
                pop di
                pop si
                pop cx
                add bp,2
                loop mul_col_loop 
                pop cx 
                loop mul_row_loop
                pop bp
                pop cx
                pop bx
                pop ax
                jmp word ptr matrix_end_address
;*********************************************************************        
        ;矩阵的转置
        ;ds:[si]:被转置的矩阵首地址,元素为字节型
        ;ds:[di]:结果矩阵首地址,元素为字节型
        transpose:
                push ax
                push bx
                push cx
                push si
                push di
                mov cx,matrix_row
        trans_row_loop:
                push cx
                push di
                mov cx,matrix_col
        trans_col_loop:
                mov al,ds:[si]
                mov ds:[di],al
                add di,matrix_row
                inc si
                loop trans_col_loop 
                pop di
                pop cx
                inc di
                loop trans_row_loop
                pop di
                pop si
                pop cx
                pop bx
                pop ax
                jmp word ptr matrix_end_address
;*********************************************************************
        ;数字与矩阵的乘法
        ;ds:[si]:被成矩阵的首地址,元素为字节型
        ;dl:成数
        ;ds:[di]:结果矩阵的首地址,元素为字型
        data_mul:
                push ax
                push bx
                push cx
                push si
                push di
                mov ax,matrix_row
                mov ah,0
                mov bx,matrix_col
                mul bl
                mov cx,ax
        data_mul_loop:
                mov al,ds:[si]
                mul dl
                mov ds:[di],ax        
                add di,2
                inc si
                loop data_mul_loop
                pop di
                pop si
                pop cx
                pop bx
                pop ax
                jmp word ptr matrix_end_address
;*********************************************************************
        matrix_end:
                pop bx
                ret
;*****************************************************************************************                
code ends
end start                
;*****************************************************************************************

[07/10/11]

Copyright C 2006-2024 ASMEDU.NET All Rights Reserved
Email: asmedu@163.com