pmtest2.asm 保护模式2

本文介绍了一个基于《自己动手写操作系统》一书中的示例,实现从实模式切换到保护模式再返回实模式的过程。文中详细解释了相关代码,并对GDT(全局描述符表)的配置、描述符的作用及选择子的设定进行了说明。

参考于渊的《自己动手写操作系统》第三章中从实模式切换到保护模式,最后有重新

切回实模式的代码(代码如下),其中有几点不太明白的,参考其他文章之后在此记录一下。


其中还有不太明白的地方,希望大家能在下面 留个言帮我讲明白,谢谢。

下面代码有些宏定义没贴出来,应该能看明白。

  1保护模式与实模式的切换(转) - fanwei51880 - 点睛==========================================
  2保护模式与实模式的切换(转) - fanwei51880 - 点睛; pmtest2.asm
  3保护模式与实模式的切换(转) - fanwei51880 - 点睛; 编译方法:nasm pmtest2.asm -o pmtest2.com
  4保护模式与实模式的切换(转) - fanwei51880 - 点睛==========================================
  5保护模式与实模式的切换(转) - fanwei51880 - 点睛
  6保护模式与实模式的切换(转) - fanwei51880 - 点睛%include    "pm.inc"    ; 常量, 宏, 以及一些说明
  7保护模式与实模式的切换(转) - fanwei51880 - 点睛
  8保护模式与实模式的切换(转) - fanwei51880 - 点睛org    0100h
  9保护模式与实模式的切换(转) - fanwei51880 - 点睛    jmp    LABEL_BEGIN
 10保护模式与实模式的切换(转) - fanwei51880 - 点睛
 11保护模式与实模式的切换(转) - fanwei51880 - 点睛[SECTION .gdt]
 12保护模式与实模式的切换(转) - fanwei51880 - 点睛; GDT
 13保护模式与实模式的切换(转) - fanwei51880 - 点睛;                                         段基址,       段界限     , 属性
 14保护模式与实模式的切换(转) - fanwei51880 - 点睛LABEL_GDT:        Descriptor           0,                 00             ; 空描述符
 15保护模式与实模式的切换(转) - fanwei51880 - 点睛LABEL_DESC_NORMAL:    Descriptor           0,            0ffffh, DA_DRW        ; ***注意此处为Normal 描述符*****
 16保护模式与实模式的切换(转) - fanwei51880 - 点睛LABEL_DESC_CODE32:    Descriptor           0,  SegCode32Len - 1, DA_C + DA_32    ; 非一致代码段, 32
 17保护模式与实模式的切换(转) - fanwei51880 - 点睛LABEL_DESC_CODE16:    Descriptor           0,            0ffffh, DA_C        ; 非一致代码段, 16
 18保护模式与实模式的切换(转) - fanwei51880 - 点睛LABEL_DESC_DATA:    Descriptor           0,    DataLen - 1, DA_DRW        ; Data
 19保护模式与实模式的切换(转) - fanwei51880 - 点睛LABEL_DESC_STACK:    Descriptor           0,        TopOfStack, DA_DRWA + DA_32    ; Stack, 32 位
 20保护模式与实模式的切换(转) - fanwei51880 - 点睛LABEL_DESC_TEST:    Descriptor    0500000h,            0ffffh, DA_DRW
 21保护模式与实模式的切换(转) - fanwei51880 - 点睛LABEL_DESC_VIDEO:    Descriptor     0B8000h,            0ffffh, DA_DRW        ; 显存首地址
 22保护模式与实模式的切换(转) - fanwei51880 - 点睛; GDT 结束
 23保护模式与实模式的切换(转) - fanwei51880 - 点睛
 24保护模式与实模式的切换(转) - fanwei51880 - 点睛GdtLen        equ    $ - LABEL_GDT    ; GDT长度
 25保护模式与实模式的切换(转) - fanwei51880 - 点睛GdtPtr        dw    GdtLen - 1    ; GDT界限
 26保护模式与实模式的切换(转) - fanwei51880 - 点睛        dd    0        ; GDT基地址
 27保护模式与实模式的切换(转) - fanwei51880 - 点睛
 28保护模式与实模式的切换(转) - fanwei51880 - 点睛; GDT 选择子
 29保护模式与实模式的切换(转) - fanwei51880 - 点睛SelectorNormal        equ    LABEL_DESC_NORMAL    - LABEL_GDT
 30保护模式与实模式的切换(转) - fanwei51880 - 点睛SelectorCode32        equ    LABEL_DESC_CODE32    - LABEL_GDT
 31保护模式与实模式的切换(转) - fanwei51880 - 点睛SelectorCode16        equ    LABEL_DESC_CODE16    - LABEL_GDT
 32保护模式与实模式的切换(转) - fanwei51880 - 点睛SelectorData        equ    LABEL_DESC_DATA        - LABEL_GDT
 33保护模式与实模式的切换(转) - fanwei51880 - 点睛SelectorStack        equ    LABEL_DESC_STACK    - LABEL_GDT
 34保护模式与实模式的切换(转) - fanwei51880 - 点睛SelectorTest        equ    LABEL_DESC_TEST        - LABEL_GDT
 35保护模式与实模式的切换(转) - fanwei51880 - 点睛SelectorVideo        equ    LABEL_DESC_VIDEO    - LABEL_GDT
 36保护模式与实模式的切换(转) - fanwei51880 - 点睛; END of [SECTION .gdt]
 37保护模式与实模式的切换(转) - fanwei51880 - 点睛
 38保护模式与实模式的切换(转) - fanwei51880 - 点睛[SECTION .data1]     ; 数据段
 39保护模式与实模式的切换(转) - fanwei51880 - 点睛ALIGN    32
 40保护模式与实模式的切换(转) - fanwei51880 - 点睛[BITS    32]
 41保护模式与实模式的切换(转) - fanwei51880 - 点睛LABEL_DATA:
 42保护模式与实模式的切换(转) - fanwei51880 - 点睛SPValueInRealMode    dw    0
 43保护模式与实模式的切换(转) - fanwei51880 - 点睛; 字符串
 44保护模式与实模式的切换(转) - fanwei51880 - 点睛PMMessage:        db    "In Protect Mode now. ^-^"0    ; 进入保护模式后显示此字符串
 45保护模式与实模式的切换(转) - fanwei51880 - 点睛OffsetPMMessage        equ    PMMessage - $$  ; 字符串PMMessage相对于LABEL_DATA的偏移,相对于数据段的偏移
 46保护模式与实模式的切换(转) - fanwei51880 - 点睛StrTest:        db    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"0
 47保护模式与实模式的切换(转) - fanwei51880 - 点睛OffsetStrTest        equ    StrTest - $$
 48保护模式与实模式的切换(转) - fanwei51880 - 点睛DataLen            equ    $ - LABEL_DATA
 49保护模式与实模式的切换(转) - fanwei51880 - 点睛; END of [SECTION .data1]
 50"保护模式与�%A
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值