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

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

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

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

链表【讲解】

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

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

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

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

振荡排序算法【讲解】

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

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

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

深度优先搜索【源代码】

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

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

算法讲堂

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

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

    现本栏目的内容处于不断添加中,请随时关注。
算法讲堂-》一维数组【源代码】(下载及演示部分会陆续推出)
    assume cs:code,ds:array_space,ss:stack
stack segment
        db 36 dup(0)
stack ends
array_space segment
        db 100 dup(0)
array_space ends
data segment
        db '01234567289asdfghjklq132werttryuiop0'                
data ends
code segment
        start:
                mov ax,array_space
                mov ds,ax
                mov si,0
                ;数组初始化
                mov bl,0
                mov ax,30
                call array
                ;数组赋值
                mov ax,data
                mov es,ax
                mov di,0
                mov bl,4
                call array
                ;数组根据给定值查找,第一个与之匹配的数据下标,在ax中
                push si
                mov bl,2
                mov al,'2'
                mov si,3
                call array
                pop si
                ;查找,数据在al中
                mov bl,3
                mov ax,10
                call array
                ;用ah中的数据更新与al匹配的数组元素
                mov ah,'+'
                mov al,'0'
                mov bl,5
                call array
                ;更新下标为ax中的数据为dl中的数据
                mov ax,10
                mov dl,'*'
                mov bl,6
                call array
                ;统计与给定元素相匹配的个数
                mov al,'4'
                mov bl,7
                call array
                ;数组清空
                mov bl,8
                call array
                ;数组销毁
                mov bl,1
                call array
                mov ax,4c00h
                int 21h         
;*****************************************************************************************           
    ;数组array的数据类型为byte型 
    ;ds:数组的段地址 
    ;si:数组的起始下标 
    ;bl:数组的操作类型码:
            ;0:初始化 
                    ;ax:数组初始化大小
            ;1:销毁 
            ;2:按值查找第一个,从给定下标开始
                ;al要查找的数据,参数 
                  ;si:从此下标开始查找 
                  ;ax:数据的下标 ,返回 
            ;3:按下标查找
                      ;ax:数组的下标,参数 
                 ;al:数据 ,返回 
            ;4:数组赋值
                      ;es:[di]:数据段的首地址 
                     ;ds:[si]:数组的起始地址 
            ;5:按值所有与之匹配的更新
                    ;al:给定值 
                    ;ah:目标数据 
            ;6:按下标更新
                    ;ax:指定的下标 
                    ;dl:目标数据 
            ;7:统计与给定数据相同的元素个数 
                    ;al:给定的数据
                    ;bx:元素个数 
            ;8:清空数组 
    array: 
          jmp array_start 
    ;数组最大值长度4K,此值是数据段的大小 
    ARRAY_MAX_LENGTH dw 104 
    ;程序的入口地址 
   ; address_array_start dw array_start 
    ;数组方法的个数 
    array_method_num db 9 
    ;数组的操作 
    array_method dw init,destroy,search_value,search_cursor,value,update_value,update_cursor,account_element,clear_element   
    ;数组大小 
    array_size dw 0 
    ;数组下标的最大值 
    array_index_max dw 0 
    ;数组被初始化 
    array_is_inited dw 0 
    ;数组被赋值 
    array_is_valued dw 0 
    ;子函数中的标号地址 
    address_array_end dw array_end 
    array_start: 
          push ds  
          push si 
          push bx 
          cmp bl,array_method_num 
          ja method_num_over 
          mov bh,0  
          add bx,bx 
          jmp word ptr array_method[bx]  
    ;玩家输入的操作方法不存在 
    method_num_over: 
          jmp word ptr address_array_end 
;*********************************************************************     
       ;0:初始化数组空间     
       ;ax:数组的大小         
       ;初始化结果为数组元素为'!'。 
       init:  
          ;判断数组是否被初始化 
          cmp word ptr array_is_inited,1 
          je init_fail_inited  
          cmp ax,ARRAY_MAX_LENGTH 
          ;如果申请的数组超过数组最大值长度4K,则申请失败 
          ja init_fail 
          ;定义数组的大小 
          mov array_size,ax 
          mov array_index_max,ax 
          ;数组下标的最大值,数组大小-1 
          sub word ptr array_index_max,1 
          push cx  
          mov cx,array_size 
          ;初始化数组为空 
    init_clear: 
          mov byte ptr ds:[si],' '  
          inc si  
          loop init_clear  
          ;标记数组已经被初始化 
          mov word ptr array_is_inited,1  
          pop cx  
          jmp short init_end
    ;显示数组已经被初始化,导致操作失败的信息 
    init_fail_inited:  
          jmp short init_end
    init_fail: 
          ;显示数组的初始化值大于数组默认的最大值,导致初始化数组失败的信息           
          jmp short init_end
    init_end:
              jmp word ptr address_array_end 
;*********************************************************************     
    ;1:销毁数组空间 
    ;销毁数组的条件是存在已经被初始化的数组,即array_is_inited==1 
       destroy: 
             cmp word ptr array_is_inited,0 
             je destory_fail   
             mov word ptr array_size,0 
             mov word ptr array_index_max,0 
             mov word ptr array_is_inited,0 
             mov word ptr array_is_valued,0   
             jmp short destory_end 
       destory_fail:  
             jmp short destory_end 
       destory_end: 
             jmp word ptr address_array_end      
