实模式保护模式:由实模式切换到保护模式
在做好准备后从实模式切换到保护模式并不难原则上只要把控制寄存器CR0中PE位置1即可本实例采用如下三条指令设置PE位: moveax,cr0 oreax,1 movcr0,eax 实际情况要比这复杂些执行上面三条指令后处理器转入保护模式但CS中内容还是实模式下代码段段值而不是保护模式下代码段选择子所以在取指令之前得把代码段选择子装入CS为此紧接着这三条指令安排条如下所示段间转移指令: JUMP16... [阅读全文]
由保护模式切换到实模式
="xfad" 在80386上从保护模式切换到实模式过程类似于从实模式切换到保护模式原则上只要把控制寄存器CR0中PE位清0即可实际上在此之后也要安排条段间转移指令方面清指令预取队列另方面把实模式下代码段段值送CS这条段间转移指令在保护方式下被预取并在实模式下被执行 ... [阅读全文]
保护模式下的数据传送
="xfad" 首先把源数据段和目标数据段选择子装入DS和ES寄存器这两个描述符已在实模式下设置好把选择子装入段寄存器就意味着把包括基地址在内段信息装入到了段描述符高速缓冲寄存器然后设置指针寄存器SI和DI初值也设置计数器CX初值根据预置段属性在保护方式下代码段也仅是16位段串操作指令只使用1... [阅读全文]
tss任务状态段:任务状态段描述符
任务状态段TSS用于保存任务各种状态信息任务状态段描述符描述某个任务状态段TSS描述符分为286TSS和386TSS两类TSS描述符规定了任务状态段基地址和任务状态段大小等信息例如下面描述符TempTask描述个可用386任务状态段基地址是123456H以字节为单位界限是104描述符特权级是0 TempTaskDESC104,3456H,12H,89H,, 在装载任务状态段寄存器TR时描述符中段基... [阅读全文]
文件描述符:门描述符的一般格式
门描述符般格式如下图所示门描述符只有位于描述符内偏移5类型字节与系统段保持致也由该字节标示门描述符和系统段描述符该字节内P和DPL意义与其它描述符种中意义相同其它字节主要用于存放个48位全指针(16位选择子和32位偏移量) 定义如下门描述符结构类型: GATESTRUC;门结构类型定义 OFFSETLDW0;32位偏移低16位 SELECTORDW0;选择子 DCOUNTDB0;双字计数字段 GT... [阅读全文]
tss任务状态段:任务状态段
任务状态段(TaskStateSegment)是保存个任务重要信息特殊段任务状态段描述符用于描述这样系统段任务状态段寄存器TR可见部分含有当前任务任务状态段描述符选择子TR不可见高速缓冲寄存器部分含有当前任务状态段段基地址和段界限等信息 TSS在任务切换过程中起着重要作用通过它实现任务挂起和恢复所谓任务切换是指挂起当前正在执行任务恢复或启动另任务执行在任务切换过... [阅读全文]
存储器管理:存储器分页管理机制
在保护模式下控制寄存器CR0中最高位PG位控制分页管理机制是否生效如果PG=1分页机制生效把线性地址转换为物理地址如果PG=0分页机制无效线性地址就直接作为物理地址必须注意只有在保护方式下分页机制才可能生效只有在保证使PE位为1前提下才能够使PG位为1否则将引起通用保护故障 分页机制把线性地址空间和物理地址空间分别划分为大小相同块这样块称之为页通过在线性地址空间页与物理地址空间页之间建立映射分页机... [阅读全文]
字符映射表:映射表结构
参考:[http://www.crazycoder.cn/] 线性地址空间页到物理地址空间页之间映射用表来描述由于4G地址空间划分为1M个页因此如果用张表来描述这种映射那么该映射表就要有1M个表项若每个表项占用4个字节那么该映射表就要占用4M字节为避免映射表占用如此巨大存储器资源所以80386把页映射表分为两级 参考:[http://www.crazycoder.cn/] 页映射表第级称为页目录表... [阅读全文]
非线性物理:线性地址到物理地址的转换
分页管理机制通过上述页目录表和页表实现32位线性地址到32位物理地址转换控制寄存器CR3高20位作为页目录表所在物理页页码首先把线性地址最高10位(即位22至位31)作为页目录表索引对应表项所包含页码指定页表;然后再把线性地址中间10位(即位12至位21)作为所指定页目录表中页表项索引对应表项所包含页码指定物理地址空间中页;最后把所指定物理页页码作为高20位把线性地址低12位不加改变地作为32位物... [阅读全文]
虚拟存储器:对虚拟存储器的支持
页表项中P位是支持采用分页机制虚拟存储器关键P=1表示表项指定页存在于物理存储器中并且表项高20位是物理页页码;P=0表示该线性地址空间中页所对应物理地址空中页不在物理存储器中如果访问不存在页会引起页异常这样操作系统可把该不存在页从磁盘上读入把所在物理页页码填入对应表项并把表项中P位置为1然后使引起异常恢复运行 此外表项中访问位A和写标志位D也用于支持有效地实现虚拟存储器 表项位5是访问属性位记作... [阅读全文]
应用程序发生异常:页异常
参考:[http://www.crazycoder.cn/] 启用分页机制后线性地址不再直接等于物理地址线性地址要经过分页机制转换才成为物理地址在转换过程中如果出现下列情况之就会引起页异常: 参考:[http://www.crazycoder.cn/](1)涉及页目录表内表项或页表内表项中P=0即涉及到页不在内存; 参考:[http://www.crazycoder.cn/](2)发现试图违反页保... [阅读全文]
masm5:MASM5命令行
=con_all最近在了解X86汇编语言要用到微软MASM5在使用过程中发现个很不方便地方例如:masm 1.asmMicrosoft (R) Macro Assembler Version 5.00Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.Object filename [1.OBJ]:Source lis... [阅读全文]
编程文件:COM文件的编程
COM文件和EXE文件都是可执行文件最典型COM文件是Command.COMCOM文件主要特点如下: 1、COM文件只有个段其字节数不会超过64K; 2、当操作系统装入COM文件时四个段寄存器(CS、DS、ES和SS)都用PSP段值来化; 3、必须用伪指令ORG100H来说明空出前256个字节 例10.14编写个显示串“Hello”COM类型 解: CSEGSEGMENT’CODE’ ORG100... [阅读全文]
程序段前缀:程序段前缀及其应用
段前缀PSP(ProgramSegmentPrefix)是个具有256个字节信息区是可执行文件(EXE和COM)所特有其内容在操作系统装入该文件运行时存入 10.8.1段前缀字段含义 PSP信息区字段分布如下表10.1所列 表10.1PSP信息区字段分布表 偏移量内容含义偏移量内容含义 00~01H结束指令中断20H2E~31H保留 02~03H分配给该最后段段地址32~33H文件句柄表长度 04... [阅读全文]
程序段前缀:程序段前缀的应用
了解和掌握PSP中信息分布就是为了利用其信息对于EXE文件可用中断21H之功能51H获取其段地址如: MOVAH,51H INT21H;BX=PSP段地址 MOVES,BX CMPptrES:[80H],0;检查PSP长度 JEnext … 对于COM文件其只有个段所以可用更简单方式来检查PSP内容 MOVBX,80H CMPptr[BX],0;检查PSP长度 JEnext … 例10.17利用P... [阅读全文]
协处理器:汇编数值运算协处理器
数值运算协处理器(简称协处理器)是特为与微处理器协同工作而设计它是用于加速处理浮点数据处理部件对同样浮点计算使用该部件进行运算所花执行时间要比用常规指令编写最有效代码所花时间还要少得多在早期计算机系统中该部件是可选部件但现在般都把协处理器直接内置在CPU之中鉴于现在Pentium处理器内部结构特点该处理器能同时执行条协处理器指令和二条整数指令 协处理器主要产品序列有:8087、80287、8038... [阅读全文]
协处理器:汇编数值运算协处理器
数值运算协处理器(简称协处理器)是特为与微处理器协同工作而设计它是用于加速处理浮点数据处理部件对同样浮点计算使用该部件进行运算所花执行时间要比用常规指令编写最有效代码所花时间还要少得多在早期计算机系统中该部件是可选部件但现在般都把协处理器直接内置在CPU之中鉴于现在Pentium处理器内部结构特点该处理器能同时执行条协处理器指令和二条整数指令 协处理器主要产品序列有:8087、80287、8038... [阅读全文]
浮点数转换:浮点数转换成十进制数的步骤
二、浮点数转换成十进制数步骤 该步骤与前面“十进制数转换成浮点数”步骤是互逆其具体步骤如下: 1、分割数字符号、阶码和有效数字; 2、将偏移阶码减去偏移得到真正阶码; 3、把数字写成规格化二进制数形式; 4、把规格化二进制数改变成非规格化二进制数; 5、把非规格化二进制数转换成十进制数 例11.2把协处理器中浮点数1100000111001001000000000000转换成十进制数 解 1、把浮... [阅读全文]
浮点数转换:浮点数转换成十进制数的步骤
二、浮点数转换成十进制数步骤 该步骤与前面“十进制数转换成浮点数”步骤是互逆其具体步骤如下: 1、分割数字符号、阶码和有效数字; 2、将偏移阶码减去偏移得到真正阶码; 3、把数字写成规格化二进制数形式; 4、把规格化二进制数改变成非规格化二进制数; 5、把非规格化二进制数转换成十进制数 例11.2把协处理器中浮点数1100000111001001000000000000转换成十进制数 解 1、把浮... [阅读全文]
协处理器:协处理器的结构
协处理器顾名思义是为与CPU协同工作而设计其主要用来提高进行数学和超越计算速度在80486DX和Pentium处理器中都内置个与80387完全兼容协处理器CPU执行所有常规指令协处理器则执行协处理器指令它们能同时并行地执行各自指令由于现在Pentium处理器内部结构特点该处理器能同时执行条协处理器指令和二条整数指令 11.2.1协处理器内部结构 它可分为二个主要部分:控制部件(CU)和数值执行部件... [阅读全文]
状态寄存器:存取状态寄存器
对于协处理器中状态寄存器内容员可用指令FSTSW把其值送到内存单元中如果当前使用是80287及其以后协处理器那么可用指令“FSTSWAX”把该状态寄存器值传送给通用寄存器AX旦状态寄存器值复制到内存或AX中那么就可对其各位进行分析并可检测出当前协处理器工作状态 对于80287协处理器它还可通过I/O地址00FAH~00FFH来实现其与CPU之间数据交换而80387~Pentium系列芯片则是通过I... [阅读全文]
协处理器:协处理器的结构控制寄存器
控制寄存器主要用于浮点数精度选择控制、四舍五入控制和无穷大控制等其低6位还可用来决定是否屏蔽协处理器异常指令FLDCW可用来设置控制寄存器值控制寄存器中控制位分布如图11.6所示其控制位含义如表11.3所列 1514131211109876543210 ICRCPC PMUMOMZMDMIM 图11.6控制寄存器控制位分布示意图 表11.3控制寄存器中控制位含义 控制位控制功能说明 IC(... [阅读全文]
协处理器:协处理器的指令系统
协处理器共有68条不同指令汇编在遇到协处理器指令助忆时都会将其转换成机器语言ESC指令ESC指令代表了协处理器操作码 在协处理器指令在执行过程中需要访问内存单元时CPU会为其形成内存地址协处理器在协处理器指令期间内利用数据总线来传递数据80287协处理器利用I/O地址00FAH~00FFH来实现其与CPU之间数据交换而80387~Pentium系列芯片则是利用I/O地址800000FAH~800... [阅读全文]
数据传送类指令:数据传送指令
为了满足协处理器和CPU之间进行数据交流需求就需要实现内存单元和协处理器之间进行数据传送指令协处理器指令系统中有三大类数据传送指令:BCD传送指令、浮点数传送和整数传送指令 、BCD传送指令 1、FBLD 指令格式:FBLD MemBCD(*) 指令功能:将内存中BCD数据压入协处理器堆栈中; (*)MemType是指定数据类型Type内存单元如:MemBCD是BCD类型存储单元此后不再说明 2、... [阅读全文]
数学运算:数学运算指令
在协处理器指令系统中有关数学运算指令有:加法指令、减法指令、乘法指令、除法指令和求平方根指令等涉及数学运算指令有比例运算、舍入运算、求绝对值运算和改变数值符号运算等指令 1、加法指令 指令格式:FADD[STReg1,STReg2](*) FADDMemReal FADDPSTReg,ST FIADDMemInt (*)在此指令格式下如果同时指定了二个堆栈寄存器那么其中个寄存器必须是ST其它指令同... [阅读全文]