首页
社区
课程
招聘
[讨论]保护模式下的代码段切换疑惑
发表于: 2010-10-21 10:26 4484

[讨论]保护模式下的代码段切换疑惑

2010-10-21 10:26
4484
在学习保护模式的路上,又遇到了几个疑惑,忘各位前辈指教:)

首先是关于16位段和32位段,之间的区别到底有哪些?就我所知道的,16位段上限为0xffff,而32位段是0xffffffff,默认情况下,16位段的地址偏移为16位,立即数默认为16位或8位,而32位段的地址偏移为32位,立即数默认为32位和8位。只有这些区别吗?

在看保护模式和实模式切换的代码时,我遇到了几个问题:

1。从实模式切换到32位保护模式代码段时:使用了JUMP16,一个16位段值/段选择子+16位偏移的跳转指令,我的疑惑是此时CPU已经处于保护模式下,那么跳转指令中的偏移大小应该根据目标段描述符中的属性来确实,此时目标段是32位,描述符中也定义为32位,那么跳转指令应该期望的是48位的全指针,此处的JUMP16为什么能成功?

2。保护模式下,从32位段切换到16位段时,用了JUMP32,是48位的全指针,也是同样的疑惑,目标段是16位,段描述符中定义的也是16位的段,那么跳转指令应该期待一个16位的偏移,但此处却给了32位的偏移,为什么这里又能成功呢?

对保护模式下的代码段切换很迷惑,是不是在保护模式下,跳转只能用48位全指针的方式,不管是你跳到16位段还是32位段。而在实模式下,只能用32位全指针,不管你要跳到保护模式下的32位段还是16位段??

谢谢各位前辈!!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 179
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
接上面的,MASM有一个段属性 USE16 和 USE32,用来定义段是16位段还是32位段,而段描述符中也有用于描述16/32的位,这两个应该保持一致吗?有什么交叉的影响啊?
2010-10-21 10:52
0
雪    币: 179
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
没人回答吗?自己顶一个。

我这里又有一个新的疑惑,关于指令前缀66h和67h,能用在Jmp指令上吗?
实模式下,使用段间jmp,偏移必须为16位,但如果我在保护模式下的一个32位段里使用jmp,那么默认为48位全指针,我可以使用66h或67h让它成为32位全指针吗?(偏移为16位)。反之呢?

谢谢!
2010-10-22 14:00
0
游客
登录 | 注册 方可回帖
返回
//