首页 文章
  • 4 votes
     answers
     views

    如何在NASM程序集中输入32位保护模式?

    我正在学习x86程序集,我正在尝试在NASM中制作玩具操作系统,但我不了解一些东西 . 我做了一个成功启动内核的bootloader: 从包含内核文件的软盘加载14个扇区; 在标有 kernel.feo 的这些部门中搜索文件; 将该文件加载到内存中以偏移 0x2000 ; 使用远跳 jmp 0x2000:0x0000 执行内核 . 所以我的内核代码位于 0x2000:0 内存中...
  • 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

    A20线在保护模式下扮演什么角色?

    我正在经历x86的保护模式部分 . 我刚刚了解了GDT . 之前,我已经研究过进入保护模式(即:使用所有32位地址线)必须启用A20门 . 那么,启用A20的代码必须是16位吗?最近,当我浏览wiki.osdev网站时,我发现启用A20的代码是用x86汇编编写的 . X86汇编产生的32位操作码无法以16位模式加载吗? 请尽可能解释 . 谢谢 .
  • 1 votes
     answers
     views

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

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

    我如何找到GDT的内容

    我正在分析一个反汇编的dll并且卡在了线上 mov ebx,fs:[00000004h] 我想找出用这条指令写入ebx的数据的确切物理地址 . gdb告诉我 fs = 0x53. 我已经发现地址取决于模式(受保护或真实),我很确定CPU处于保护模式(参见*) . 所以段fs的开始应该存储在GDT的某个地方,对吧?我还找到了 GDT-register (0x009bd5c0007f) 的地址,但...
  • 1 votes
     answers
     views

    设置全局描述符表和保护模式后不断重新启动

    我必须做错 GDT setup 并切换到 protected mode 因为它不断重启 . 这是我的 kernel.asm 应该设置 GDT 并切换到 protected mode : bits 16 jmp main %include "gdt.inc" main: cli xor ax,ax mov...

热门问题