收藏 分享(赏)

硬件实验1.doc

上传人:hwpkd79526 文档编号:9207323 上传时间:2019-07-29 格式:DOC 页数:7 大小:137KB
下载 相关 举报
硬件实验1.doc_第1页
第1页 / 共7页
硬件实验1.doc_第2页
第2页 / 共7页
硬件实验1.doc_第3页
第3页 / 共7页
硬件实验1.doc_第4页
第4页 / 共7页
硬件实验1.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、实验一: DEBUG 程序的使用 1&2一、实验目的1. 学习使用 DEBUG 程序的各种常用命令;2. 掌握实模式下 Pentium 微处理器结构,包括内部寄存器、内存单元;3. 掌握计算机中数的表示和编码;4. 利用 DEBUG 学习 Pentium 实模式下的寻址方式和指令系统;5. 了解计算机取指令,执行指令的工作过程;6. 掌握用 DEBUG 调试自编程序的方法。二、实验基本任务1(1) 任务 1 练习使用 DEBUG 的各种命令,重点为 R,D,A,U ,T,P,G 的使用。开机进入 DOS 系统,在 DOS 界面下,建立个人工作文件夹。具体如下:md wujian /建立文件夹

2、wujian;cd wujian /进入文件夹 wujian;使用指令 debug 进入 DEBUG 程序。练习各命令。命令格式 功能R 显示所有寄存器内容D内存块 显示指定内存块内容A内存地址 从指定内存地址开始汇编指令U内存块 对指定内存块进行反汇编T=内存地址条数 单步或多步执行命令P=内存地址条数 单步或多步执行命令G=内存地址 连续执行指令1(2) 任务 2 使用 R 命令查看进入 DEBUG 后当前各寄存器的值,记录。重启进入 DEBUG ;输入指令 -R/ (/ 表示回车,下同)如下表示:AX 0000 DS 2B86BX 0000 ES 2B86CX 0000 SS 2B86D

3、X 0000 CS 2B86SP FFEE IP 0100BP 0000SI 0000DI 0000NV UP EI PL NZ NA PO NC 2B86:0100 OF DB OF说明:为避免操作引起的系统运行异常,实验中使用 DOS 分配给用户的内存可用区,即内存地址大于 DS:IP (即 2B86:0100) 的部分。 1(3) 任务 3 了解可读写内存 RAM 和只读内存 ROM 的区别。分别给 RAM 与 ROM 中某内存地址填值,比较操作结果。指令: -D DS:1200 122F/-F DS:1200 122F A/-D DS:1200 122F/指定内存块内容均为A ,重启后

4、恢复原值。指令: -D F000:1200 122F/-F F000:1200 122F A/-D F000:1200 122F/指定内存块内容不变,重启后亦不变。内存 RAM 可读写,电源关闭后,其中的内容不保存;内存 ROM 只能读不能写(须使用专用设备及软件写入) ,电源关闭后其内容仍保存。1(4) 任务 4 使用命令 U 查看 Pentium 开机后执行的第一条指令。执行命令 G=FFFF:0,T=FFFF:0,G FFFF:0 。分析之。指令:-U FFFF:0/得到开机第一条指令为:JMP 0309:04F4Pentium 开机后执行的第一条指令在内存 FFFF:0 H 开始处。指

5、令:-G=FFFF:0/计算机重启分析:G=内存地址 连续执行指令从 FFFF:0 开始执行指令,直到执行完能控制返回 DEBUG 状态的程序段才停止返回DEBUG。从开机第一条指令处开始执行,故会重启计算机。指令:-T=FFFF:0/计算机正常。AX 0000 DS 2B86BX 0000 ES 2B86CX 0000 SS 2B86DX 0000 CS 0393SP FFEE IP 04F4BP 0000SI 0000DI 0000NV UP EI PL NZ NA PO NC 0393:04F4 68 DB 68若不断输入指令 T/,则最终计算机重启。相当于 G=FFFF:0 。分析:T

