从16位实模式(x86)切换到32位保护模式

苏拉吉KS

这是将cpu切换为32位模式的标准代码。

    cli   
    lgdt [gdt_descriptor] ; Assume a well-defined GDT

    mov eax, cr0
    or eax, 0x1 
    mov cr0, eax; Is this the exact moment when the processor switches to 32 bit mode?

    jmp CODE_SEG:pipeline_flush ; Here CODE_SEG is 0x08,i.e, the segment descriptor after the NULL descriptor in the GDT 
[bits 32] 
pipeline_flush:

这里的远跳转指令是16位(?)编码的指令....但是处理器处于32位模式....如果我将代码更改为:

[bits 32]
jmp CODE_SEG:pipeline_flush

该代码停止工作...

为什么是这样??

prl

将CR0的位0置1后,处理器处于16位保护模式,因此指令将作为16位指令执行。

BITS 32指令使jmp指令的32位汇编为偏移量部分。处理器将偏移量的高16位视为段。由于它不是有效的代码段,因此引发#GP。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我们知道处理器在启动过程中从 16 位实模式切换到 32 位保护模式,那么它什么时候切换到 64 位模式

来自分类Dev

保护模式下的64位寄存器x86

来自分类Dev

在64位linux上从32位模式切换到64位(长模式)

来自分类Dev

在保护模式下设置中断(x86)

来自分类Dev

引导加载程序后如何从实模式切换到保护模式?

来自分类Dev

为什么切换到保护模式会重新启动计算机?

来自分类Dev

实模式32位寄存器

来自分类Dev

在32位保护模式下启用A20线路时出现问题

来自分类Dev

IRQ和iret指令语义在32位内核上的工作(保护模式)

来自分类Dev

32 位保护模式不适用于多个程序集文件

来自分类Dev

Linux x86:在受保护的内核模式下,实模式地址空间映射到哪里?

来自分类Dev

16位实模式下的堆栈内存布局

来自分类Dev

为什么在切换到保护模式时,MOV CR0和JMP指令必须来自经过身份映射的页面?

来自分类Dev

带有 64 位来宾的 VirtualBox 64 位主机切换到 32 位 VM

来自分类Dev

即使启用了增强保护模式,IE选项卡也无法在64位模式下运行

来自分类Dev

实模式程序和保护模式程序之间的真正区别是什么?

来自分类Dev

实模式程序和保护模式程序之间的真正区别是什么?

来自分类Dev

从用户模式切换到内核模式

来自分类Dev

从用户模式切换到内核模式

来自分类Dev

CLR /从32位进程切换到64位进程后,内存消耗很高

来自分类Dev

从32位免费Windows 10副本切换到64位

来自分类Dev

基于汇编32位(x86)编写C代码

来自分类Dev

在16位实模式下定位独立的代码,进行引导加载/软盘读取

来自分类Dev

X86指令以实模式关闭计算机电源?

来自分类Dev

在x86实模式下调用不会保存返回地址

来自分类Dev

如何在x86实模式非OS程序集中打印字符串

来自分类Dev

x86实模式在RAM小于640K的机器上如何工作?

来自分类Dev

在x86实模式下调用不会保存返回地址

来自分类Dev

在x86实模式下选择堆栈指针地址(对齐)

Related 相关文章

  1. 1

    我们知道处理器在启动过程中从 16 位实模式切换到 32 位保护模式,那么它什么时候切换到 64 位模式

  2. 2

    保护模式下的64位寄存器x86

  3. 3

    在64位linux上从32位模式切换到64位(长模式)

  4. 4

    在保护模式下设置中断(x86)

  5. 5

    引导加载程序后如何从实模式切换到保护模式?

  6. 6

    为什么切换到保护模式会重新启动计算机?

  7. 7

    实模式32位寄存器

  8. 8

    在32位保护模式下启用A20线路时出现问题

  9. 9

    IRQ和iret指令语义在32位内核上的工作(保护模式)

  10. 10

    32 位保护模式不适用于多个程序集文件

  11. 11

    Linux x86:在受保护的内核模式下,实模式地址空间映射到哪里?

  12. 12

    16位实模式下的堆栈内存布局

  13. 13

    为什么在切换到保护模式时,MOV CR0和JMP指令必须来自经过身份映射的页面?

  14. 14

    带有 64 位来宾的 VirtualBox 64 位主机切换到 32 位 VM

  15. 15

    即使启用了增强保护模式,IE选项卡也无法在64位模式下运行

  16. 16

    实模式程序和保护模式程序之间的真正区别是什么?

  17. 17

    实模式程序和保护模式程序之间的真正区别是什么?

  18. 18

    从用户模式切换到内核模式

  19. 19

    从用户模式切换到内核模式

  20. 20

    CLR /从32位进程切换到64位进程后,内存消耗很高

  21. 21

    从32位免费Windows 10副本切换到64位

  22. 22

    基于汇编32位(x86)编写C代码

  23. 23

    在16位实模式下定位独立的代码,进行引导加载/软盘读取

  24. 24

    X86指令以实模式关闭计算机电源?

  25. 25

    在x86实模式下调用不会保存返回地址

  26. 26

    如何在x86实模式非OS程序集中打印字符串

  27. 27

    x86实模式在RAM小于640K的机器上如何工作?

  28. 28

    在x86实模式下调用不会保存返回地址

  29. 29

    在x86实模式下选择堆栈指针地址(对齐)

热门标签

归档