pm.asm

来自「一个微型操作系统源码」· 汇编 代码 · 共 45 行

ASM
45
字号
GLOBAL  _READ_MSW, _READ_CR0, _WRITE_CR0, _LGDT, _UPDATE_CS

SEGMENT _TEXT PUBLIC CLASS=CODE USE16

_READ_MSW:
        smsw    ax
        retn

_READ_CR0:
        mov     eax, cr0	; read CR0 to eax
        mov     edx, eax
        shr     edx, 16		; dx:ax = CR0 (return value)
        retn

_WRITE_CR0:
        push    bp
        mov     bp, sp
        mov     eax, [ss:bp+4]	; eax = 32-bit parameter
        mov     cr0, eax
        pop     bp
        retn

_LGDT:
	push	bp
	mov	bp, sp
	push	bx
	mov     bx, [ss:bp+4]	; ds:bx = pointer to GDTR structure
	lgdt	[ds:bx]		; load GDTR
	pop	bx
	pop	bp
	retn

_UPDATE_CS:
	push	bp
	mov	bp, sp
	mov     ax, [ss:bp+4]	; ax = new cs
        push    ax		; push segment
        push    word .1		; push offset
        retf			; we have a new cs now
.1:
	pop	bp
	retn

SEGMENT _DATA PUBLIC CLASS=DATA

⌨️ 快捷键说明

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