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

📄 adsintr.asm

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
                mov     cl,&num                 ; ...
                int     21h                     ; ...
                pop     ds                      ; ...
                endm

                allexceptions   setvect

                mov     eax,1                   ; return true
                pop     ds                      ; restore registers
                pop     es                      ; ...
                pop     edx                     ; ...
                pop     ebx                     ; ...
                pop     ecx                     ; ...
                ret                             ; return to caller
GrabVects       endp

public          ReleVects
ReleVects       proc near
                push    ecx                     ; save registers
                push    edx                     ; ...
                push    ebx                     ; ...
                push    ds                      ; ...
                push    es                      ; ...

oldvect         macro   name,num
                mov     ds,cs:dataseg           ; get addressability
                mov     edx,i&num&off           ; restore old int3 handler
                mov     ds,i&num&seg            ; ...
                mov     ax,2533h                ; ...
                mov     cl,&num                 ; ...
                int     21h                     ; ...
                endm

                allexceptions   oldvect

                pop     es                      ; restore registers
                pop     ds                      ; ...
                pop     ebx                     ; ...
                pop     edx                     ; ...
                pop     ecx                     ; ...
                ret                             ; return to caller
ReleVects      endp

public          GetDosLong
GetDosLong      proc near
                mov     eax,4[esp]
                push    fs
                mov     fs,Meg1
                mov     eax,dword ptr fs:[eax]
                pop     fs
                ret
GetDosLong      endp

public          GetDosByte
GetDosByte      proc near
                mov     eax,4[esp]
                push    fs
                mov     fs,Meg1
                movzx   eax,byte ptr fs:[eax]
                pop     fs
                ret
GetDosByte      endp

public          PutDosByte
PutDosByte      proc near
                push    edx
                mov     eax,8[esp]
                mov     edx,12[esp]
                push    fs
                mov     fs,Meg1
                mov     byte ptr fs:[eax],dl
                pop     fs
                pop     edx
                ret
PutDosByte      endp

public          PutDosLong
PutDosLong      proc near
                push    edx
                mov     eax,8[esp]
                mov     edx,12[esp]
                push    fs
                mov     fs,Meg1
                mov     fs:[eax],edx
                pop     fs
                pop     edx
                ret
PutDosLong      endp

public          CallRealMode
CallRealMode    proc near
                mov     eax,4[esp]
                push    ebx
                push    ecx
                push    edx
                push    esi
                push    edi
                push    ebp
                mov     ebx,eax
                xor     ecx,ecx
                mov     ax,250eH
                int     21H
                pop     ebp
                pop     edi
                pop     esi
                pop     edx
                pop     ecx
                pop     ebx
                ret
CallRealMode    endp

public          GetDS
GetDS           proc    near
                xor     eax,eax
                mov     ax,ds
                ret
GetDS           endp


public          GetSS
GetSS           proc    near
                xor     eax,eax
                mov     ax,ss
                ret
GetSS           endp


public          GetCS
GetCS           proc    near
                xor     eax,eax
                mov     ax,cs
                ret
GetCS           endp


public          GetFL
GetFL           proc    near
                pushfd
                pop     eax
                ret
GetFL           endp

public          GetLinear
GetLinear       proc    near
                push    ebx             ; save regs
                push    ecx             ; ...
                mov     ebx,12[esp]     ; load selector
                mov     ax,2508H        ; get segment linear base address
                int     21h             ; ...
                add     ecx,16[esp]     ; add offset to base address
                mov     eax,ecx         ; return it
                pop     ecx
                pop     ebx
                ret
GetLinear       endp


public          SegLimit
SegLimit        proc    near
                lsl     eax,word ptr 4[esp]; get segment limit of selector
                jne     nogood          ; if good selector
                ret                     ; - return segment limit
nogood:         xor     eax,eax         ; else
                ret                     ; - return( 0 )
SegLimit        endp

public          DoReadMem
DoReadMem       proc    near
                mov     ax,4[esp]       ; load segment
                verr    ax              ; if not ok for read
                je      readok          ; - then
                xor     eax,eax         ; - return( 0 )
                ret                     ; - ...
readok:         push    ebx             ; save regs
                push    edx             ; ...
                push    ds              ; ...
                mov     ds,16[esp]      ; load seg
                mov     edx,20[esp]     ; load offset
                mov     ebx,24[esp]     ; address of buffer
                mov     al,[edx]        ; get byte at seg:offset
                pop     ds              ; restore reg
                mov     [ebx],al        ; save byte in buffer
                pop     edx             ; restore regs
                pop     ebx             ; ...
                mov     eax,1           ; return( 1 )
                ret                     ; ...
DoReadMem       endp

public          WriteOk
WriteOk         proc    near
                mov     ax,4[esp]       ; load segment
                verw    ax              ; if ok for write
                sete    al              ; return TRUE
                movzx   eax,al          ; ...
                ret                     ; ...
WriteOk         endp


public          DoWriteMem
DoWriteMem      proc    near
                mov     ax,4[esp]       ; load segment
                verw    ax              ; if not ok for read
                je      writeisok       ; - then
                xor     eax,eax         ; - return( 0 )
                ret                     ; - ...
writeisok:      push    edx             ; save regs
                push    ds              ; ...
                mov     edx,20[esp]     ; get address of buffer
                mov     al,[edx]        ; load byte from buffer
                mov     ds,12[esp]      ; get seg
                mov     edx,16[esp]     ; load offset
                mov     [edx],al        ; store byte at seg:offset
                pop     ds              ; restore regs
                pop     edx             ; ...
                mov     eax,1           ; return( 1 )
                ret                     ; ...
DoWriteMem      endp

sysregs         macro   write
                push    ebx                     ; save regs
                push    edx                     ; ...
                mov     edx,12[esp]             ; get buffer address
                mov     ax,02535h               ; system call
                mov     ebx,&write              ; read/write
                int     21h                     ; ...
                pop     edx                     ; restore regs
                pop     ebx                     ; ...
                ret                             ; return to caller
                endm

public          GetSysRegs
GetSysRegs      proc near
                sysregs 0
GetSysRegs      endp

public          SetSysRegs
SetSysRegs      proc near
                sysregs 1
SetSysRegs      endp

_text           ends

                end

⌨️ 快捷键说明

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