姓名
学号
班级
成绩
西安财经学院信息学院
《汇编语言程序设计》 实验
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
实验名综合实验程序设计 实验室 实验日期 2010-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
六.
总结
初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf
1.通过课程设计的编程和对编程过程中遇到的问题的思考,有效的提高了我对汇编的认识和理解,切实的提高了我的编程能力,补全了我的不足。
2.通过这次课程设计,我巩固所了学过的知识,能用汇编语言熟练地运用顺序、选择、循环、分支、子程序等结构,进一步掌握了各个指令的功能,特别是转向指令,掌握了子程序的定义及调用,以及正确地运用DEBUG指令。
3.在整个程序的编写中,调试占了很大部分的时间。要想写好汇编语言的程序,必须认真对待代码的每一个细节,还必须熟练的掌握debug命令,这对程序的调试是非常重要的。通过这次实际动手能力的培养,我进一步熟悉了汇编语言的结构和使用方法,基本达到了能独立阅读和调试一定规模的汇编语言程序的水平。