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

📄 bsp.asm

📁 最基本介绍C的很不错的程序代码
💻 ASM
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Filename:	    bsp.asm;; Description:  A board support package for the operating system.;; Notes:        This code is specific to the Intel 80188 processor.;; ; Copyright (c) 1998 by Michael Barr.  This software is placed into; the public domain and may be used for any purpose.  However, this; notice must not be changed or removed and no warranty is either; expressed or implied by its publication or distribution.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    NAME    bsp    PUBLIC  _contextInit    PUBLIC  _contextSwitch    PUBLIC  _idlebsp SEGMENT WORD PUBLIC 'CODE'    ASSUME  cs:bsp    ASSUME  ds:nothing    ASSUME  es:nothing    ASSUME  ss:nothing;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Function:     contextInit();; Description:  Initialize the context of a new task.;; Parameters:   pContext  - A pointer to the task's context.;               pFunc     - A pointer to the task startup routine.;               pTask     - A pointer to the task object.;               pStackTop - A pointer to the top of the task's stack.;; Notes:;; Returns:      None defined.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EVEN_contextInit   PROC    FAR    push    bp	    mov     bp, sp    les     di, dword ptr ss:[bp+6]     ; Get pContext from the caller.    ;    ; Initialize the return address.    ;    push    ds    lds     bx, dword ptr ss:[bp+10]    ; Get pFunc from the caller.    mov     dx, ds    mov     es:[di], bx                 mov     es:[di+2], dx    ;    ; Initialize the processor flags.    ;    pushf							    pop     ax    or      ax, 0000001000000000b       ; Enable interrupts by default.    mov     es:[di+4], ax               ;    ; Initialize the stack segment.    ;    les     di, dword ptr ss:[bp+18]    ; Point to the task's stack.    lds     bx, dword ptr ss:[bp+14]    ; Get pTask from the caller.    mov     dx, ds    mov     es:[di-4], bx               ; Place pTask onto the stack.    mov     es:[di-2], dx    les     di, dword ptr ss:[bp+6]     ; Point to the task's context.    lds     bx, dword ptr ss:[bp+18]    ; Get pStack from the caller.    mov     dx, ds    sub     bx, 8                       ; Save stack space for pTask.    mov     es:[di+6], bx               mov     es:[di+8], dx    ;    ; Initialize the data segment.    ;    pop     ds    mov     dx, ds                      mov     es:[di+10], si    mov     es:[di+12], dx    pop     bp    ret_contextInit   ENDP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Function:    contextSwitch();; Description: This is the heart of the operating system.;; Parameters:  pOldContext - A pointer to the current context.;              pNewContext - A pointer to the new context.;; Notes:;; Returns:     None defined.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EVEN_contextSwitch   PROC    FAR    push    bp    mov     bp, sp    ;    ; Get pOldContext from the stack.    ;    les     di, dword ptr ss:[bp+6]     mov     dx, es    mov     ax, di    ;    ; if (pOldContext == NULL) goto fromIdle;    ;    or      ax, dx    jz      fromIdle    ;    ; Save the address of the end of this routine.    ;    mov     dx, cs    lea     ax, switchComplete    mov     es:[di], ax    mov     es:[di+2], dx    ;    ; Save the processor flags.    ;    pushf                   pop     es:[di+4]    ;    ; Save the stack segment.    ;    mov     dx, ss    mov     es:[di+6], sp    mov     es:[di+8], dx    ;    ; Save the data segment.    ;    mov     dx, ds    mov     es:[di+10], si    mov     es:[di+12], dxfromIdle:            ;    ; Get pNewContext from the stack.    ;    les     di, dword ptr ss:[bp+10]    mov     dx, es    mov     ax, di    ;    ; Restore the data segment.    ;    lds     si, dword ptr [di+10]    ;    ; Restore the stack segment.    ;    mov     dx, es:[di+8]      mov     ax, es:[di+6]    pushf                           ; Save the current interrupt state.    pop     cx    cli                             ; Disable interrupts.    mov     ss, dx    mov     sp, ax    push    cx    popf                            ; Restore the saved interrupt state.    ;    ; Restore the processor flags.    ;    push    es:[di+4]    ;    ; Restore the return address.    ;    push    es:[di+2]    push    es:[di]    ;    ; Now return, taking the saved flags with us.    ;    iretswitchComplete:                pop     bp    ret_contextSwitch   ENDP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Function:    idle();; Parameters:  pTask - A pointer to the task object.;; Description: The idle task.;; Notes:;; Returns:     None defined.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EVEN_idle            PROC FARidleLoop:    jmp     idleLoop _idle            ENDPbsp ENDSEND

⌨️ 快捷键说明

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