华中科技大学汇编语言程序设计实验报告(六)中断与反跟踪_第1页
华中科技大学汇编语言程序设计实验报告(六)中断与反跟踪_第2页
华中科技大学汇编语言程序设计实验报告(六)中断与反跟踪_第3页
华中科技大学汇编语言程序设计实验报告(六)中断与反跟踪_第4页
华中科技大学汇编语言程序设计实验报告(六)中断与反跟踪_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程实 验报告课程名称:汇编语言程序设计实验实验名称:实验四 中断与反跟踪实验时间:2017-4-19, 14: 30-17: 30实验地点: 南一楼804室45号实验台指导教师:李专专业班级:计算机科学与技术201502班学 号:u201414596姓 名: 卢振兴同组学生: 报告日期: 2017年4月19日原创性声明本人郑重声明:本报告的内容由本人独立完成,有关观点、方法、数据和文献等的 引用已经在文中指出。除文中己经注明引用的内容外,本报告不包含任何其他个人或集体己 经公开发表的作品或成果,不存在剽窃、抄袭行为。特此声明!学生签名:卢振兴口期:2017.4. 19成绩评定实验完成质量得分

2、(70 分)(实验步骤清晰详细深 入,实验记录真实完整等)报告撰写质量得分(30 分)(报告规范、完整、通 顺、详实等)总成绩(100分)指导教师签字:1实验目的与要求(1)掌握中断矢量表的概念;(2)熟悉i/o访问,bios功能调用方法;(3)掌握实方式下中断处理程序的编制与调试方法;(4)熟悉跟踪与反跟踪的技术;(5)提升对计算机系统的理解与分析能力。2. 实验内容任务1:用三种方式获取中断类型码16h对应的中断处理程序的入口地址。要求:首先要进入虚拟机状态,然后(1)直接运行调试工具(td.exe),观察中断矢量表中的信息。(2)编写程序,用16h功能调用方式获取(16h的使用可查阅教材

3、附录),观察功能调 用相应的出口参数与“(1)”看到的结果是否相同(使用td观看出口参数即可)。(3)编写程序,直接读取相应内存单元,观察读到的数据与“(1)”看到的结果是否 相同(使用td观看程序的执行结果即可)。任务2:编写一个接管键盘中断的中断服务程序并驻留内存,要求在程序返回dos 操作系统后,键盘上的小写字母都变成了大写字母。要求:(1)在dos虚拟机或dos窗口下执行程序,中断服务程序驻留内存。(2)在dos命令行下键入小写字母,屏幕显示为大写,键入大写时不变。执行td, 在代码区输入指令“mov ax,0”看是否能发生变化。(3)选作:另外编写一个中断服务程序的卸载程序,将键盘中

4、断服务程序恢复到 原来的状态(也就是还原屮断矢量表的信息,先前驻留的程序可以不退出内存)。任务3:读取cmos内指定单元的信息,按照16进制形式显示在屏幕上。要求:(1)先输入待读取的cmos内部单元的地址编号(可以只处理编号小于10的地址 单元)。再使用in/out指令,读収cmos内的指定单元的信息。(2)将读取的信息用16进制的形式显示在屏幕上。若是吋间信息,可以人工判断一 下是否正确。3. 实验过程3.1任务13.1.1实现思想用方法一查看吋,将ds段置零,找到16h中断所在位置。由于在实方式下,每个中断 表项占4个字节,那么16h的物理地址就是00000+!6hm=00058ho在数

5、据段中使用goto, 到达ds: 0058h,即可查看到屮断类型码16h对应的屮断处理程序的人口地址。用方法二查看时,用到了 35h取中断信息的功能。将3516h参数传送到ax (相当于 ah=35, al=16),在调用35h功能号后,bx和es中将分别保存中断类型码16h入口地 址的信息,即ip和cs。用方法三查看时,直接用bx和cx读取相应的内存单元的段值和偏移地址,即movbs,ds:58h, mov cx,ds:f60ho3.1.2源程序方法二源程序:.386stack segment use16 stackdb 200 dup(0)stack endscode segment us

