标题:在学80386保护模式,有一堆问题要问大神,百度很难找答案的。
取消只看楼主
Kipling
Rank: 1
来 自:惠州
等 级:新手上路
帖 子:4
专家分:0
注 册:2009-7-17
 问题点数:0 回复次数:0 
在学80386保护模式,有一堆问题要问大神,百度很难找答案的。
最近在学习保护模式,遇到一些问题,希望懂的人不吝赐教

由实模式跳入保护模式及跳出的步骤以下有没有问题?
0.关中断
1.打开20位地址线          /*疑问一:是否无论在保护模式还是实模式只要打开20位地址线就可以寻址超1M内存?  同时,实模式下是否也可使用EAX等?*/
2.修改CR0第0位            /*疑问二:在CR0第0位修改后,是否立即开始采用选择子的方式进行寻址?跳转中采用远跳转的方式而不是继续执行下一条指令
                           *的原因是不是要 清空指令队列?(《80X86汇编语言程序设计教程》by杨季文等一书P378页中进入保护模式JUMP中的目的地址就
                           *是下一条指令)如果是,那么指令队列是什么,IP寄存器指向下一条要执行的指令的地址,还有隐藏的寄存器存储了那条指令
                           *(即IP所指的那条指令)吗?*/
3.跳转到32位代码段
4.开中断
  。。。。
5.加载空描述符至段寄存器
6.关中断
7.修改CR0第0位
8.跳转         ;此处的跳转指令为宏指令 JUMP <SEG REAL>,<OFFSET REAL>  如果标号REAL处的地址在1M以外,那么段地址怎么取值?
               ;即使跳回去了,那还是在访问了FFFF:FFFF以外的地址呀?在关闭20位地址线后会怎样?
9.开中断
10.关20位地址总线
11.重置段寄存器

32位段与16位段的区别到底是什么?是否只在于寻址时偏移使用32位还是16位的区别(即偏移最大是4G还是64K)。那16位段的寻址方式是8086的段地址加偏移,还是利用选择子的段地址加偏移?如果是8086式寻址,那么16位段不就限制在内存最低1M内了吗?

同时,在32位代码段切换到16位代码段代码如下:
JUMP32 CODEL16-SEL,<OFFSET SPM16>   ;此为MSAM宏指令,定义如下:

JUMP32    MACRO     selector,offsetv
    DB    0EAH
    DW     offsetv
    DW     0
    DW     selector
    ENDM

《80X86汇编语言程序设计教程》书中说“该转移指令含48位全指针,其高16位是16位代码段的选择子,低32位是16位代码段的入口偏移。该指令在32位方式下预取,在16位方式下执行”这里32位下预取是什么意思?

ORG伪指令后接的地址是程序转载地址,该地址是指虚拟地址还是物理地址?

NASM汇编的代码,最初运行时,CS,SS等段寄存器的值都默认是0吗?
搜索更多相关主题的帖子: 百度 程序设计 
2014-03-12 21:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-428383-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.154224 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved