汇 编 语 言 程 序 设 计 实 验 报 告
MOV AH, 1
INT 21H ;从键盘接受一数字x的ASCII码
AND AL, 0FH //录入错误: 数字“0”敲成了字母“O”
MOV X, AL ;x的真值 → AL → X
MOV EBX,AL ;x的真值 → EBX //设计错误,应改成:XOR EBX, EBX
MOV BL, AL
MOV AX, TAB[EBX*2] ; (TAB + [2 * EBX])→ AX MOV XXX, AX ; 保存立方值 MOV AH, 4CH INT 21H CODE ENDS END BEGIN
3.1.4 实验步骤
1. 使用编辑程序EDIT.EXE录入源程序,存盘文件名为CUBE.ASM。 2. 使用MASM5.0或6.0汇编源文件。即MASM CUBE;
3. 观察提示信息,若出错,则用编辑程序修改错误,存盘后重新汇编,直至不再报错为止。 4. 使用连接程序LINK.EXE将汇编生成的CUBE.OBJ文件连接成执行文件。
即LINK CUBE;
5. 若连接时报错,则依照错误信息修改源程序。之后重新汇编和连接,直至不再报错并生成CUBE.EXE文件。
6. 执行该程序。即在命令行提示符后输入CUBE后回车,观察执行现象。 (以上6个步骤是所有编程实验需要经历的,在后续实验报告中可以适当简化) 7. 使用TD.EXE观察CUBE的执行情况。即 TD CUBE.EXE回车 (1)观察CS、IP、SP、DS、ES、SS的值。
(2)单步执行开始2条指令,观察DATA的实际值,以及DS的改变情况。 (3)观察SS:0至SS:SP区域的数据值。
(4)观察DS:0开始数据区,找到各变量在数据段中的位置和值。
(5)观察第三条语句中源操作数的值,是否和INPUT变量的偏移地址相同。 (6)执行第3至7条指令,输入数字3。观察AL的值是否为33H。 (7)执行到MOV AX, TAB[EBX*2],观察源操作数的具体值。
(8)执行MOV XXX, AX,观察目的操作数的形式。到数据段中观察XXX的值是否是3的立方值。
8. 将程序重新装入TD中(或将CS:IP重置到MOV AH,9的位置),在执行9号功能调用之前,用TD将数据段中INPUT缓冲区的‘$’(24H)改成其他数值(如00H),再执行9号功能调用,观察现象。
9. 当调用1号功能时,若输入大写字母‘A’,则送到XXX的值是哪个存储单元的值;若输入的是‘K’,则送到XXX的值又是哪个存储单元的值。
3
汇 编 语 言 程 序 设 计 实 验 报 告
(以上3个步骤是针对实验要求和每个人自己在学习中不太理解的内容设计的)
3.1.5 实验记录
(包括实验条件、输入/输出、错误和修改等信息的记录)
1、实验环境条件:P3 1GHz,256M内存;WINDOWS 2000命令行窗口;EDIT.EXE 2.0;MASM.EXE 6.0; LINK.EXE 5.2; TD.EXE 5.0。
2、汇编源程序时,汇编程序报了3个错误。它们是:
CUBE.asm(17): error A2044: invalid character in file
CUBE.asm(22): error A2022: instruction operands must be the same size CUBE.asm(20): error A2006: undefined symbol : OFH
按照提示,对对应行仔细检查,发现了错误原因。见源程序中“//”后的说明。
3、连接过程没有发生异常。
4、执行之后在新的一行上显示了字符串PLEASE INPUT X(0-9): 5、输入3之后在冒号后显示了一个3。 6、程序退出到命令行提示符。 7、用TD调入CUBE.EXE后
(1)(CS)=0B0AH、(IP)=0000H、(SP)=00C8H、(DS)=0AEAH、(ES)=0AEAH、(SS)=0AFAH。 (2)单步执行开始2条指令,DATA的值=0B07H,(DS)→0B07H。
(3)SS:0至SS:SP区域的数据值在程序没有执行时均为0。单步执行一次后靠近栈顶的几个字发生了变化,不知为何?
(4)DS:0开始数据区存放了INPUT变量为首址定义的字符串。EA=15H开始存放TAB立方值表。EA=29H存放X(当前值为0);EA=30H存放XXX(当前值为0)。
(5)TD中显示的第三条语句为MOV DX,0000,源操作数的值和INPUT变量的偏移地址相同(均为0)。
(6)输入数字3。AL的值从24H变成了33H。
(7)MOV AX, TAB[EBX*2]在TD显示的形式为MOV AX,[2*EBX+00000015]说明TAB代表的EA=00000015H,且是按照双字处理的。
(8)MOV XXX, AX在TD显示的形式为MOV [002A],AX。执行后DS:(002A)=001BH(即27)是3的立方值。
8. 略(留给同学们观察后记录。) 9. 略(留给同学们观察后记录。)
3.2 任务2
3.2.1 设计思想及存储单元分配 3.2.2 xxx
4
汇 编 语 言 程 序 设 计 实 验 报 告
4 体会
通过上机,不仅提高了编程水平,熟悉了工具的使用,而且加深了对一些知识的理解。 首先,更加感受到实验前准备的意义。例如:上机前准备越充分(如先编好源程序,制定好准备做的一些步骤),上机的时候目的越明确,可以解决较多的问题。
其次,本次上机的具体收获有:(1)录入程序时要注意一些细节,比如中文分号、字母O等问题,虽然汇编程序指出其所在行有错,但很难发现具体是哪个符号错了,耽误了不少时间。(2)比较清楚地认识了源程序中的寻址方式在TD中转换成了什么形式。(3)了解了数据在段中存放的方式。(4)实际体会了“$”在9号功能调用中的作用。(5)观察到了异常输入对程序结果的影响等。(6)TD在程序细节的观察、动态修改方面有很大的作用。
最后,由于操作不够熟练,时间比较紧张等原因,还有些问题需要以后进一步解决,如堆栈中数据变化的原因、各个段在内存中存放的关系、是否可跟踪到INT 21H中去、多次调入程序时初始的段值是否相同等等。
5
汇 编 语 言 程 序 设 计 实 验 报 告
参考文献
[序号] 作者.书名.版本(第×版).译者.出版地:出版者,出版年:起页-止页 [序号] URL: 网络地址,如URL:http://www.cbs.dtu.dk/services
------------------------------------------------------
备注:本样例是针对程序设计类型的实验编写的,如果是验证性实验、研究性实验等实验类型,部分标题下的内容是可以调整的,具体调整要求见每次布置题目时老师给出的说明。
请用A4纸双面打印,除了标题之外的正文用5号宋体1.25倍行距,图表用小5号宋体。
6
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库汇编语言实验报告模版(带封面)(2)在线全文阅读。
相关推荐: