![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
x86-从保护模式到实模式
文章平均质量分 78
N1ch0l4s
这个作者很懒,什么都没留下…
展开
-
《实模式到保护模式》chap11 学习笔记(上(大部分))
进入保护模式 在实模式中,用户对于内存单元的访问不受控制。只要将逻辑段地址和偏移地址设置正确,可以访问任何地方的数据。但是在保护模式下。一个用户不能访问其他用户的数据,不能修改操作系统的数据 全局描述符表GDT 在实模式下,任何程序访问,执行都是自由的。但是保护模式下则不然。用来限制这种自由的凭证就是全局描述符表。GDT在进入保护模式之前被定义 程序中用来记录全局描述符表的寄存器是GDTR。该寄存器的组成如下 线性基地址代表了内存中全局描述符表的起始位置。16位边界地址记录了全局描述符表的大小(总字节数)原创 2021-02-15 21:11:57 · 188 阅读 · 0 评论 -
《实模式到保护模式》chap10 学习笔记
chap10 x86处理器编程架构 保护模式and实模式 实模式:使用之前介绍的段寄存器+段偏移量的方式访问内存。也称为8086模式。此时数据大小是8位或16位的。 保护模式: 80286处理器:段寄存器中保存的不再是段地址,而是段选择子。真正的段地址位于段寄存器的描述符的高速缓存中,是24位的。这样一来,段就可以位于16MB(24位)空间中的任何位置。但是段偏移量只有16位 80386处理器:处理器/寄存器变成32位,可以访问4GB的内存.每个段基址是32位的,段内偏移量也是32位的。 所有后续80386原创 2021-02-14 13:00:11 · 109 阅读 · 0 评论 -
《实模式到保护模式》chap9 学习笔记
chap8本章习题答案 retf和ret的区别就在于,ret是相对近转移,retf是远转移。ret只弹出指针寄存器IP而retf还要接着弹出段寄存器CS。知道了原理,就可以改写retf了。 ;源程序 begin: push word [es:code_1_segment] mov ax,continue push ax ;可以直接push continue,80386+原创 2021-02-13 13:35:38 · 120 阅读 · 0 评论 -
《实模式到保护模式》chap8 学习笔记(下)
第八章(下) 加载用户程序 因为程序需要决定要读取的扇区数目,首先需要确定整个程序的大小 program_length dd program_end ;程序总长度[0x00],在8-2中 mov dx,[2] ;加载器部分 mov ax,[0] 接下来用存放在dx,ax寄存器中的内容除以512(存放在bx中)利用循环得到总扇区数目 div bx cmp dx,0 jnz @1 ;未除尽 d原创 2021-02-09 23:19:27 · 137 阅读 · 0 评论 -
《实模式到保护模式》chap8 学习笔记(上)
chap8 硬盘和显卡的访问与控制(上) 用户程序的结构 处理器的工作模式 每次在读取内存的时候,处理器会将内存分为逻辑上的段,指令的获取和数据的访问一律按照短地址:偏移地址的方式进行 一个规范的程序,包括代码段,附加段,数据段和栈段 NASM汇编器使用汇编指令SECTION或者SEGMENT来定义段 SECTION 段名称 等价于 SEGMENT 段名称 一旦定义段,后面的所有内容都属于该段。如果一个程序没有定义段,这些内容默认成为一个段 如果程序不从定义一个段开始,那么这些内容默认成为一个段 INTE原创 2021-02-08 22:21:49 · 162 阅读 · 0 评论 -
《实模式到保护模式》chap5 学习笔记(下)
5.7编译并完成主引导扇区代码 由于之前提到,主引导扇区的规则是结尾为0x55和0xaa,因此将上述程序放到主引导扇区之后,要对最后两字节和代码段之间的空隙进行填充,这里使用了如下指令 times 203 db 0 times指令的含义是重复执行n次后续的指令。比如times n (func)就是执行func一共n次,在这里是执行declear byte命令203次 之后可以加上db 0x55,0xaa也就完成了主扇区代码的合法标志填写 接下来我们编译附件的源文件,得到正确的结果 5.9使用Bochs调试原创 2021-01-21 22:10:04 · 208 阅读 · 4 评论 -
《实模式到保护模式》chap5 学习笔记(上中)
5.5显示标号的汇编地址 今天依然在学校上冬令营,感觉好水…还是得自学! 标号 由于对于任何一个内存段,偏移地址总是从0x0000开始递增。为了支持这种访问模式,每一次编译程序的时候,编译器会将源程序从0x0000开始加载,此时得到的地址称为汇编地址(区别于物理地址)。这样编译后指令的地址加上段偏移之后可以直接得到物理地址。 分析代码清单5.1内容 理解汇编地址和偏移地址的关系 注意编译过程中,栈是向上增长的,第一行汇编代码会位于内存底部位置(p57) 标号 NASM汇编语言中,标号可以理解为函数名,例如:原创 2021-01-20 23:11:56 · 105 阅读 · 0 评论 -
《实模式到保护模式》chap5 学习笔记(上)
chap5 编写主引导扇区代码 什么是主引导扇区? 当处理器加电后,如果硬盘是首选的处理设备,ROM-BIOS会尝试读取硬盘0面0道1扇区,也就是主引导扇区 注意:盘面和磁道都是从0开始,而扇区是从1开始计数的 主引导扇区的特征 主引导扇区有以下特征: 1.大小为512字节 2.一个有效的主引导扇区最后两字节应该是 0X55和0xAA。BIOS将其加载到0x0000:0x7c00然后判断它是否有效 3.主引导扇区的作用是检测计算机的操作系统,并计算出他所在的硬盘位置,然后将操作系统的代码加载到内存,用jmp原创 2021-01-19 23:04:15 · 136 阅读 · 1 评论