linux .asm,Linux内核学习笔记05--pmtest1.asm代码阅读

pm.inc

%macro Descriptor 3

dw %2 & 0FFFFh

dw %1 & 0FFFFh

db (%1 >> 16) & 0FFh

dw ((%2 >> 8) & 0F00h) | (%3 0F0FFh)

db (%1 >> 24) & 0FFh

%endmacro

pmtest1.asm

%include "pm.inc"

org 07c00h

jmp LABEL_BEGIN

[SECTION .gdt]

;段基址,段界限,属性(段界限 2bytes, 段基址 4bytes)

LABEL_GDT: Descriptor 0, 0, 0

LABEL_DESC_CODE32: Descriptor 0, SegCode32Len - 1, DA_C + DA_32

LABEL_DESC_VIDEO: Descriptor 0B8000h, 0ffffh, DA_DRW

GdtLen equ $ - LABEL_GDT

GdtPtr dw GdtLen - 1

dd 0

SelectorCode32 equ LABEL_DESC_CODE32 - LABEL_GDT

SelectorVideo equ LABEL_DESC_VIDEO - LABEL_GDT

[SECTION .s16]

[BITS 16]

LABEL_BEGIN:

mov ax, cs

mov ds, ax

mov es, ax

mov ss, ax

mov sp, 0100h

xor eax, eax

mov ax, cs

shl eax, 4

add eax, LABEL_SEG_CODE32

mov word [LABEL_DESC_CODE32 + 2], ax

shr eax, 16

mov byte [LABEL_DESC_CODE32 + 4], al

mov byte [LABEL_DESC_CODE32 + 7], ah

xor eax, eax

mov ax, ds

shl eax, 4

add eax, LABEL_GDT

mov dword [GdtPtr + 2], eax

lgdt [GdtPtr]

cli

in al, 92h

or al, 00000010b

out 92h, al

mov eax, cr0

or eax, 1

mov cr0, eax

jmp dword SelectorCode32:0

[SECTION .s32]

[BITS 32]

LABEL_DESC_CODE32:

mov ax, SelectorVideo

mov gs, ax

mov edi, (80 * 11 + 79) * 2

mov ah, 0ch

mov al, 'p'

jmp $

SegCode32Len equ $ - LABEL_SEG_CODE32

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值