6、e16assume csrcodestart:xor ax,axmov ds,axmov ax,3516hint21hmov ah,4chint21hcode endsend start方法三源程序:.386stack segment use16 stackdb 200 dup(o)stack endscode segment use 16assume cs:codestart:xor ax, axmov ds,axxor cx,cxmov bx,ds:58h1mov cx,ds:5ah|mov ah,4chint21hcode endsend start 3.1.3实验步骤1. 在dosbo

7、x中打开td,进入界面后,在寄存器区域中将ds置0。在数据段中,使 用goto转到0058h,查看前4个比特屮存放的值,前两个比特(16位)存放的是段值,后 两个比特(16位)存放的是偏移地址。2. 在notepad+中录入源程序中方法二所示的程序,进行编译连接,并在td中运行。 使用单步调试,观察出口参数中bx和es中的值。3. 在notepad+中录入源程序中方法三所示的程序,进行编译连接,并在td中运行, 使用单步调试,分别观察bx和cx中的值。4. 用td将中断矢量表屮的值改为任意值,观察程序发生的现象。3.1.4实验记录与分析1. 实验环境条件:2.60ghz, 2gb 内存;win

8、dows 10 下 dosboxo.74; td.exe 5.()。2. 打开 td,将 ds 置为 0,在代码段中 goto 到 ds:0058h o (0:16h*4)->ip, (0:l16h*4+2)->cs3. 观察ds段中0058h的信息,发现该中断的1p是11e0h, cs是0f000h,如图4.1 所示。ds 0000es 0aad ss oaad(a)ds段被置0ds:0g58eo1100f0z0 1zo0fo«=t=ds:0g60c01200f0c0 1z00f0lt=u=/lo ornafl4a17gwa勺乓切avma±(b)00058 的

9、 ip是 e011,cs是 00f0图4.1 16h的中断矢量4将方法二的源程序录入,进行单步调试,执行调用35h的功能查看es和bx中存放的数据。es屮存放的是16h的cs值0f000h, bx存放的是ip值11e0h。如图4.2所示。0x0/58ed80x0.4 b816357 cdz1mouds,axmou ax,3516 int z1ex 0000dx 0000cs:0oo9b44csi 0000010x0010x0cs:o011cs:o013cdz1mou010x0010x0cs:qq15 0000add add add add addz1bx+si,al bx+si,al bx+s

10、i,al bx+si,al bx+si.aldi 0000bp 0000sp 00c8ds 0000es food图4.2执行35h调用后寄存器和es段中的结果5. 将方法三的源程序录入,进行单步调试。在执行完mov cx,ds:5ah后,查看bx寄存器和cx寄存器中的内容。bx中存放的是1p值11e0, cx中存放的是cs值f000,这与方法一和方法二得到的结果相同。如图4.3所示。cs:cs :o004 cs:0006 cs:0ood8ed8 mou 33c9 xor 678b1d58000o00 mou 678b0d5ao0000o mouds, axcxjcxbx,00000058 c

11、xaoooooosaibx 11eocx f000cs:oo14kb44cmouah,4cdx 0000 si 0000 di 0000图4.3执行完mov cx,ds:5ah后的结果6. 尝试修改中断矢量表中的值后,运行程序。发现,程序无法中断,接连不断地运行着。如图4.4所示。图4.4程序无法中断3.2任务23.2.1设计思想及存储单元分配对16h对应的中断处理程序进行接管,首先需要将旧指令的偏移地址和段值保存在一 个双字中,并将新指令加入到当前段中,并在新段中通过jmp dword ptrold_int和 pushf;call dword ptr old int两种方式来调用i口的屮断功

12、能。00h和10h两个功能号表示从键盘读入字符,因此,可对ah中的值进行判断(是否 等于00h或01h)实现输入字符时就能调用修改后的川断服务的目的。当系统接收键盘开 始读入字符的信息时(ah等于00h或10h时),就幵始执行实现将小写字母转化为大写字 母的功能。字母的转化需要判定输入值的ascii码。若输入字符(al)的ascii码在61h到7ah 之间,那么将该字符减去20h,从而实现小写字母到大写字母的转换。存储单元的分配:al, ah用于系统调用赋予参数ax用丁-临时存储关于中断服务程序的卸载程序,首先将修改中断所在的cs段的段值传送给es,接着 禁止屮断(cli)将被修改的屮断原小断

