- [035][x86汇编语言]第十四章 √√文件的OO的XX特权级
- [013][x86汇编语言]从硬盘主引导扇区启动,显示hello
- [033][x86汇编语言]第十四章 子程序load_reloc
- [034][x86汇编语言]第十四章 内核程序c14_core.
- [036][x86汇编语言]第十四章 本章习题解答
- [049][x86汇编语言]控制转移到其他任务 jmp/call
- [060][x86汇编语言]第16章内核程序执行逻辑:load_
- [061][x86汇编语言]第16章 源码分析 过程[alloc
- [038][x86汇编语言]第十五章 中断描述符表 任务门描述符
- [050][x86汇编语言]16.1.1 简单分页模型: 计算从
学习笔记
《x86汇编语言:从实模式到保护模式》
https://www.jianshu.com/p/d481cb547e9f
32位保护模式用的是段选择子
- 在[024][x86汇编语言]第十三章 学习加载程序C13_mbr.asm
的加载程序进入32位保护模式后,想要用ds寄存器指向0~4GB内存空间的的做法是:
[bits 32]
flush:
mov eax,0x0008 ;加载(0...4GB)选择子
mov ds,eax

- 在[026][x86汇编语言]第十三章 学习内核程序 c13_core.asm的内核程序中,想要用ds寄存器指向0~4GB内存空间的做法是:
mem_0_4_gb_seg_sel equ 0x08 ;整个0-4GB内存的段的选择子
mov eax,mem_0_4_gb_seg_sel ;切换DS到0-4GB的段
mov ds,eax

-
索引号0x08
指向的GDT描述符
是一个指向0~4GB全部内存空间的数据段,这个数据段的段基址是0x0000 0000
,因此,我认为使用常量mem_0_4_gb_seg_sel
的写法要比直接写上0x08
好得好得多! -
这是至关重要的一个概念,那就是在明确提示自己,现在已经进入保护模式了,不要再写
段地址:偏移地址
了,而是要写选择子:偏移地址
; -
极有可能编程的时候,保护模式也写着写着就写了
ds =0x0000 0000
,然后debug的时候还死活找不到错误在哪里,即便在调试的时候看到了ds是这个值,也会糊里糊涂的觉得,是啊,我就是要0x0000 0000,殊不知,现在要写的是选择子,仅仅是声明并使用一个常量就可以十分清楚地提醒自己了; -
概念懂了,但是实际操作的时候,脑子未必有学习概念的时候那么清晰,不是自己变笨了,而是这个东西就是容易弄错的,所能做的就是采取另外的保障,比如写一个常量提醒自己。
网友评论