⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stack.asm

📁 由3926个源代码
💻 ASM
字号:
;STACK.ASM

;Define segment names used by C
;
_TEXT   segment byte public 'CODE'
_TEXT   ends

CONST   segment word public 'CONST'
CONST   ends

_BSS    segment word public 'BSS'
_BSS    ends

_DATA   segment word public 'DATA'
_DATA   ends

DGROUP  GROUP   CONST, _BSS, _DATA

    assume  CS:_TEXT, DS:DGROUP  

    public  _set_stack, _restore_stack
    extrn   _stack_ptr:near     ;our TSR stack
    extrn   _ss_save:near       ;save foreground SS
    extrn   _sp_save:near       ;save foreground SP

_TEXT   segment
;*****
;void far set_stack(void) - 
;   save current stack and setup our local stack
;*****
_set_stack  proc    far

;save foreground stack

;we need to get the return values from the stack 
;since the current stack will change
    pop ax  ;get return offset
    pop bx  ;get return segment

;save away foreground process' stack
    mov word ptr _ss_save,ss
    mov word ptr _sp_save,sp

;setup our local stack
    mov ss,word ptr _stack_ptr+2
    mov sp,word ptr _stack_ptr    

IFDEF MULTI 
   mov bp,sp   ;make bp relative to our stack frame
ENDIF

;setup for ret
    push    bx  
    push    ax
            
    ret
_set_stack  endp

;*****
;void far restore_stack(void) - 
;   restore foreground stack, throw ours away 
;*****
_restore_stack  proc    far

;we need to get the return values from the stack 
;since the current stack will change
    pop cx  ;get return offset
    pop bx  ;get return segment

;save background stack
    mov word ptr _stack_ptr+2,ss
    mov word ptr _stack_ptr,sp

;restore foreground stack here
    mov ss,word ptr _ss_save
    mov sp,word ptr _sp_save      

IFDEF MULTI 
   mov bp,sp   ;make bp relative to our stack frame
ENDIF

;setup for ret
    push bx 
    push cx
            
    ret
_restore_stack  endp
_TEXT   ends

_DATA   segment 

_DATA   ends

    end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -