全局描述符实验文档格式.docx

上传人:b****4 文档编号:7680399 上传时间:2023-05-08 格式:DOCX 页数:20 大小:88.07KB
下载 相关 举报
全局描述符实验文档格式.docx_第1页
第1页 / 共20页
全局描述符实验文档格式.docx_第2页
第2页 / 共20页
全局描述符实验文档格式.docx_第3页
第3页 / 共20页
全局描述符实验文档格式.docx_第4页
第4页 / 共20页
全局描述符实验文档格式.docx_第5页
第5页 / 共20页
全局描述符实验文档格式.docx_第6页
第6页 / 共20页
全局描述符实验文档格式.docx_第7页
第7页 / 共20页
全局描述符实验文档格式.docx_第8页
第8页 / 共20页
全局描述符实验文档格式.docx_第9页
第9页 / 共20页
全局描述符实验文档格式.docx_第10页
第10页 / 共20页
全局描述符实验文档格式.docx_第11页
第11页 / 共20页
全局描述符实验文档格式.docx_第12页
第12页 / 共20页
全局描述符实验文档格式.docx_第13页
第13页 / 共20页
全局描述符实验文档格式.docx_第14页
第14页 / 共20页
全局描述符实验文档格式.docx_第15页
第15页 / 共20页
全局描述符实验文档格式.docx_第16页
第16页 / 共20页
全局描述符实验文档格式.docx_第17页
第17页 / 共20页
全局描述符实验文档格式.docx_第18页
第18页 / 共20页
全局描述符实验文档格式.docx_第19页
第19页 / 共20页
全局描述符实验文档格式.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

全局描述符实验文档格式.docx

《全局描述符实验文档格式.docx》由会员分享,可在线阅读,更多相关《全局描述符实验文档格式.docx(20页珍藏版)》请在冰点文库上搜索。

全局描述符实验文档格式.docx

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]

MOVAL,[ESI-5]

MOVAL,[ESI-6]

测试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:

3PR

0004:

FFFF000000F3CF00:

3PRW

0005:

AB200020048B0080:

TSS3280042000000020ABDPL:

0PB

0006:

010000F0DF93C0FF:

Data32FFDFF00000001FFFDPL:

分析数据:

段描述符表结构图:

段基址

31:

24

G

D/B

AVL

段限

19:

16

P

DPL

S

段类型

23:

由于描述符表的数据比较多,因此挑选3个有代表性的全局描述符进行详细的分析分析如下:

(1)0001:

FFFF0000009BCF00:

Code3200000000FFFFFFFFDPL:

0001是编号,00000000是段基址,FFFFFFFF是段限,0是特权值DPL,P是存在位,R是其他属性。

FFFF0000009BCF00

段限段基址段属性

把9BC化成二进制为:

1

由于S=1,所以该段是代码段或数据段,因为段类型中D11位为1,故该段为代码段。

(2)0005:

AB20702D8B8B00F7:

TSS32F78B2D70000020ABDPL:

这行输出中0005是编号,F78B2D70是段基址,000020AB是段限,0是特权值DPL,P是存在位,B是其他属性。

AB20702D8B8B00F7

把8B0化成二进制为:

由于S=0,所以该段是系统段。

(3)0002:

FFFF00000093CF00:

Data3200000000FFFFFFFFDPL:

这行输出中0002是编号,00000000是段基址,FFFFFFFF是段限,0是特权值DPL,P是存在位,RW是其他属性。

FFFF00000093CFCF

把93C化成二进制为:

由于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:

全局描述符表在系统中的地址(逻辑地址)

EDI:

存放读取的全局描述符表首地址

MOVAL,01H

读取数据

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

'

PUSHECX

MOVECX,8

START3:

显示编号计数器COUNT1的编号;

START4:

LODSB;

用于目的地址的内容读到源地址,SI->

AL

CALLDisplayByte;

显示ESI开始的8个字节

LOOPSTART4

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;

等于零是数据段或堆栈段

显示ESI开始的全局描述符的前8个字节的内容,以及相应的CODE、DATA、TSS;

START5:

CALLCopyStr;

LEASI,s32

LEASI,s16

START5和START6:

显示段基地址以及32位限长,而这其中的后32位限长应当包含了其对应的权限和属性;

START7:

LEASI,sTSS32;

系统段

START6:

CALLCopyStr

POPESI

MOVAL,[ESI-1];

TESTDH,80H;

显示结束地址

JZSTART8

MOVAL,DH

ANDAL,0FH

CALLToASCII调用ToASCII函数,将其变成ASCII码

MOVAX,[ESI-8]

输出DH前四位的段限,再输出低字节开始的两个字节

CALLDisplayWord

F'

STOSB作用:

表示范围4kb-4GB

JMPSTART9

START8:

G=0时最大段长1MB,占20位

表示范围1b-1Mb

CALLToASCII

START9:

LEASI,sDPL;

显示DPL

MOVAL,60H

TESTDL,80H

测试DPL,输出DPL的特权级

JZSTART10

P'

测试段是否存在,DL第八位为0,则显示NP,否则显示P

JMPSTART11

START9:

显示每一个全局描述符对应的特权集DPL;

START10:

MOVAL,'

N'

在字符串中添加np

START10:

显示存在位P;

START11:

TESTDL,10H

JZSTART16

TESTDL,08H

JZSTART14

;

TESTDL,04H

JZSTART12

C'

START12:

TESTDL,02H

JZSTART13

R'

JMPSTART13

数据段或堆栈段

START14:

TESTDL,04H

JZSTART15

E'

START15:

TESTDL,02H

W'

START16:

MOVAL,0FH

START11~START16:

显示对应的其它属性;

START13:

MOVAL,0DH;

输出字符串

MOVAL,0AH

$'

LEADX,buffer

MOVAH,09H

输出字符串,$结尾

POPECX

JMPSTART2

ToASCIIPROCNEAR

ORAL,30H

CMPAL,3AH;

AL<

3A,CF=1

JBToASCII1;

cf=1跳转

数值转换为字符,0~9加上30H直接输出,大于10加上07H再输出

ToASCII1:

RET

ToASCIIENDP

TOASCII:

将相应的16进制转换为ASCII码;

isplayBytePROCNEAR

PUSHAX

ANDAL,0F0H

RORAL,4

STOSB;

将AX或AL存ES:

DI,已经是ASCII

POPAX

RET

DisplayByteENDP

DisplayWordPROCNEAR;

显示一个字

XCHGAL,AH

DisplayWordENDP

CopyStrPROCNEAR

LODSB;

取串指令

XORAH,AH

MOVCX,AX

REPMOVSB;

DS:

SI->

ES:

DI

CopyStrENDP

IfExitPROCNEAR

PUSHDX

MOVAH,06H;

MOVDL,0FFH

字符输出

POPDX

IfExitENDP

IfExit:

判断是否退出用于中断保护现场和退出现场;

Exit:

MOVAH,4CH;

跌返回码的结束程序

INT21H

ENDSTART

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2