6、=内存地址条数 单步或多步执行命令该指令为单步执行命令,故只执行从 FFFF:0 处取得的第一条指令,然后指向下一条指令。如上表所示。指令:-G FFFF:0/死机分析:-G FFFF:0 使计算机从当前 CS:IP 指向的指令开始执行,FFFF:0 为断点。当执行到断点或 DOS 结束程序的功能调用才结束。故当程序流程中无 FFFF:0 断点,或者 DOS 结束程序的功能调用,则进入死循环,表现为死机(CPU 仍在工作) 。也可能是开机执行的FFFF:0 处指令出现异常造成死机。1(5) 任务 5 直接写屏法。闪烁 背景 前景BL R G B I R G B字符 H e l l o (spa

7、ce) W o r l dASCII码 48 65 6C 6C 6F 00 57 6F 72 6C 64(说明: 表示打空格键)指令:-E B800:0 48 9F 65 9F 6C 9F 6C 9F 6F 9F 00 9F57 9F 6F 9F 72 9F6C 9F64 9F/在 0 行 0 列用蓝底白字显示“Hello Word”。指令:-E B800:E72 48 CF 65 CF 6C CF 6C CF 6F CF 00 CF57 CF 6F CF 72 CF6C CF64 CF/在 24 行 1 列用红底白字显示“Hello Word”。2(1) 任务 1 用命令 A 汇编下列指令,

8、判断指令正误。实验过程:在 DEBUG 下将指令用-A 输入,每条指令输入完成后回车,若指令错误,则显示error。以此判断指令的正确性。实验结果:指令 判断MOV DS,2010 错误。不允许立即数直接传送给段寄存器。ADD AX,CX 错误。AX 值不可以作为偏移地址。CMP AX,BL 错误。比较的两数位数不同。TEST DI,SI 错误。不允许存储器传送到存储器。ROR AX, 8 错误。当移位数大于 1 时,应由 CL 寄存器给出。MOV BX,0错误。无类型依据,需对存储器操作数加类型说明。将错误指令改正如下:错误指令 正确指令MOV DS,2010MOV AX,2010/MOV

9、DS,AX/ADD AX,CXMOV DX,AX/ADD DX,CX/CMP AX,BL CMP AL,BL/TEST DI,SIMOV AX,SI/TEST AX,DI/ROR AX, 8MOV CL,8/ROR AX,CL/MOV BX,0MOV byte PTR BX,0/(字节操作)MOV word PTR BX,0/(字操作)2(2) 任务 2 寻址方式学习。实验过程:实验程序 1:-A/MOV AX,4000/ ;将 4000H 送入 AX,立即数寻址MOV DS,AX/ ;将 4000H 送入 DS,寄存器寻址MOV BX,1234/ ;将 1234H 送入 BX,立即数寻址MO

10、V SI,100/ ;将 100H 送入 SI,立即数寻址MOV SI,BL/ ;将 BL 的值(即 34H)送入SI所表示的内存地址单元(即40100H);寄存器间接寻址执行程序:-T/ ;使用用单步执行命令,查看每一步的结果。重复该命令,可一步步执行。查看结果:、使用 R 查看寄存器的值的结果;、使用命令“E 内存地址”查看该以该内存地址为首地址的一段内存的值。实验结果:在地址为 40100H 的内存单元内容为 34H。比较程序 2:-A/MOV AX,4000/ MOV DS,AX/MOV BX,1234/ MOV SI,100/MOV SI,BX/ ;将 BX 的值(即 34H)送入S

11、I 所表示的首地址内存单元,即 ;将 34H 送入40100H 中,将 12 送入40101H中。实验结果:在地址为 40100H 的内存单元内容为 34H;在地址为 40101H 的内存单元内容为 12H。实验结果分析:程序 1 中,指令 MOV SI,BL 使用 8 位寄存器 BL 来传递数据,故只将 BX 中低 8 位的内容(即 BL 的内容 34H)传递到指定内存地址;而对程序 2,指令 MOV SI,BX 中使用 16位寄存器 BX 来传递数据,故将 BX 的高 8 位与低八位(即 1234H)传递到指定内存地址,其中,低 8 位置于低地址处,高 8 位置于高地址处。2(3) 任务

12、3 调试程序练习。程序 1:-A/MOV CX ,5/MOV AL ,0/MOV BX ,2000/next: ADD AL,BX/INC BX/DEC CX/LOOP next/MOV BX,ALINT 3/保存程序至硬盘及使用 DEBUG 调试程序。调试结果:该程序不能完成指定功能。原因是:程序中的指令 LOOP next 包含了将 CX的值减 1 的操作,与指令 DEC CX 重复。因此,在一次循环中,实际上 CX 的值减少了2,故不能循环 5 次。程序修改:使用 A 命令将指令 DEC CX 修改为指令 NOP (空操作) 。修改后的程序:MOV CX ,5/MOV AL ,0/MOV

