14-汇编语言综合实验报告

华北科技学院综合性

实 验 报 告

课程名称        汇 编 语 言                   

实验学期   2013     2014   学年 第 2    学期

学生所在院部          计算机学院                 

年级   二年级        专业班级    计科B12- 1    

学生姓名     李文杰    学号    201207014129            

任课教师             李冬艳                    

实验成绩                                      

计算机学院制


实验报告须知

1、  学生上交实验报告时,必须为打印稿(A4纸)。页面空间不够,可以顺延。

2、  学生应该填写的内容包括:封面相关栏目、实验地点、时间、目的、设备环境、内容、结果及分析等。

3、  教师应该填写的内容包括:实验成绩、教师评价等。

4、  教师根据本课程的《综合性实验指导单》中实验内容的要求,评定学生的综合性实验成绩;要求在该课程期末考试前将实验报告交给任课教师。综合性实验中,所涉及的程序,文档等在交实验报告前,拷贝给任课教师。任课教师统一刻录成光盘,与该课程的期末考试成绩一同上交到系里存档。

5、  未尽事宜,请参考该课程的实验大纲和教学大纲。


《  汇 编 语 言》课程综合性实验报告

开课实验室:基础实验室四                           20##-12-08

 

第二篇:汇编语言程序设计综合实验报告

 西安财经学院 信息学院

《汇编语言程序设计》    实验报告

实验名综合实验程序设计    实验室        实验日期   20##-12-15  

一、实验目的及要求

1.悉debug命令,学习汇编语言的调试环境;

2.熟练撑握一些简单程序的调试,理解基本的顺序结构、分支结构、循环结构及子程序的调试过程;

3.通过对一些综合程序的调试,加深对各种结构程序的理与学习掌握汇给语言编程思想。

二、实验环境

硬件环境:一台微型计算机;

软件环境:windows xp,debug环境,masm。

三、实验内容

人名排序程序。先从终端键入最多30个人名,当所有人名都进入后,按字母上升的次序排序,并在屏幕上显示已经排好序的人名。

四、设计:

设计思想:通过运用计算机汇编语言指令系统,将我们所要表达的语言转换成机器指令,任其识别。

这是一个在使用子程序为主的基础上,综合应用顺序结构、循环结构和分支等结构的程序,以实现从键盘终端输入的人名按字母上升的次序排序。它们的过程和功能如下:

1.B10READ 接收键入的人名存放在NAMEPAR中,并用空格符清除其后的单元;

2.D10STOR 把人名从NAMEPAR 传送到NAMETAB中,并用NAMECTR计数;

3.G10SORT 用气泡排序算法对人名排序,并用SWAPPED作为交换的标志控制循环结束。其中用调用子程序H10XCHG来交换两个人名串的位置,并设置SWAPPED标志。

4.K10DISP 显示已经排序好了的人名。

人名排序的程序实现图1:

汇编语言程序设计综合实验报告

图1

五、调试与测试

1.由于masm5程序安装于D,改变工作目录于D盘环境下;

2.用MASM程序把ASM文件转换成OBJ文件;

3.用LINK程序把OBJ文件转换成EXE文件;

4.用DEBUG 命令调试程序;

5.用U命令返汇编;

6.用单步执行命令t,逐步实现数据段及代码段的初始化;

7.将数据据段的地址赋给DI指针寄存器,并用单步执行命令T按顺序执行程序的下一步指令,调用地址为0039的程序段b10read程序段,为实现名字的输入与输出操作;

8.用u命令返汇编,找出将要执行的程序段,用g命令一步执行地址为0039到0047

之间和程序段,显示数据段中messg1的内容即字符串Name?;

9.继续返汇编,执行程序段0047到0041完成第一个名字的输入,输入名字zhanglina,ret返回到DOS系统下,程序在调用前的地址,用T命令继续下一条指令,比较输入字符和长度和0的大小;

10.若相等,则跳到a30程序段,执行无字符输入时的程序。由于输入的字符个数为9(从数据段DS中的0001单元可以得到),然后比较所输入的名字的个数与所设的名字的最多个数30的大小;

11.由于输入名字的个数为9小于最大字符串长度30,调用d10store程序段对输入的字符个数进行计数;

12.无条件跳转到a20loop程序段;

13.继续调用b10read程序段,实现名字的继续输入;