13、的值重新覆盖,即将es:o赋值给ds:16h*4,es: 赋值给ds:16h*4+2,执行完毕后开屮断(stl)o3.2.2流程图nyal = al 20h调用oldjnt图4.5修改16h中断的流程图3.2.3源程序1. 修改中断程序.386stack segment use 16 stackdb 200 dup(o)stack endscode segment use 16assume cs:code,ss:stackold_int dw ?,?new16h:cmpah,00hje lthcmp ah, 1 ohje lthjmp dword ptr oldjntlth:pushfcall

14、 dword ptr oldjntcmpal,61h ;与 a 的 ascii 码对比jb quitnext1:cmpal,7ahja quitsub al,20h ;将小写转换为大写quit: iret;书上p223start: xor ax,axmov ds,axmov ax,ds:16h*4mov oldjnt,ax;保存偏移部分mov ax,ds:16h*4+2mov old_int+2,ax;保存段值climov word ptr ds:16h*4,offset new16hmov ds:16h*4+2,csstimov dx,offset start+15shr dx,4add d

15、x,10hmov al,0mov ah,31hint21hcode endsend start2. 中断程序恢复.386code segment use 16assume cs:code,ss:stack;书上p223start: xor ax,axmov ds,axclimov es, ds:16h*4+2mov ax, es:omov bx, es:2mov word ptr ds:16hm,axmov word ptr ds:16h*4+2,bxstimov dx,offset start+14shr dx,4add dx,10hmov al,0mov ah,31hint21hcode

16、endsstack segment use 16 stackdb 200 dup(o)stack endsend start3.2.5实验步骤1用notepad+录入源程序所示的代码,用dosbox进行编译和连接,如有报错返回 修改,如连接成功,则继续下一步。2. 向屏幕中输入字符,观察小写字母是否能被转化为大写字母。3. 同吋打开另一个虚拟dos窗口,观察键盘的大小写会被替代。4. 找到其他确定自己编写的程序被调用的方法。3.2.4实验记录与分析1. 实验环境条件:2.60ghz, 2gb 内存;windows 10 下 dosboxo.74; td.exe 5.0。2. 在源代码中,运用了

17、两种方法进入原來的中断程序,如图4.6所示。在jmpdwordptr old_int这种方式中,调用了原来的中断程序后会直接退出中断处理程序。而在 pushf;call dword ptr old int这种方式中,在现有程序中遇到了 iret才算真正地 退出程序。jmp dword ptr old_int pushfcall dword ptr old int图4.6调用原中断程序的两种方式3. 录入源代码,用dosbox进行编译和连接,并运行该程序。4. 运行程序,dos能够正常工作,输入字符abcabcxyzlo#s ,字符变为abcabcxyz10#s,即小写字母都变为了大写,如图4.

18、7所示。:>sixc:>abcabcxyz10tt$图4.7调用了修改后的中断程序5打开另一个dosbox,键盘小写没有被取代为大写。这说明修改后的中断处理程序只对当前虚拟机起作用。如图4&所示。图4.8不影响其他虚拟机6.在原虚拟机屮,用td对修改后屮断程序进行调试。单步调试,在屮断号16h处,可以用alt+f7进入中断程序。发现16h中断中的内容己经成功被修改。这是除了直接看小写字母被改为大写字母外的确定中断程序被调用的方法。如图4.9所示。:s:lle陟fbsti:s:11e1 fedbfe:s:lle2 380fcmpbxl,cl:s:lle4 0ocfaddbhf

