当前位置:  技术问答>linux和unix

关于《自己动手写操作系统》中的一个疑惑

    来源: 互联网  发布时间:2016-09-15

    本文导语:  在书的第三章中说要将程序返回实模式时,有以下代码: LABEL_SEG_CODE16: ; 跳回实模式: mov ax, SelectorNormal mov ds, ax mov es, ax mov fs, ax mov gs, ax mov ss, ax 其中  [SECTION .gdt] ; GDT ;                      ...

在书的第三章中说要将程序返回实模式时,有以下代码:

LABEL_SEG_CODE16:
; 跳回实模式:
mov ax, SelectorNormal
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov ss, ax

其中 
[SECTION .gdt]
; GDT
;                                         段基址,       段界限     , 属性
LABEL_GDT: Descriptor        0,                 0, 0      ; 空描述符
LABEL_DESC_NORMAL: Descriptor        0,            0ffffh, DA_DRW ; Normal 描述符
LABEL_DESC_CODE32: Descriptor        0,  SegCode32Len - 1, DA_C + DA_32 ; 非一致代码段, 32
LABEL_DESC_CODE16: Descriptor        0,            0ffffh, DA_C ; 非一致代码段, 16
LABEL_DESC_DATA: Descriptor        0, DataLen - 1, DA_DRW ; Data
LABEL_DESC_STACK: Descriptor        0,        TopOfStack, DA_DRWA + DA_32 ; Stack, 32 位
LABEL_DESC_TEST: Descriptor 0500000h,            0ffffh, DA_DRW
LABEL_DESC_VIDEO: Descriptor  0B8000h,            0ffffh, DA_DRW ; 显存首地址
; GDT 结束

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

; GDT 选择子
SelectorNormal equ LABEL_DESC_NORMAL - LABEL_GDT
SelectorCode32 equ LABEL_DESC_CODE32 - LABEL_GDT
SelectorCode16 equ LABEL_DESC_CODE16 - LABEL_GDT
SelectorData equ LABEL_DESC_DATA - LABEL_GDT
SelectorStack equ LABEL_DESC_STACK - LABEL_GDT
SelectorTest equ LABEL_DESC_TEST - LABEL_GDT
SelectorVideo equ LABEL_DESC_VIDEO - LABEL_GDT


为什么要重新设置ds,es等寄存器的值,而且这里SelectorNormal也只是个索引,这样做有什么意义吗?

|
实模式下CS指向代码段,其他都指向数据和堆栈段,所以这些统统设置成一样的了
Intel手册里面有说明

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 怎样动手做java程序
  • 高人们.动手点两下、(java)
  • 想通过自己动手学习Linux网络编程,做一个什么比较好呢?望有经验的高手指点~~
  • 升星散分!!!抢分的快动手!
  • 利用php下载xls文件(自己动手写的)
  • 自己动手做一个迷你 Linux 系统,问题多多(1)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3