• 实模式和保护模式下的段寄存器


    ES CS DS SS FS GS LDTR TR

    32位下段寄存器的组成图:(不考虑64位)

    分为4个部分

    • Selector   16位/可见
    • Attribute  16位/不可见
    • Limit   32位/不可见
    • Base  32位/不可见

    实模式寻址

    8086实模式寻址时:

    mov cx,0x2000
    mov ds,cx
    mov [0xc0],al
    ;以上,将段寄存器ds的值设置为0x2000,
    ;然后向该段内偏移地址为0x00c0的地址写入al的值,
    ;写入时,将ds的值左移4位,再加上0x00c0,即:0x200c0

    32位实模式寻址不一样:

    mov ax,cs
    mov ds,ax
    ;第一句 ax=cs.Selector
    ;第二句 先 ds.Selector=ax
    ;然后 ds.Base=ds.Selector<<4,Base只用到了低20位。

    32位环境下,当用汇编读取某一地址时:

    mov dword ptr ds:[0x123456],eax
    ;真正读写的地址是ds.base+0x123456

     32位保护模式下寻址

    6个段寄存器ES CS DS SS FS GS叫做段选择器,和实模式不同,保护模式的内存访问有自己的方式,

    在保护模式下,尽管访问内存时也需要指定一个段,但传送到段选择器的内容不是逻辑段地址,而是段选择子。

    段选择子由三部分组成:

    • 描述符索引——用来在描述符表中选择一个段描述符。
    • 描述符表指示器——TI=0时,在GDT表中;TI=1时,在LDT表中。
    • 请求特权级别——4个级别,0,1,2,3。

    例:

    mov cx,00000000000_10_000B         ;加载数据段选择子(0x10)
    mov ds,cx
    ;索引号  00000000000_10   2
    ;TI  0  GDT
    ;权限 00 最高权限
  • 相关阅读:
    ubuntu nfs server config
    增加虚拟机ubuntu的硬盘
    MD5算法
    MySQL错误ERROR 1366 (HY000): Incorrect string value..
    SQLPro Studio链接本地MYSQL
    mysql修改root密码
    jdk7 for Mac
    mysql is stop 点击start启动不了,卸载重装
    Mac版Intellij IDEA弹窗报this license XXXXXXXX has been cancelled
    Python 环境搭建
  • 原文地址:https://www.cnblogs.com/a-s-m/p/12759195.html
Copyright © 2020-2023  润新知