14.返汇编输入下一个名字yingtianzi;

15.同样进行字符串长度10(即DS:0001=0A)与0的比较,根据所输入的字符串再选择相应和操作;

16.比较所输入的名字的个数,是否达到所设的名字最大个数字30;

17.对所输入的名字操作完成之后,调用程序段对所输d10stor入的名字进行计数;

18.继续调用输入名字程序段b10read,名字未输完,继续输入名字;

19.用G命令一步执行输入名字为:duanxiangxiang,并将最终的结果显示出来;

20.比较所输入字符串的长度,是否为0,若不为0,则进行字符个数的比较;字符串的长度为0,则执行无字符输入时的程序段,由数据段得知所输入的字符串长度为14。

21.由于所输入的字符串长度不为0,则进行比较所输入的名字的个数是否达到所设的最大个数30;由数据段所得已经有两个名字被计数;

22. 继续调用d10stor程序段进行名字个数的计数。

23.调用b10read程序段,输入并显示字符串;

24.循环多次输入字符串,即输入多个人名字;

25.用D命令查看所输入的字符串;

26.用U命令返汇编,对所输入的名字进行排序并输出,程序正常结束;

五、[源程序清单]

Data segment

namepar label byte

maxnlen db 21

namelen db ?

namefld db 21 dup(?)

crlf db 13,10,'$'

endaddr dw ?

messg1 db 'name?','$'

messg2 db 'sorted names',13,10,'$'

namectr db 0

nametab db 30 dup (20 dup(' '))

namesav db 20 dup (?),13,10,'$'

swapped db 0

Data ends

Code segment

main proc far

assume cs:code,ds:data,es:data

start: push ds

mov ax,0

push ax

mov ax,data

mov ds,ax

mov es,ax

cld

lea di,nametab

a20loop:

call b10read

cmp namelen,0

jz a30

cmp namectr,30

je a30

call d10stor

jmp a20loop

a30: cmp namectr,1

jbe a40

call g10sort

call k10disp

a40: mov ax,4c00h

Int 21h

Main endp

b10read proc near

mov ah,09

lea dx ,messg1

int 21h

mov ah,0ah

lea dx,namepar

int 21h

mov ah,09

lea dx,crlf

int 21h

mov bh,0

mov bl ,namelen

mov cx,21

sub cx,bx

b20: mov namefld[bx],20h

inc bx

loop b20

ret

b10read endp

d10stor proc near

inc namectr

cld

lea si,namefld

mov cx,10

rep movsw

ret

d10stor endp

g10sort proc near

sub di ,40

mov endaddr,di

g20: mov swapped,0

lea si,nametab

g30: mov cx,20

mov di,si

add di,20

mov ax,di

mov bx,si

repe cmpsb

jbe g40

call h10xchg

g40: mov si,ax

cmp si,endaddr

jbe g30

cmp swapped,0

jnz g20

ret

g10sort endp

h10xchg proc near

mov cx,10

lea di , namesav

mov si,bx

rep movsw

mov cx,10

mov di,bx

rep movsw

mov cx ,10

lea si,namesav

rep movsw

mov swapped,1

ret

h10xchg endp

k10disp proc near

mov ah,09

lea dx,messg2

int 21h

lea si,nametab

k20: lea di,namesav

mov cx,10

rep movsw

mov ah,9

lea dx, namesav

int 21h

dec namectr

jnz k20

ret

K10disp endp

code ends

end start

六.总结

1.通过课程设计的编程和对编程过程中遇到的问题的思考,有效的提高了我对汇编的认识和理解,切实的提高了我的编程能力,补全了我的不足。

2.通过这次课程设计,我巩固所了学过的知识,能用汇编语言熟练地运用顺序、选择、循环、分支、子程序等结构,进一步掌握了各个指令的功能,特别是转向指令,掌握了子程序的定义及调用,以及正确地运用DEBUG指令。

3.在整个程序的编写中,调试占了很大部分的时间。要想写好汇编语言的程序,必须认真对待代码的每一个细节,还必须熟练的掌握debug命令,这对程序的调试是非常重要的。通过这次实际动手能力的培养,我进一步熟悉了汇编语言的结构和使用方法,基本达到了能独立阅读和调试一定规模的汇编语言程序的水平。

相关推荐