19、cl:s:lle6 90nop:s:lle7 90nop(a)修改前cs:o0o4k80fc0ocmpah, 00cs:qo07 740aje0013cs:o009 80fc1ocmpah, 10cs:oo0c 7405je0013cs:o00e zeffze00oojmpcs:far 000ojcs:o013 9cpushfcs:0o14 2eff1e0ooocallcs:far 0oogjcs:0019 3c61cmpal,61cs:o01b 7206jb0023cs:001d 3c7acmpal,7acs:001f 7702la0023(b)修改后图4.9修改16h中断前后对比7.在中断

20、服务卸载程序中,从ds:16h*4+2中获取原cs段,从原cs段的和处分別获 得原中断程序的ip和cs,并将原来中断程序的ip和cs分别存入ds:16h*4和ds:16*4+2 屮,实现覆盖修改后中断程序的目的。调用中断服务卸载程序。发现小写功能恢复。如图 4.10所示。c:>sixcc:>ssssdds11 legal command: ssssdds.c:>sixrecoc:>dddd图4.10成功卸载修改后的中断程序3.3任务33.3.1设计思想及存储单元分配首先调用2号dos指令,读取键盘信息,将读取的信息与q比较,若为q,则退出。若不是q,则将al中的数字转化

21、为十进制的0-9。将al的信息取出到端口 70h,再从端口 71h中读入cmos中的数据。将al中的高4位转入ah,仅保留低4位(将al与0fx相 与)。将ah中的值右移4位,即将压缩bcd码中的高四位传入ah的低四位。再用将ax 的值赋给bx,输出bx中的数,此数即为cmos中指定单元的信息。3.3.2流程图开始ah = al结束一号调用.律取指令rn,梅al转化为10进制的0-9 al = al-30输入al q ?ah»4bx = ax取出al的信息out 70ht al打臼bx澳入cmos中的信息in al,71h图4.11读取cmos内指定单元信息流程图3.3.3源程序.3

22、86data segment use16output db 'please input 0-9; input q to quit:',0ah,0dh,$data endsstack segment use 16 stackdb 200 dup(o)stack endscode segment use 16assume ds:data,ss:stack,cs:codestart:mov ax, datamov ds, axdos2 macro amov dl, amov ah,2int21hendmlea dx,outputmov ah,9int21hlopa: mov ah,

23、1;读取指令信息int21hcmp al, qjequitcmpal, qje quitsub al, 30h;转化为10进制()9out 70h, al;将信息取出in al, 71h;读入信息mov ah, aland al, ofhshr ah, 4add ax, 3o3oh;转化为ascll码mov bx, axdos2 oahdos2 odhdos2 bh;输出信息dos2 bldos2 oahdos2 odhjmp lopa;循环执行quit:mov ah, 4chint21hcode endsend start3.3.4实验步骤1. 用notepad+录入源程序所示的代码,用do

24、sbox进行编译和连接,如有报错返回 修改,如连接成功,则继续下一步。2. 调用该程序,观察向屏幕输入09时的,系统输出的情况。3. 分析系统输出的情况,并用相应的时间信息对输出进行检验。3.2.4实验记录与分析1. 实验环境条件:2.60ghz, 2gb 内存;windows 10 下 dosboxo.74; td.exe5.0。2. 将源程序所示的代码用notepad+录入,并用dosbox进行编译连接,运行程序。3. 输入4,读取小时;输入2,读取2读取分钟,输入6,读取一周的第儿日,输入7读取日期,输入8读取月份,输入9读取年份。结果与客观时间相符合。d:>sixdplease

25、input 0-9; input q to quit:15z 16& em? 一一日期19月份3年份17格式周的第一短日期:长日期:短时间:酬日17/4/192017年4月19日下午3:16图4.12 cmos数据取出的输岀4. 在cmos中,压缩bcd码存放在一个字节中,以两个10进制8421码的形式存在(高4位1个,低4位1个)。5. 打开td,在代码区中直接输入三行代码:moval,4;out 70h,al;inal,71h。小时的结杲成功地被放入al中,如图所示。图4.13在td中使用in/out指令获取cmos数据4总结与体会在本次实验中,实验者掌握了中断矢量表的概念,并使用3种方式查看了中断欠量表: 掌握了实方式下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论