内容发布更新时间 : 2024/12/23 1:48:17星期一 下面是文章的全部内容请认真阅读。
天津大学计算机科学与技术学院实验报告
《汇编语言》实验报告(一)
年级:2011 班级: 学号: 姓名:
一、 实验题目 编制一汇编源程序,求出下列公式中的Z值,并放在RESULT单元中。 二、实验要求 定义两个单元X,Y和一个单元RESULT,利用数据的传送和运算指令将公式的结果计算出来,并将结果Z放在RESULT里. 三、程序设计说明(用来说明程序的功能、结构。包括:程序名、功能、原理及算法说明、程序及数据结构、主要符号名的说明、程序框图等。) Z= (X+Y)*8-X 2 程序的功能是对公式[(x+y)*8-x]/2进行运算,得出结果。首先对程序的数据段和堆栈段进行定义,数据段里定义3个数据,x,y和result。堆栈段里定义一定长度的容量,实现程序对现场的保护和恢复。定义一个代码段,以过程成形式编制的程序。过程名为proc1,首先对3个段进行寻址。在程序的开头给一个标号,给一个起始地址,在程序最后结束起始地址来实现对代码段的装入。程序的开始,先保留进入程序前的ds,并将0以16位形式压入堆栈。接着,装入数据段。将x的数据传送到ax中,利用add指令实现x+y,并利用移位的形式实现乘8的操作,用sub运算再扣除x,接着移位实现除2的操作,最后,用mov指令将ax的内容传送到result里。 共4页 第1页
天津大学计算机科学与技术学院实验报告
四、程序调试说明(包括:调试情况,如上机时遇到的问题及解决办法,观察到的寄存器、存储器的内容或状态及其分析.对程序设计技巧的总结及分析等;程序的输出结果及对结果的分析;实验的心得体会,以及诸如调试日期、文件存放位置等需要记录的信息。) 起始堆栈指针sp=0040h,ds:13BE,ax为0。在实现对ds的保留时,sp=003C,内容为13BE和0000。在实现ds的装入时,ax=13CE,ds=13CE。接着ax=0006,000D,0068,0062,0031。执行result传送数据的语句时,ds:0005=31。符合预期的设想。调试成功。 在程序设计时,心中的想法应和设计的程序吻合,心中应对程序的步骤清晰无比,以便在程序出错时能及时找到错误,并给予纠正。然后要谨记程序的格式,对指令的使用要十分的清楚。尽量减少病句的产生。 四、实验结果与结论(经调试正确的程序的运行结果) 实验对公式z=[(x+y)*8-x]/2进行运算,在定义数据段时,已经对x和y赋值,分别为6和7,经计算结果z=49,而实验结果result=0031h,与其符合。实验成功。 五、使用说明(包括:程序的使用方法,调用方式,操作步骤等;要求输入信息的类型及格式;出错信息的含义及程序的适用范围等。) 程序对公式z=[(x+y)*8-x]/2进行运算,只需在数据段定义时,修改x和y的值便可得到用户想要的结果。程序的子程序proc1可被指令call调用。 六、实验中遇到的问题及解决方法 试验过程中对移位指令shl的使用错误,直接用了shl ax,3使程序出错,在修正后,mov cl,3 Shl ax,cl后,程序可执行。 共4页 第2页
天津大学计算机科学与技术学院实验报告
七、程序源代码 data segment x dw 6 y dw 7 result dw ? data ends stack segment para stack dw 20h dup(0) stack ends code segment proc1 proc far assume ds:data,cs:code,ss:stack start: push ds xor ax,ax push ax mov ax,data mov ds,ax mov ax,x add ax,y mov cl,3 shl ax,cl sub ax,x 共4页 第3页