天津大学计算机科学与技术学院实验报告
《汇编语言》实验报告(一)
年级 2011 班级 学号 姓名
一、实验题目
编制一汇编源程序,求出下列公式中的 Z 值,并放在 RESULT 单元中。
(X+Y)*8-X
Z=
2
2、实验要求
定义两个单元 X,Y 和一个单元 RESULT,利用数据的传送和运算指令将公式的结果计算出来,并将结果 Z 放
在 RESULT 里.
3、程序设计说明 (用来说明程序的功能、结构。包括:程序名、功能、原理及算法说明、程序及数据结构、主要符
号名的说明、程序框图等。)
程序的功能是对公式[(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 页
天津大学计算机科学与技术学院实验报告
4、程序调试说明(包括:调试情况,如上机时遇到的问题及解决办法,观察到的寄存器、存储器的内容或状态及
其分析.对程序设计技巧的总结及分析等;程序的输出结果及对结果的分析;实验的心得体会,以及诸如调试日期、
文件存放位置等需要记录的信息。)
起始堆栈指针 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。符合预期的设想。调试成功。
在程序设计时,心中的想法应和设计的程序吻合,心中应对程序的步骤清晰无比,以便在程序出错
时能及时找到错误,并给予纠正。然后要谨记程序的格式,对指令的使用要十分的清楚。尽量减少病
句的产生。
4、实验结果与结论 (经调试正确的程序的运行结果)
实验对公式 z=[(x+y)*8-x]/2 进行运算,在定义数据段时,已经对 x 和 y 赋值,分别为 6 和 7,经
计算结果 z=49,而实验结果result=0031h,与其符合。实验成功。
五、使用说明 (包括:程序的使用方法,调用方式,操作步骤等;要求输入信息的类型及格式;出错信息的含义及
程序的适用范围等。)
程序对公式 z=[(x+y)*8-x]/2 进行运算,只需在数据段定义时,修改 x 和 y 的值便可得到用户想要的结
果。程序的子程序 proc1 可被指令 call 调用。
6、实验中遇到的问题及解决方法
试验过程中对移位指令 shl 的使用错误,直接用了 shl ax,3 使程序出错,在修正后,mov cl,3
Shl ax,cl 后,程序可执行。
共 4 页 第 2 页
天津大学计算机科学与技术学院实验报告
7、程序源代码
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