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

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

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

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

链表【讲解】

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

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

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

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

振荡排序算法【讲解】

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

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

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

深度优先搜索【源代码】

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

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

算法讲堂

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

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

    现本栏目的内容处于不断添加中,请随时关注。
算法讲堂-》栈的顺序存储【源代码】
    assume cs:code,ds:data 
data segment  
;全局变量
STACK_INIT_SIZE db 20 

;栈的数据结构
s_base       dw -1 
s_top        dw -1
stack_size   db 0 

;栈分配的空间 
MEMORY_SPACE db 100 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],ax 
  mov ds:[si+2],ax 
  mov al,STACK_INIT_SIZE 
  mov ds:[si+4],al  
  pop bx
  pop ax
  ret   
  
;入栈 
;参数:
;     (DS)=栈结构体变量的段地址
;     (SI)=栈结构体变量的偏移地址
;     (DL)=插入元素的值
;返回:
;     (AL)=结果 0:失败;1:成功
push_s:
  push bx
  mov ax,ds:[si+2] 
  sub ax,ds:[si] 
  cmp al,ds:[si+4] 
  je push_fail   
  mov bx,ds:[si+2] 
  mov byte ptr [bx],dl
  inc word ptr ds:[si+2] 
  mov al,1
  jmp push_finish
push_fail: 
  mov al,0 
push_finish: 
  pop bx
  ret 
  
;出栈
;参数:
;     (DS)=栈结构体变量的段地址
;     (SI)=栈结构体变量的偏移地址
;返回:
;     (DL)=出栈元素的值
;     (AL)=结果 0:失败;1:成功
pop_s: 
  push bx
  mov ax,ds:[si+2] 
  mov bx,ds:[si]
  cmp ax,bx 
  je pop_fail
  dec word ptr ds:[si+2] 
  mov bx,ds:[si+2] 
  mov dl,[bx]
  mov al,1 
  jmp pop_finish 
pop_fail: 
  mov al,0 
pop_finish:
  pop bx
  ret 

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

;销毁栈 
;参数:
;      (DS)=栈结构体变量的段地址
;      (SI)=栈结构体变量的偏移地址
;返回:(无)

destroy_s: 
  mov word ptr ds:[si+2],-1 
  mov word ptr ds:[si],-1 
  mov byte ptr ds:[si+4],0  
  ret 

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

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

;获得栈的长度
;参数:
;      (DS)=栈结构体变量的段地址
;      (SI)=栈结构体变量的偏移地址
;返回:
;      (DL)=栈的长度
s_len:
  push ax
  push bx
  mov ax,ds:[si] 
  mov bx,ds:[si+2] 
  sub bx,ax 
  mov dl,bl
  pop bx
  pop ax
  ret 
  
code ends 
end start

[07/09/22]

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