;*********************************************************************              
       ;2:按值查找第一个,从给定下标开始,并返回索引值 
       ;al要查找的数据,参数 
       ;si:从此下标开始查找 
       ;ax:数据的下标 ,返回 
       ;查找数组的条件是数组已经被赋值,即array_is_valued==1 
       search_value:  
          cmp word ptr array_is_valued,0 
          je search_value_fail  
          cmp si,array_index_max 
          ja search_index_over         
          ;查找的数据在al中   
    search_loop:  
          cmp ds:[si],al 
          je search_element 
          inc si            
          cmp si,array_index_max 
          ;查找到数组尾 
          je search_element 
          jmp short search_loop 
    search_index_over:  
          jmp short search_end 
    search_element: 
          mov ax,si  
          jmp short search_end 
    search_value_fail:  
          jmp short search_end 
    search_end:   
          jmp word ptr address_array_end 
;********************************************************************* 
       ;3:返回指定索引下标的元素值 
       ;ax:数组的下标,参数 
       ;al:数据 ,返回 
       ;查找数组的条件是数组已经被赋值,即array_is_valued==1 
    search_cursor:    
             cmp word ptr array_is_valued,0 
             je search_cursor_fail  
          ;下标值超过数组的大小,返回 
             cmp ax,array_index_max 
             ja search_cursor_over  
             mov si,ax 
             mov al,ds:[si]  
             jmp search_cursor_success 
       search_cursor_fail:  
             jmp search_cursor_end 
       search_cursor_over:  
             jmp search_cursor_end    
       search_cursor_success:    
             jmp search_cursor_end     
       search_cursor_end:  
             jmp word ptr address_array_end 
;*********************************************************************             
       ;4:数组赋值 
       ;es:[di]:数据段的首地址 
       ;ds:[si]:数组的起始地址 
       ;此操作的前提条件是数组要被初始化,即array_is_inited==1 
       value:  
             push cx 
             push ax  
             push di 
             cmp word ptr array_is_inited,0 
             je value_fail 
             cmp word ptr array_is_valued,1 
             je valued_fail   
             mov cx,array_size 
       value_loop: 
             mov al,es:[di] 
             mov ds:[si],al 
             ;显示赋值过程   
             inc di 
             inc si 
             loop value_loop 
             ;标记数组已经被赋值 
             mov word ptr array_is_valued,1  
             jmp short value_end 
    value_fail:  
                        jmp short value_end 
   valued_fail:  
          jmp short value_end 
    value_end: 
          pop di  
          pop ax 
          pop cx  
          jmp word ptr address_array_end  
;*********************************************************************              
    ;5:更新所有和给定值相同的数据元素 
    ;al:给定值 
    ;ah:目标数据 
    ;查找数组的条件是数组已经被赋值,即array_is_valued==1 
    update_value: 
          push cx 
          push dx 
          push di 
          cmp word ptr array_is_valued,0 
          je update_value_fail  
          mov cx,array_size 
    update_value_loop:   
          cmp ds:[si],al 
          je update 
    goto_loop:
          inc si  
          loop update_value_loop  
          jmp short update_value_end       
    update:  
          mov ds:[si],ah    
          jmp short goto_loop
    update_value_fail:  
          jmp short update_value_end  
    update_value_end:  
          pop di 
          pop dx 
          pop cx 
          jmp word ptr address_array_end 
;********************************************************************* 
    ;6:更新指定下标的元素 
    ;ax:指定的下标 
    ;dl:目标数据 
    ;查找数组的条件是数组已经被赋值,即array_is_valued==1 
    update_cursor: 
          cmp word ptr array_is_valued,0 
          je update_cursor_fail  
          cmp ax,array_size 
          ja update_cursor_over 
          ;根据元素位置计算显示的行和列                          
          mov si,ax  
          mov ds:[si],dl   
          jmp short update_cursor_end 
    update_cursor_over:  
           jmp short update_cursor_end 
    update_cursor_fail:  
           jmp short update_cursor_end 
    update_cursor_end:  
          jmp word ptr address_array_end 
;********************************************************************* 
    ;统计与给定数据相同的元素个数 
    ;al:给定的数据 
    ;bx:元素个数 
    ;查找数组的条件是数组已经被赋值,即array_is_valued==1 
    account_element: 
           push cx  
           cmp word ptr array_is_valued,0 
           je account_element_fail  
           mov bx,0 
           mov cx,array_size 
    account_element_loop:  
          cmp ds:[si],al 
          je inc_account_element 
    goto_account:
          inc si  
          loop account_element_loop  
          jmp short account_element_end 
    inc_account_element:  
          inc bx   
          jmp short goto_account 
    account_element_fail:  
          jmp short account_element_end 
    account_element_end: 
          pop cx 
          jmp word ptr address_array_end 
;********************************************************************* 
    ;清空数组 
    ;查找数组的条件是数组已经被赋值,即array_is_valued==1 
    clear_element: 
          push cx 
          cmp word ptr array_is_valued,0 
          je clear_element_fail   
          mov cx,array_size 
          ;初始化数组为空 
    clear_clear: 
          mov byte ptr ds:[si],' '  
          inc si  
          loop clear_clear  
          mov word ptr array_is_valued,0  
          jmp short clear_element_end 
    clear_element_fail:  
          jmp short clear_element_end 
    clear_element_end:  
          pop cx 
          jmp word ptr address_array_end    
;*********************************************************************     
    array_end: 
          pop bx 
          pop si    
          pop ds    
          ret     
;*****************************************************************************************   
code ends
end start

[07/09/21]

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