mema.asm

来自「从dos下装载内核」· 汇编 代码 · 共 73 行

ASM
73
字号
.386p
JUMP16 macro selector,offsetv
        db 0eah
        dw offsetv
        dw selector
endm
extrn _GdtPtrForBios:qword
public _ToProtectAndCopy
_TEXT	segment byte public use16 'CODE'
_TEXT	ends
_DATA	segment word public use16 'DATA'
_DATA	ends
_BSS	segment word public use16 'BSS'
_BSS	ends
DGROUP	group	_DATA,_BSS
	assume	cs:_TEXT,ds:DGROUP
_TEXT segment byte public use16 'CODE'
assume cs:_TEXT,ds:DGROUP
_ToProtectAndCopy:
;ToProtectAndCopy(void *SrcBuf,int WordSize)
;SrcBuf=bp+4,WordSize=bp+6
        push bp
        mov bp,sp
        pusha
        push ds
        push es
        cli
        lgdt _GdtPtrForBios
        mov eax,cr0
        or eax,1
        mov cr0,eax
        JUMP16 3*8,<offset Protect>
Protect:
        mov ax,1*8
        mov ss,ax
        mov ax,1*8
        mov ds,ax
        mov ax,2*8
        mov es,ax
        mov cx,[bp+6]
        mov si,[bp+4]
        mov edi,0
        cld
cycle1:
        test cx,cx
        jz ToReal
        lodsw
        mov es:[edi],ax
        inc edi
        inc edi
        dec cx
        jmp cycle1
ToReal:
        pop bx
        pop dx
        mov eax,cr0
        and eax,0fffffffeh
        mov cr0,eax
        JUMP16 <seg real>,<offset real>
real:
        mov es,bx
        mov ds,dx
        mov ss,dx
        popa
        pop bp
        sti
        ret
_TEXT ends
end



⌨️ 快捷键说明

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