13、 BX ,2000/next: ADD AL,BX/INC BX/NOP/LOOP next/MOV BX,ALINT 3/2(4) 任务 4 编程练习。使用 R 命令可得到 DS 内容为 2B86。使用直接写屏法在整个屏幕上显示兰底白字的字符 A。字符 A 的 ASCII 码:41H ;字符属性:1FH实验程序:-A/MOV AX , B800/MOV DS , AX/ ;将显示缓冲区的段地址赋予 DSMOV CX , 07D0/ ;设定循环次数,将该区的 80*25 个网格写满MOV BX , 0/ ;设定开始赋值的首地址MOV AL , 41/ ;字符 A 的 ASCII 码为 41HM

14、OV AH, 1F/ ;字符 A 的兰底白字为 9FHMOV BX , AL/ ;将 41 写入地址为 B800:BX 中INC BX/MOV BX , AH/ ;将 1F 写入地址为 B800:BX 中INC BX/LOOP 10F/INT 3/实验结果:在整个屏幕上显示兰底白字的字符 A。实验分析:1、该实验中需要注意将 9F41H 传递给指定内存地址时的规则:低位内容即 41H 先传递,而高位 9F 则传递到下一个地址,若传递交换这无法完成预计显示。2、实验中,实际上 CX 的值可以大于 07D0,保证写满屏。但由于结果显示时需要显示寄存器的内容,实际上是无法写满屏的。3、直接写屏法只需

15、要写入指令:F B800:0 FA0 41 9F。三、选作任务2(3) 任务 3 程序调试联系程序 2:MOV AX,0/again1: MOV SI,3/again2: MOV DI,3/DEC DI/JNZ again2/DEC SI/JNZ again1/MOV AX,FFFF/INT 3/程序执行结果:计算机死机(进入死循环)调试结果:该实验不能完成指定功能。原因:在程序执行过程中,DI 在减 1 后即又被赋值3,不可能变为 0,造成死循环。程序修改如下:MOV AX,0/MOV SI,3/again1: MOV DI,3/ ;改变 SI 与 DI 初值可以改变延时时间again2:

16、DEC DI/JNZ again1/ ;循环直至 DI 变为 0DEC SI/ ;DI 每循环至 0,SI 减 1JNZ again2/ ;循环直至 SI 变为 0MOV AX,FFFF/INT 3/2(4) 任务 4 编程练习(2) 将内存 1000:2000H 起的 30H 个字数据传送到内存 2B86 :3000H 处。实验程序:-A/MOV SI,2000/MOV DI,3000/MOV AX, 2B86/MOV ES,AX/ ;将 ES:DI 变为 2B86:3000HMOV AX,1000/MOV DS,AX/ ;将 DS:SI 变为 1000:2000HMOV CX,30 ;指定

17、传送的字个数为 30HMOV AL,SI/ ;循环传送 30 个字符 MOV ES:DI,AL/INC SI/INC DI/LOOP 113/INT 3/实验结果:内存 1000:2000H 起的 30H 个字数据传送到以 2B86 :3000H 为首地址的内存块处。四、关于第 1、2 次上机的思考这是本学期硬件课的第一次上机,在上机中感受最深的就是看似比较简单的东西在上机时变得比较的难了。在输入指令的时候要特别的小心,因为错误往往出现在意想不到的地方,比如有时候输入 MOV,不小心输成了 NOV,到后面在一字一行的找错浪费时间。其次在自己编程的时候,往往会有一种不知所措的感觉,不知道从哪步开始干起,这就需要我们在课前充分的预习,在上机短短的时间内,从构思到编程再到调试,时间是不够的。同时在输入指令时,学习了一些技巧的使用。例如在 DOS 下用命令“cls” 清屏;在DEBUG 下用右方向键可以重复输出之前输出的内容等。这些技巧有助于提高编程效率。对于硬件这门课,我们主要还是要靠上机试验,多动手自己操作,并积累课外的知识,才能将其学好。

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报