华北科技学院综合性
实 验 报 告
课程名称 汇 编 语 言
实验学期 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命令,这对程序的调试是非常重要的。通过这次实际动手能力的培养,我进一步熟悉了汇编语言的结构和使用方法,基本达到了能独立阅读和调试一定规模的汇编语言程序的水平。
实验一汇编语言的源程序的输入一实验目的1通过实验了解和熟悉微机系统的配置2学习在DEBUG状态下输入汇编源程序的方法3初步掌握调试…
学生实验报告册20xx20xx学年第1学期实验名称汇编语言程序设计学院信息与电气工程学院班级09级计算机科学与技术2班学号1351…
汇编语言实验报告姓名专业软件工程班级093班学号099074235STARTMOVAXDATASMOVDSAXmovbxoffse…
HarbinInstituteofTechnologyatWeihai汇编语言实验报告实验一第一部分dubug用法一问题描述上机前…
福建农林大学金山学院课程名称姓名系专业年级学号指导教师职称程序设计类课程实验报告汇编语言庄建军信息与机电工程电子信息工程专业20x…
实验七分支程序实验目的1掌握利用间接转移指令JMPBX实现多岔分枝的方法2宏替换指令MACRO及ENDM3符号扩展指令CBW实验程…
计算机组成原理与汇编语言实验20xx指导教师签名一实验原理基本知识简单介绍算法流程计算机组成原理与汇编语言实验20xx计算机组成原…
实验六汇编语言程序上机过程实验目的1掌握常用工具软件PEMASM和LINK的使用2伪指令SEGMENTENDSASSUMEENDO…
学生实验报告册20xx20xx学年第1学期实验名称汇编语言程序设计学院信息与电气工程学院班级09级计算机科学与技术2班学号1351…
实验一1熟悉汇编语言程序调试环境及顺序程序设计一实验目的及要求1学习及掌握汇编语言源程序的书写格式和要求明确程序中各段的功能和相互…