首页 文章
  • 1 votes
     answers
     views

    如何知道当前模式是实模式还是大实模式?

    假设我的API是从一个系统调用的,该系统可能只在实模式或大实模式下工作 . 我的API应该显示当前的系统模式 . 然后怎么知道当前模式是实模式还是大实模式? 注意: 在大实模式下, CR0 中的保护模式使能位被禁用,因此检查它没有任何区别 . 即使启用了A20地址线,也不意味着它处于大实模式 .
  • 2 votes
     answers
     views

    我可以运行在dosbox中切换到保护模式的汇编程序吗?

    我们正在研究一个汇编程序,它将386处理器从实模式切换到保护模式,然后再切换回实模式 . 该程序使用TASM编译 . 因为这个程序需要做一些特权操作,并且它需要以实模式启动,所以我们需要从DOS运行它 . 为此,我们被告知带上软盘,以便我们可以在大学的计算机上启动DOS . 我想知道是否可以使用Dosbox . 但是它需要在保护模式和实模式下使用 faithfully emulate a I386...
  • 2 votes
     answers
     views

    我无法将cpu从实模式切换到保护模式

    我按照Nick Blundell的一本书来做这件事 . 我编写了一个MBR程序,它首先在实模式下运行,程序中的一些指令会将cpu切换到保护模式 . 首先,我将GDT设置为: gdt_start: gdt_null: dd 0x0 dd 0x0 gdt_code: dw 0xffff dw 0x0 db 10011010b db 11001111b...
  • 3 votes
     answers
     views

    如何在CR0中设置PE标志启用保护模式?

    我试图了解一台机器如何从开机到运行内核 . 从我收集到的内容来看,在启动期间切换到保护模式以获得对更多可寻址内存的访问是有用的,即使我们最终将切换到更常规的虚拟内存计划,页面目录和页面表并关闭分段 . 似乎要切换到保护模式3必须要做的事情: 设置全局描述符表(gdt)并使用 lgdt 指令加载它 将控制寄存器CR0中的PE标志位设置为使能(即,值为1) 用 ljmp 执行长跳 我想...
  • 2 votes
     answers
     views

    尝试从保护模式返回到Real

    我试图在保护之后回到实模式,并且在更改cr0寄存器后处理器刚刚卡住了 . 我正在使用nasm,并将我的程序编译为二进制.img以在virtualbox下作为bootloader运行 . 可能我错过了跳远回到realMain proc的东西 . [org 0x7C00] ; BIOS boot origin [bits 16] ; 16-bit Real Mode jmp start ;Jump ...
  • 0 votes
     answers
     views

    保护模式内核三重故障

    我在x86程序集中构建一个内核,用Qemu模拟 . 我有一个从cd加载到0x7C00的引导加载程序 . 如果我放置代码: [BITS 16] [ORG 0x7E00] jmp RealModeStart RealModeStart: mov si, Message call PrintString cli xor ax, ax mov ds, ax ...
  • 6 votes
     answers
     views

    在Linux内核中从真实模式转换为保护模式

    我目前正在研究操作系统的低级组织 . 为了实现我想要了解Linux内核是如何加载的 . 我无法理解的是从16位(实模式)到32位(保护模式)的转换 . 它发生在this file . protected_mode_jump 函数对稍后执行的32位代码执行各种辅助计算,然后在 CR0 reguster中启用 PE 位 movl %cr0, %edx orb $X86_CR0_PE, ...
  • 1 votes
     answers
     views

    切换到保护模式后,跳转到32位代码似乎没有生效

    经过与我自己的争论,我终于决定将我的操作系统转移到保护模式 . 但是,我在执行保护模式代码时遇到了一些问题 . OSDev wiki的第一步是启用A20系列,因为快速门,我没有遇到什么麻烦 . 第二部分是加载全局描述符表 . 我按照BrokenThorn娱乐教程使用它作为我的GDT的粗略基础,并将一些长二进制值转换为漂亮和短的十六进制值 . 最后,我将cr0寄存器的最低位设置为1进入保护模式 ....
  • 3 votes
     answers
     views

    为什么在切换到保护模式之前在引导加载程序中测试端口0x64?

    在我的麻省理工学院OS课程(686)中,我发现了一些代码,我试图理解boot / boot.S中的指令 inb $0x64, %al . 我的理解是它从数据端口0x64读取一个字节到AL,什么是端口0x64?它忙于测试哪种设备或机制?我对代码忙的评论感到困惑?评论意味着什么,它指的是什么? # Enable A20: # For fascinating historical reasons ...
  • 0 votes
     answers
     views

    x86处理器中Virtual-8086模式和实地址模式有什么区别

    在维基百科中,虚拟8086模式的解释被称为 在80386微处理器及更高版本中,虚拟8086模式(也称为虚拟实模式,V86模式或VM86)允许执行在处理器运行受保护模式操作系统时无法直接以受保护模式运行的实模式应用程序 我认为这意味着虚拟8086模式可以访问系统内存和硬件设备 . 并解释实地址模式 实模式,也称为实地址模式,是所有x86兼容CPU的操作模式 . 实模式的特点是20位分段存储器地...
  • 10 votes
     answers
     views

    在不同的处理器上运行代码(x86程序集)

    在x86的实模式中,需要使用哪些指令在多处理器系统中的不同处理器上运行代码? (我正在汇编程序中编写一些需要设置某些CPU寄存器的预启动代码,并在实际操作系统启动之前在系统中的每个CPU上执行此操作 . )

热门问题