全局描述符实验.docx
- 文档编号:11187484
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:20
- 大小:88.07KB
全局描述符实验.docx
《全局描述符实验.docx》由会员分享,可在线阅读,更多相关《全局描述符实验.docx(20页珍藏版)》请在冰豆网上搜索。
全局描述符实验
计算机科学与技术系
实验报告
专业名称计算机科学与技术
课程名称微机原理与接口技术
项目名称全局描述符实验
班级
学号
姓名
同组人员无
实验日期2016/11/3
一、实验目的与要求:
(简述本次实验要求达到的目的,涉及到的相关知识点,实验的具体要求。
)
1.熟悉GDTR寄存器,全局描述符表
2.通过本节实验和下边几个实验,熟悉、理解在保护模式下的内存管理,CPU如何访问内存。
二、实验内容
(根据本次实验项目的具体任务和要求,完成相关内容,可包括:
实验目的、算法原理、实验仪器、设备选型及连线图、算法描述或流程图、源代码、实验运行步骤、关键技术分析、测试数据与实验结果、其他)
实验基本原理:
1.逻辑原理图分析:
分段管理:
逻辑地址->线性地址
在保护模式下,段寄存器中值为段选择符,通过段选择符中索引描述符表中的段描述符,从8个字节的描述符中找到段基址(32位),最后将段基址与32位的偏移地址想加得到线性地址。
分页管理:
线性地址->物理地址
第31位到22位作为页目录索引从4kb的页目录表中选取也一个页目录描述符,从12到21位作为页表中选取一个页描述符作为页内偏移地址与页描述符提供的页基址相加产生存储器单元的32位物理地址。
2.程序流程图
Y
N
N
Y
N
Y
3.实验步骤:
(1)运行TDDEBUG,按预习报告准备的程序编入。
(2)对实验源程序进行编译与连接。
(3)装载实验程序,装载成功显示Loadok。
(4)用到的命令:
F9:
程序连续执行
F7:
程序单步执行
GDT:
查询系统的全局描述符表的内容
D;查看存储器中的内容(例如:
“D0010;00”:
从“0010”个段描述符中偏移地址“00”开始查看存储器中的内容。
)
三、实验分析与小结:
(实验过程中的问题分析、产生的原因以及解决方法;实验结果分析;有待优化思路)
1.程序分析:
ESI指向的是GDT全局描述符,将GDT每8位为一组读入到EAX中,故最终ESI指向的是全局描述符表的最高位。
START4:
LODSB
START1:
MOVEAX,[ESI]
OREAX,[ESI]
JNZSTART3
ADDESI,8
START2:
INCCOUNT1
LOOPSTART1
将全局描述符的13~16位存入DH中,15~8位存入DL中以方便后面对全局描述符中的各属性进行测试判断。
MOVDL,[ESI-3]
MOVDH,[ESI-2]
先测试S位判断是否为系统段,若不为系统段则测试段类型的第一位,判断是否为数据段,若不为数据段,则为代码段
TESTDL,10H
JZSTART7
LEASI,SCODE
TESTDL,08H
JNZSTART5
LEASI,SDATA
START5:
CALLCOPYSTR
LEASI,S32
TESTDH,40H
JNZSTART6
LEASI,S16
JMPSTART6
输出段基址
MOVAL,[ESI-1];显示段基地址
CALLDisplayByte
MOVAL,[ESI-4]
CALLDisplayByte
MOVAL,[ESI-5]
CALLDisplayByte
MOVAL,[ESI-6]
CALLDisplayByte
测试DPL,,再加上30H,输出DPL的特权级
TESTDL,40H
MOVAL,60H
ANDAL,DL
RORAL,5
ORAL,'0'
数值转换为字符,在0-9之间加上30H直接输出,大于10的加上07H再输出
ORAL,30H
CMPAL,3AH
JBToASCII1
ADDAL,07H
2.数据结果及分析
结果数据:
0001:
FFFF0000009BCF00:
Code3200000000FFFFFFFFDPL:
0PR
0002:
FFFF00000093CF00:
Data3200000000FFFFFFFFDPL:
0PRW
0003:
FFFF000000FBCF00:
Code3200000000FFFFFFFFDPL:
3PR
0004:
FFFF000000F3CF00:
Data3200000000FFFFFFFFDPL:
3PRW
0005:
AB200020048B0080:
TSS3280042000000020ABDPL:
0PB
0006:
010000F0DF93C0FF:
Data32FFDFF00000001FFFDPL:
0PRW
分析数据:
段描述符表结构图:
段基址
31:
24
G
D/B
0
AVL
段限
19:
16
P
DPL
S
段类型
段基址
23:
16
由于描述符表的数据比较多,因此挑选3个有代表性的全局描述符进行详细的分析分析如下:
(1)0001:
FFFF0000009BCF00:
Code3200000000FFFFFFFFDPL:
0PR
0001是编号,00000000是段基址,FFFFFFFF是段限,0是特权值DPL,P是存在位,R是其他属性。
FFFF0000009BCF00
段限段基址段属性
把9BC化成二进制为:
1
0
0
1
1
0
1
1
1
1
0
0
P
DPL
S
段类型
G
D/B
AVL
由于S=1,所以该段是代码段或数据段,因为段类型中D11位为1,故该段为代码段。
(2)0005:
AB20702D8B8B00F7:
TSS32F78B2D70000020ABDPL:
0PB
这行输出中0005是编号,F78B2D70是段基址,000020AB是段限,0是特权值DPL,P是存在位,B是其他属性。
AB20702D8B8B00F7
段限段基址段属性
把8B0化成二进制为:
1
0
0
0
1
0
1
1
0
0
0
0
P
DPL
S
段类型
G
D/B
AVL
由于S=0,所以该段是系统段。
(3)0002:
FFFF00000093CF00:
Data3200000000FFFFFFFFDPL:
0PRW
这行输出中0002是编号,00000000是段基址,FFFFFFFF是段限,0是特权值DPL,P是存在位,RW是其他属性。
FFFF00000093CFCF
段限段基址段属性
把93C化成二进制为:
1
0
0
1
0
0
1
1
1
1
0
0
P
DPL
S
段类型
G
D/B
AVL
由于S=1,所以该段是代码段或数据段,因为段类型中D11位为0,故该段为数据段。
3.小结
在实验中一开始装载有错误是因为程序的路径不允许中文,把程序换一个路径即可。
通过本次实验我进一步了解了,我了解了全局描述符的作用和全局描述符是怎么存储每个元素的的地址,以及怎么用汇编去编写一个全局描述符。
通过课前预习了解了全局描述符表中各个段描述符的每一个字节代表什么含义。
知道了全局描述符表用于存放系统程序的段描述符、全局描述符和局部描述符表的段描述符以及段选择符的。
高13位存放段描述符在描述符表中的索引项,也就是偏移量。
根据段描述符计算机可以分辨段的基址、长度、段类型以及当前特权级等段的信息。
熟悉了编译环境,DOS中断,了解了汇编程序如何编译执行。
根据软件输出的信息分析数据。
并了解了指令的使用方法,以及编制汇编程序的基本格式和方法。
四、其它
得分(百分制)
附:
实验代码
MODELTINY;说明存储模式
.386;处理器选择伪操作
.STACK100
.DATA;定义数据段
GDTDB1000HDUP(0);存放读取的全局描述符表DBGDT[4096]={0}
bPAEDB0;操作系统是WinxpSP2或更新
COUNTDW0
COUNT1DW0;编号计数器
bufferDB80DUP(0);存放ASCII的内存区域
sCodeDB4,'Code'
sDataDB4,'Data'
sTSS32DB6,'TSS32'
s32DB2,'32'
s16DB2,'16'
sDPLDB4,'DPL:
';特权级
.CODE;定义代码段
START:
MOVAH,00H;
MOVAL,03H;
INT10H;设置显示模式文字80*2516
LEAEDI,GDT;EDI(目标索引寄存器),ESI(源索引寄存器),DS:
ESI指向源串,ES:
EDI指向目标串
MOVAH,0FEH
MOVAL,00H
INT21H;读GDTRSGDT[EDI]
LEAEBX,GDT;EBX(基地址寄存器,在内存寻址时存放基地址)
MOVCX,[EBX];取GDTR低16位送到CX,CX(16b)
INCCX;CX:
全局描述符表长度
MOVCOUNT,CX
MOVEBX,[EBX+2];EBX:
全局描述符表在系统中的地址(逻辑地址)
LEAEDI,GDT;EDI:
存放读取的全局描述符表首地址
MOVAH,0FEH
MOVAL,01H
INT21H;读取数据
MOVCX,COUNT
SHRCX,3;计数器/8
LEAESI,GDT
START1:
MOVEAX,[ESI];判断开始的8个字节是不是为0
OREAX,[ESI+4]
JNZSTART3;不相等跳转到START3
ADDESI,8;相等ESI加8,指向下一个描述符表
//START:
清屏,将GDTR全局描述符表读取到GDT中,使用EDI作为指针指向全区描述符表带有首地址,用CX来存储全局描述符表带长度,由于是按字节读取,因此将CX=CX/8来表示描述符表带长度。
同时将编号计数器初始化为0;
START2:
pushax
movah,02h
int21h
popax
INCCOUNT1;COUNT1加一,cx减一,跳转到START1
LOOPSTART1
START1和START2:
判断每次读出的全局描述符表的前8个字节是否为全0,若是则说明该编号内容不存在,由于全局描述符为64位,因此ESI向后移8个字节读下一个编号内容;否则执行需要显示的相关全局描述符内容,相应的每检查一个,编号计数器COUNT+1,若COUNT-1=0,说明所有的群居描述符表中的全部内容索引一遍;
START17:
CALLIfExit
JZSTART17
JMPEXIT
START17:
当所有全局描述符表检查完毕后,判断是否退出,当有按键按下时则调用其退出,若没有则一直等待按键发生;
调用函数的解释
START3:
LEAEDI,BUFFER;存放ASCII的内存
MOVAX,COUNT1
CALLDisplayWord;显示编号计数器
MOVAL,':
'
STOSB
MOVAL,''
STOSB
PUSHECX
MOVECX,8
START3:
显示编号计数器COUNT1的编号;
START4:
LODSB;用于目的地址的内容读到源地址,SI->AL
CALLDisplayByte;显示ESI开始的8个字节
MOVAL,''
STOSB
LOOPSTART4
MOVAL,':
'
STOSB
MOVAL,''
STOSB
PUSHESI
MOVDL,[ESI-3]
MOVDH,[ESI-2]
TESTDL,10H;D12,s,0系统,1代码或数据
JZSTART7;ZF等于0跳转
作用:
判断DL中第五位是否为0,若是则进入系统段
LEASI,sCode;代码段
TESTDL,08H;s=1,
JNZSTART5;不等于0是代码段描述符
作用:
判断DL中第四位是否为0,若是则进入数据段,否则进入代码段
LEASI,sData;等于零是数据段或堆栈段
START4:
显示ESI开始的全局描述符的前8个字节的内容,以及相应的CODE、DATA、TSS;
START5:
CALLCopyStr;
LEASI,s32
TESTDH,40H
JNZSTART6
LEASI,s16
JMPSTART6
START5和START6:
显示段基地址以及32位限长,而这其中的后32位限长应当包含了其对应的权限和属性;
START7:
LEASI,sTSS32;系统段
START6:
CALLCopyStr
MOVAL,''
STOSB
POPESI
MOVAL,[ESI-1];显示段基地址
CALLDisplayByte
MOVAL,[ESI-4]
CALLDisplayByte
MOVAL,[ESI-5]
CALLDisplayByte
作用:
输出段基址
MOVAL,[ESI-6]
CALLDisplayByte
MOVAL,''
STOSB
TESTDH,80H;显示结束地址
JZSTART8
MOVAL,DH
ANDAL,0FH
CALLToASCII调用ToASCII函数,将其变成ASCII码
STOSB
MOVAX,[ESI-8]
作用:
输出DH前四位的段限,再输出低字节开始的两个字节
CALLDisplayWord
MOVAL,'F'
STOSB作用:
表示范围4kb-4GB
STOSB
STOSB
JMPSTART9
START8:
MOVAL,'0';G=0时最大段长1MB,占20位
STOSB
STOSB
STOSB作用:
表示范围1b-1Mb
MOVAL,DH
ANDAL,0FH
CALLToASCII
STOSB
MOVAX,[ESI-8]
CALLDisplayWord
START9:
MOVAL,''
STOSB
PUSHESI
LEASI,sDPL;显示DPL
CALLCopyStr
POPESI
MOVAL,60H
ANDAL,DL
RORAL,5
ORAL,'0'
STOSB
MOVAL,''
STOSB
TESTDL,80H
作用:
测试DPL,输出DPL的特权级
JZSTART10
MOVAL,'P'
STOSB
MOVAL,''
STOSB
作用:
测试段是否存在,DL第八位为0,则显示NP,否则显示P
JMPSTART11
START9:
显示每一个全局描述符对应的特权集DPL;
START10:
MOVAL,'N';在字符串中添加np
STOSB
MOVAL,'P'
STOSB
START10:
显示存在位P;
START11:
MOVAL,''
STOSB
TESTDL,10H
JZSTART16
TESTDL,08H
JZSTART14
;代码段
TESTDL,04H
JZSTART12
MOVAL,'C'
STOSB
START12:
TESTDL,02H
JZSTART13
MOVAL,'R'
STOSB
JMPSTART13
;数据段或堆栈段
START14:
TESTDL,04H
JZSTART15
MOVAL,'E'
STOSB
START15:
MOVAL,'R'
STOSB
TESTDL,02H
JZSTART13
MOVAL,'W'
STOSB
JMPSTART13
START16:
;系统段
MOVAL,''
STOSB
MOVAL,0FH
ANDAL,DL
CALLToASCII
STOSB
START11~START16:
显示对应的其它属性;
START13:
MOVAL,0DH;输出字符串
STOSB
MOVAL,0AH
STOSB
MOVAL,'$'
STOSB
LEADX,buffer
MOVAH,09H
INT21H;输出字符串,$结尾
POPECX
JMPSTART2
ToASCIIPROCNEAR
ORAL,30H
CMPAL,3AH;AL<3A,CF=1
JBToASCII1;cf=1跳转
ADDAL,07H
作用:
数值转换为字符,0~9加上30H直接输出,大于10加上07H再输出
ToASCII1:
RET
ToASCIIENDP
TOASCII:
将相应的16进制转换为ASCII码;
isplayBytePROCNEAR
PUSHAX
ANDAL,0F0H
RORAL,4
CALLToASCII
STOSB;将AX或AL存ES:
DI,已经是ASCII
POPAX
ANDAL,0FH
CALLToASCII
STOSB
RET
DisplayByteENDP
DisplayWordPROCNEAR;显示一个字
XCHGAL,AH
CALLDisplayByte
XCHGAL,AH
CALLDisplayByte
RET
DisplayWordENDP
CopyStrPROCNEAR
LODSB;取串指令
XORAH,AH
MOVCX,AX
REPMOVSB;DS:
SI->ES:
DI
RET
CopyStrENDP
IfExitPROCNEAR
PUSHAX
PUSHDX
MOVAH,06H;
MOVDL,0FFH
INT21H;字符输出
POPDX
POPAX
RET
IfExitENDP
IfExit:
判断是否退出用于中断保护现场和退出现场;
Exit:
MOVAH,4CH;跌返回码的结束程序
INT21H
ENDSTART
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全局 描述 实验