32位汇编学习札记(一)
32位汇编第一章总结(6.20-6.21)
1 简史
简史主要是介绍了windows和intel的发展历史和windows与intel之间相辅相成的发展过程。
2 80x86的工作模式
2.1 80x86下的工作模式有哪些,有何异同?
包括实模式、保护模式、虚拟86模式 1.实模式与8086处理器的异同:
相同: a.相同的寻址方式 b.相同的中断方式 实模式相对8086处理器的改进: a.多了FS,GS两个段寄存器 b.可使用32位寄存器 c.新增一些指令,加速操作 2.实模式与保护模式的异同
保护模式相对实模式的改进: a.更大的(4G)寻址空间 b.支持内存分页机制 c.支持优先级 3.虚拟86模式是实模式与保护模式的混合,存在的意义是为了兼容8086的程序。 a.使用与8086相同的寻址方式(20位) b.支持多任务和分页机制
2.2 80x86下的工作模式之间是如何切换的?
1.实模式和虚拟86模式之间无法进行切换。
2.当计算机启动后,首先进入实模式,然后从实模式中切换到保护模式,在保护模式中可以启动一个虚拟86模式的进程。
3 windows的内存管理
3.1 windows下各个工作模式的寻址方式?
1.实模式和虚拟86模式的寻址模式与8086处理器的寻址方式相同,使用20位寻址最多可以寻址1M。使用xxxx:yyyy的方式表示物理地址,xxxx存于段寄存器中,为基地址,yyyy为索引值或者偏移量。 物理地址的转换方式为 xxxx*10h+yyyy。 2.保护模式下有32位的寻址空间,可以寻址4G,使用xxxx:yyyyyyyy的方式表示线性地址,xxxx存放于16位的段寄存器中,用于查找基地址,yyyyyyyy为索引值或者偏移量 保护模式下的线性地址转换要复杂一些大致分为两步: a.从段段寄存器xxxx中获取段描述符 从段寄存器中获取xxxx,段寄存器的0,1位存放的是当前段的优先级,第3位存放的是从哪里获取基地址,0表示从GDTR中获取,1表示从LDTR中获取。 当从GDTR中获取时,从GDTR中直接可以获取到GDT的基址,在根据段寄存器余下的13位作为索引值可以得到该段的段描述符。 当从LDTR中获取时,先从GDTR中获取到GDTR的基址,再从LDTR中获取到LDT的索引值,从而得到LDT的基址,再根据段寄存器余下的13位作为索引值可以得到该段的段描述。 b.根据段描述符中的段基址和索引值yyyyyyyy获取到线性地址
3.2 windoes下的分页机制是如何使用的?
80386处理器是32位处理器,寻址空间是4G,同时是多任务的,每个任务都有独立的4G的连续的线性寻址空间。
windows将内存以4k大小为一页将物理内存划分成n个页块,同样windows会对每个任务的各个段也以4k大小划分成n个块,任务的页块与物理地址的页块之间有一个映射关系,这个映射是通过查找页目录和页表实现的。相当于每个任务都会有一个页表,页表中记录了线性地址与物理地址之间的关系,通过寻址找到线性地址后查找页表即可找到物理地址。
将每个任务通过页表的方式隔离,即为windows的分页机制。
4 windows的保护机制
4.1 win32系统为什么找不到中断指令?
win32系统是多任务系统,如果任一任务都可以操作中断程序,很容易引起系统的崩溃,所以win32系统提供了优先级和保护机制来避免任务越权执行有危险的操作。而在8086中的中断指令由win32系统实现,并通过动态链接库的形式由每个任务调用。
4.2 中断、异常、自陷有什么区别?
1.中断指的是程序被动停下来响应高优先级的代码再返回执行的过程。 2.异常指的是程序遇到了不可忽略的错误时,处理器用与遇到中断同样的处理方法处理异常。 3.自陷指的是程序主动停下来响应高优先级的代码再返回执行的过程。
4.3 8086下或80386实模式下是如何处理中断和异常的?
8086通过int n的方式调用中断,中断向量表存在0:0000h到0:0400h之间,每个中断包含4个字节,指向中断程序的地址。
当引发int n中断的时候,从4*n处取到中断程序的地址,程序跳转到中断程序处执行,执行完后通过ret返回到原程序中断位置继续执行
4.4 80386处理中断的流程?
80386保护模式下引发中断n后,从IDTR中获取中断描述符表基址,通过索引值n*8取出中断n的中断描述符,从中断描述符中获取中断程序的地址xxxx:yyyyyyyy,经过线性转换后得到物理地址然后执行中断程序。还行完成后返回到原程序继续执行。
4.5 windows是怎样做的保护异常?
要搞懂这块需要做下课外工作,未完待续
第一章术语总结:
GDT,LDT GDTR:48位,全局段描述符寄存器,可获取全局段描述符表的地址 LDTR:16位,局部段描述符寄存器,可获取局部段描述符表在GDTR中的偏移量 TRx CRx RPL IDT:中断描述符表 IDTR:48位,中断描述符寄存器,前32位为IDT在内存中的基址,后16位标识IDT的长度 DPL: RPL: cli sti eflags IOPL Alaph计算机 TSR程序:(Terminate-and-stay-resident)终止驻留程序,执行后进入内存,但什么都不做,在后台运行,通过热键的方式激活后,程序调出,运行后返回到其他程序。 大多是dos下的比如:bios、显卡驱动、鼠标驱动、输入法、高端内存分配等。