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

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

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

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

链表【讲解】

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

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

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

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

振荡排序算法【讲解】

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

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

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

深度优先搜索【源代码】

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

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

算法讲堂

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

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

    现本栏目的内容处于不断添加中,请随时关注。
算法讲堂-》栈的链式存储【源代码】
    assume cs:code,ds:data
data segment
;栈顶指针;栈底指针
  s_base dw -1
  s_top dw -1

;全局变量
  S_MAX_SIZE db 0
  ELEM_LEN db 3

;栈的存储空间  
  MEMORY_SPACE db 1000 dup (0)
data ends

code segment
start: 

;调用初始化栈子程序
  mov ax,data
  mov ds,ax
  mov si,offset s_base

  call init_s

;调用入栈子程序,设入栈字符为'a'
  mov ax,data
  mov ds,ax
  mov si,offset s_base

  mov dl,'a'
  call push_s

;调用入栈子程序,设入栈字符为'b'
  mov ax,data
  mov ds,ax
  mov si,offset s_base

  mov dl,'b'
  call push_s

;调用出栈子程序
  mov ax,data
  mov ds,ax
  mov si,offset s_base

  call pop_s

;调用获得最顶元素子程序
  mov ax,data
  mov ds,ax
  mov si,offset s_base

  call get_top_element

;调用判断栈是否为空子程序
  mov ax,data
  mov ds,ax
  mov si,offset s_base

  call s_empty

;调用获得栈的长度子程序
  mov ax,data
  mov ds,ax
  mov si,offset s_base

  call s_len

;调用清空栈子程序
  mov ax,data
  mov ds,ax
  mov si,offset s_base

  call clear_s

;调用销毁栈子程序
  mov ax,data
  mov ds,ax
  mov si,offset s_base

  call destroy_s

  mov ax,4c00h 
  int 21h 


;初始化栈
;参数:
;       (DS)=栈结构体变量的段地址
;       (SI)=栈结构体变量的偏移地址
;返回: (无)
init_s:
  push ax
  push bx
  mov ax,offset MEMORY_SPACE
  mov ds:[si+2],ax
  mov ds:[si],ax
  add ax,1
  mov bx,ax
  mov word ptr [bx],0
  pop bx
  pop ax
  ret
  
;入栈 
;参数:
;      (DS)=栈结构体变量的段地址
;      (SI)=栈结构体变量的偏移地址
;      (DL)=插入元素的值
;返回:(无)
push_s:
  push bx
  push di
  mov ax,ds:[si+2]
  add al,ELEM_LEN
  mov bx,ax
  inc bx
  mov di,ds:[si+2]
  mov [bx],di
  mov ds:[si+2],ax  
  mov bx,ds:[si+2]
  mov [bx],dl
  pop di
  pop bx
  ret
  
;出栈
;参数:
;      (DS)=栈结构体变量的段地址
;      (SI)=栈结构体变量的偏移地址
;      (DL)=插入元素的值
;返回:
;      (DL)=出栈元素的值
;      (AL)=结果 0:失败;1:成功
pop_s:
  push bx
  mov ax,ds:[si]
  mov bx,ds:[si+2]
  cmp bx,ax
  je pop_s_fail
  mov dl,[bx]
  add bx,1
  mov bx,[bx]
  mov ds:[si+2],bx
  mov al,1
  jmp pop_s_finish
pop_s_fail:
  mov al,0
pop_s_finish:
  pop bx
  ret

;得到栈顶元素值
;参数:
;      (DS)=栈结构体变量的段地址
;      (SI)=栈结构体变量的偏移地址
;返回:
;      (DL)=栈顶元素的值
;      (AL)=结果 0:失败;1:成功
get_top_element:
  mov ax,ds:[si]
  mov bx,ds:[si+2]
  cmp bx,ax
  je get_top_fail  
  mov dl,[bx]
  mov al,1
  jmp get_top_finish
get_top_fail:
  mov al,0
get_top_finish:
  ret

;销毁栈
;参数:
;      (DS)=栈结构体变量的段地址
;      (SI)=栈结构体变量的偏移地址
;返回:(无)
destroy_s:  
  mov word ptr ds:[si+2],-1 
  mov word ptr ds:[si],-1  
  ret
 
;清空栈
;参数:
;      (DS)=栈结构体变量的段地址
;      (SI)=栈结构体变量的偏移地址
;返回:(无)
clear_s: 
  push ax
  mov ax,ds:[si] 
  mov ds:[si+2],ax
  pop ax
  ret 

;判断栈是否为空
;参数:
;      (DS)=栈结构体变量的段地址
;      (SI)=栈结构体变量的偏移地址
;返回:
;      (DL)=结果 0:否;1:是
s_empty:
  push ax
  push bx
  mov ax,ds:[si] 
  mov bx,ds:[si+2] 
  cmp ax,bx 
  je  set_empty 
  mov dl,0 
  jmp sub_s_empty_finish 
set_empty: 
  mov dl,1 
sub_s_empty_finish: 
  pop bx
  pop ax
  ret

;获得栈的长度
;参数:
;      (DS)=栈结构体变量的段地址
;      (SI)=栈结构体变量的偏移地址
;返回:
;      (DL)=栈的长度
s_len:
  push ax
  push bx
  mov dl,0
  mov ax,ds:[si] 
  mov bx,ds:[si+2]
search_forward:
  cmp bx,ax
  je s_len_finish
  inc dl
  inc bx
  mov bx,[bx]
  jmp search_forward
s_len_finish:
  pop bx
  pop ax
  ret 

code ends
end start

[07/09/24]

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