📄 mema.asm
字号:
.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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -