自己动手写操作系统 - 01 保护模式之段保护

自己动手写操作系统 - 01 保护模式之段保护

构造段描述符的宏定义
1. 要说到段,那么GDT是不可少的,说到GDT就要说到存储在GDT里的段描述符
2. 那么说到段描述(我可就不困了),它是干什么的呢?甘宁来来的- ,0
3. 段描述符相当于描述一块地(内存),这块地的基址(地在哪儿),这块地的大小(limit),这块地的性质(attribute)
;
; 描述符
; usage: Descriptor Base, Limit, Attr
;        Base:  dd
;        Limit: dd (low 20 bits available)
;        Attr:  dw (lower 4 bits of higher byte are always 0)
%macro Descriptor 3
	dw	%2 & 0FFFFh		; 段界限 1				(2 字节)
	dw	%1 & 0FFFFh		; 段基址 1				(2 字节)
	db	(%1 >> 16) & 0FFh; 段基址 2				(1 字节)
	dw	((%2 >> 8) & 0F00h) | (%3 & 0F0FFh)	
	; 属性 1 + 段界限 2 + 属性 2		(2 字节)
	db	(%1 >> 24) & 0FFh			; 段基址 3				(1 字节)
%endmacro ; 共 8 字节

;声明段描述符
[SECTION .gdt] ;创建段描述符表的描述符  和 选择子

;LABEL_GDT:		Descriptor			0,				0,0;空描述符
;LABEL_DESC_CODE32:Descriptor			0,SegCode32Len - 1,DA_C + DA_32
;保护模式代码段描述符,32位的
;LABEL_DESC_VIDEO: Descriptor 0B8000,0ffffh,DA_DRW
;存入显存地址和 limit
;段界限     , 属性
LABEL_GDT:	   Descriptor			0,                0, 0           ; 空描述符
LABEL_DESC_CODE32: Descriptor       0, SegCode32Len - 1, DA_C + DA_32 ; 非一致代码段 无DA_32 会运不成功
LABEL_DESC_VIDEO:  Descriptor 0B8000h,           0ffffh, DA_DRW	      ; 显存首地址

;构建段选择子 一块地的信息太多了,用这块地的索引(段选择子)来快速找到这块地

Selector_CODE32 equ LABEL_DESC_CODE32 - LABEL_GDT

Selector_VEDIO equ LABEL_DESC_VIDEO - LABEL_GDT

GDTSegLen equ $ - LABEL_GDT;段描述符和段选择子占用的bytes

GdtLen equ $ - LABEL_GDT ;GDT长度
GdtPtr dw GdtLen - 1 ;GDT limt
		dd 0 ;GDT 基址


;初始化段描述符(开始搞这块地了)
[SECTION .s16]
[BITS 16]
LABEL_BEGIN:
	;初始化实模式下段寄存器
	mov ax,cs
	mov ds,ax
	mov es,ax
	mov ss,ax
	mov sp,0100h
	
	;向全局描述表GDT填写保
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值