课程设计综合实验报告书科院模版.docx

上传人:b****8 文档编号:10093591 上传时间:2023-05-23 格式:DOCX 页数:21 大小:138.79KB
下载 相关 举报
课程设计综合实验报告书科院模版.docx_第1页
第1页 / 共21页
课程设计综合实验报告书科院模版.docx_第2页
第2页 / 共21页
课程设计综合实验报告书科院模版.docx_第3页
第3页 / 共21页
课程设计综合实验报告书科院模版.docx_第4页
第4页 / 共21页
课程设计综合实验报告书科院模版.docx_第5页
第5页 / 共21页
课程设计综合实验报告书科院模版.docx_第6页
第6页 / 共21页
课程设计综合实验报告书科院模版.docx_第7页
第7页 / 共21页
课程设计综合实验报告书科院模版.docx_第8页
第8页 / 共21页
课程设计综合实验报告书科院模版.docx_第9页
第9页 / 共21页
课程设计综合实验报告书科院模版.docx_第10页
第10页 / 共21页
课程设计综合实验报告书科院模版.docx_第11页
第11页 / 共21页
课程设计综合实验报告书科院模版.docx_第12页
第12页 / 共21页
课程设计综合实验报告书科院模版.docx_第13页
第13页 / 共21页
课程设计综合实验报告书科院模版.docx_第14页
第14页 / 共21页
课程设计综合实验报告书科院模版.docx_第15页
第15页 / 共21页
课程设计综合实验报告书科院模版.docx_第16页
第16页 / 共21页
课程设计综合实验报告书科院模版.docx_第17页
第17页 / 共21页
课程设计综合实验报告书科院模版.docx_第18页
第18页 / 共21页
课程设计综合实验报告书科院模版.docx_第19页
第19页 / 共21页
课程设计综合实验报告书科院模版.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

课程设计综合实验报告书科院模版.docx

《课程设计综合实验报告书科院模版.docx》由会员分享,可在线阅读,更多相关《课程设计综合实验报告书科院模版.docx(21页珍藏版)》请在冰点文库上搜索。

课程设计综合实验报告书科院模版.docx

课程设计综合实验报告书科院模版

 

科技学院

课程设计(综合实验)报告

(2010--2011年度第1学期)

 

名称:

汇编语言程序设计课程设计

题目:

查找匹配字符串

院系:

信息工程系

班级:

学号:

学生姓名:

指导教师:

设计周数:

一周

成绩:

日期:

2010年12月10日

一、课程设计的目的与要求

实验一比较字符串sample

熟悉DEBUG有关命令的使用方法;利用DEBUG掌握有关指令的功能;利用DEBUG运行简单的程序段。

进入和退出DEBUG程序;学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。

对于U命令、N命令、W命令等,也应试一下;利用DEBUG,验证乘法、除法、加法、减法、带进位加、带借位减、堆栈操作指令、串操作指令的功能。

编写一个程序:

比较两个字符串string1和string2所含的字符数是否相同。

若相同则显示‘math’,否则,显示‘nomath’;要求编写程序,并汇编,连接,运行,然后使用Debug调试该程序。

实验二查找匹配字符串

程序接受用户键入的一个关键字以及一个句子。

如果句子中不含关键字则显示‘nomath’;如果句子中包含关键字则显示‘math’,且把该字在句子中的位置用十六进制数显示出来。

实验三分类统计字符的个数

程序接收用户键入的一行字符(用回车符结束),并按字母,数字及其他字符分类计数,然后将结果存入以letter,digit和other为名的存储单元中。

实验四查找电话号码

4.1要求程序建立一个可存50项的电话号码表,每项包括人名及电话号码两部分;

4.2程序可接受输入人名及相应的电话号码,并把他们加入到电话号码表中;

4.3凡有新的输入后,程序应按人名对电话号码表重新排序;

4.4程序可接受需要查找电话号码的人名,并从电话号码表中查出其电话号码,再在屏幕上显示出来。

实验五屏幕窗口程序

在屏幕上开出三个窗口,它们的行列坐标如下图所示。

 

光标首先定位在右窗口最下面一行的行首(15,50),如果从键盘输入字符,则显示在右窗口,同时也显示在下窗口的最下面一行。

若需要将字符显示于左窗口,则先按下左键,接着再从键盘输入字符,字符就会从左窗口的最下行开始显示,同时下窗口也显示左窗口的内容。

当一行字符显示满后,窗口自动向上卷动一行,输入字符继续显示于最低一行,窗口最高一行向上卷动后消失。

实验六扩充键盘处理功能

在完成键盘处理基本功能的基础上,增加left_shift和right_shift键的功能。

要求实现左右SHIFT任何一个键处于按下状态时输入字符为键盘的上档字符或大写字母,否则输出数字或小写字母。

二、设计(实验)正文

实验一比较字符串sample

(1)设计思路

将两个字符串通过lea指令放入si和di中,用指令repz取字符串的首地址开始比较,REPZ表示在CX不为0时,且ZF=1重复执行后面的串处理指令CMPS。

如果不同选择NOTMATCH输出,否则输出MATCH。

REPZCMPSB

JZMATCH

JMPNOTMATCH

(2)程序框图

(3)程序实现LEASI,STRING1

LEADI,STRING2/*分别放入字符串于SI和DI*/

CLD/*规定字符串于SI和DI的比较方向*/

MOVCX,25/*设置字符串比较次数*/

REPZCMPSB/*循环比较字符串*/

JZMATCH/*字符串相同跳转*/

LEADX,MESS2

JMPSHORTDISP/*字符串不相同无条件跳转*/

MATCH:

LEADX,MESS1

DISP:

MOVAH,09/*输出结果*/

INT21H

MOVAH,4CH

INT21H

(4)实验结果(实验的运行结果)

实验二查找匹配字符串

(1)设计思路(包括程序的原理,算法及数据结构等)

(2)程序框图(画出程序主要部分流程图)

(3)程序实现

leadx,mess1

movah,09

int21h;输出Enterkeyword

leadx,stoknin1

movah,0ah;用21号中段的0ah号功能获取关键字

int21h

cmpact1,0

jeexit;如果为空直接退出程序

a10:

输入Sentence并判断

leadx,change

movah,09

int21h;输出回程,换行

leadx,mess2

movah,09

int21h;输出EnterSentence:

leadx,stoknin2

movah,0ah

int21h;用21号中段的0ah号功能获取句子

moval,act1

cbw

movcx,ax;保存关键字长度到cx

pushcx;cx入栈

moval,act2

cmpal,0

jea50;保存句子长度到al,若句子为空则跳转显示notmatch

subal,act1

jsa50;若句子长度小于关键字长度,则跳转显示notmatch

incal

cbw

leabx,stokn2;将句子的首地址放进BX

movdi,0

movsi,0

a20:

;比较,内循环

movah,[bx+di]

cmpah,stokn1[si]

jnea30

incdi

incsi

deccx

cmpcx,0

jea40

jmpa20

a30:

;外循环,BX+1,清空si,di继续内循环比较

incbx

decal

cmpal,0

jea50

movdi,0

movsi,0

popcx

pushcx

jmpa20

a40:

;match,将bx减去句子的首地址加一得到关键字所在位置,调用二进制转十六进制子函数将位置输出

subbx,offsetstokn2

incbx

leadx,change

movah,09

int21h

leadx,mess3

movah,09

int21h

callbtoh

leadx,mess5

movah,09

int21h

jmpa10

btohprocnear;二进制转换十六进制

movch,4

rotate:

movcl,4

rolbx,cl

moval,bl

andal,0fh

addal,30h

cmpal,3ah

jlprintit

addal,7h

printit:

movdl,al

movah,2

int21h

decch

jnzrotate

ret

btohendp

(4)实验结果(实验的运行结果)

 

实验三分类统计字符的个数

(1)设计思路(包括程序的原理,算法及数据结构等)

(2)程序框图(画出程序主要部分流程图)

(3)程序实现(注意:

不用写出整体程序,写出部分关键代码即可,不要粘贴大量代码,代码后要求用文字描述代码完成的功能)

(4)实验结果(实验的运行结果)

 

实验四查找电话号码

(1)设计思路(包括程序的原理,算法及数据结构等)

(2)程序框图(画出程序主要部分流程图)

(3)程序实现(注意:

不用写出整体程序,写出部分关键代码即可,不要粘贴大量代码,代码后要求用文字描述代码完成的功能)

DATASSEGMENT

;此处输入数据段代码

nameparlabelbyte

maxnlendb21

actnlendb?

_namedb21dup(?

);在MASM5.0下不能用name哦

phoneparlabelbyte

maxplendb9

actplendb?

phonedb9dup(?

crlfdb13,10,'$'

endaddrdw?

mess1db'Inputname:

','$'

mess2db'Inputatelephonenumber:

','$'

mess3db'Doyouwantatelephonenumber?

(Y/N)','$'

mess4db'name?

','$'

mess5db'name',16dup(''),'tel',0dh,0ah,'$'

mess6db'Notinthetable.',0dh,0ah,'$'

mess7db'Invalidinput!

',0dh,0ah,'$'

countdb0

tel_tabdb50dup(20dup(''),8dup(''))

tempdb20dup(''),8dup(''),0dh,0ah,'$'

swappeddb0

DATASENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

CODESSEGMENT

mainprocfar

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

pushds

subax,ax

pushax

MOVAX,DATAS

MOVDS,AX

moves,ax

cld

leadi,tel_tab;di中存放表首地址

;此处输入代码段代码

inputloop:

;提示'Inputname'

movah,09h

leadx,mess1

int21h

;

callinput_name

cmpactnlen,0;没有输入人名时

jza10;直接跳到提示是否查找的地方

cmpcount,50;输入上限

jea10

callstor_name;保存人名到tel_tab

;提示'Inputatelephonenumber'

movah,09h

leadx,mess2

int21h

;

callinput_stor_phone;输入并保存电话号码

jmpinputloop

a10:

cmpcount,1

jbesearchloop;如果没有输入或者输入一个

callname_sort;排序

searchloop:

leadx,mess3

movah,09h

int21h

movah,01h

int21h

cmpal,'N'

jeexit

cmpal,'n'

jeexit

cmpal,'Y'

jeshowname

cmpal,'y'

jeshowname

movah,09

leadx,crlf

int21h

leadx,mess7;非法输入

movah,09h

int21h

jmpsearchloop

showname:

movah,09

leadx,crlf

int21h

leadx,mess4;当输入Y时,显示'name?

'

movah,09

int21h

callinput_name;输入要查找的人名

callname_search;查找

callprintline

jmpsearchloop

exit:

ret

mainendp

;******************************************************

input_nameprocnear

movah,0ah

leadx,namepar

int21h

movah,02h

movdl,0ah;换行

int21h

movbh,0

movbl,actnlen

movcx,21

subcx,bx

i20:

mov_name[bx],20h

incbx

loopi20

ret

input_nameendp

;*********************************************************

stor_nameprocnear

inccount

cld

leasi,_name

movcx,10;把name中的前20个字符放入tel_tab中每一个人信息的前20个byte中

repmovsw

ret

stor_nameendp

;*****************************************************

input_stor_phoneprocnear

movah,0ah

leadx,phonepar

int21h

movah,02h

movdl,0ah;换行

int21h

movbh,0

movbl,actplen

movcx,9

subcx,bx;计算剩下的长度

is20:

movphone[bx],20h;剩下的地方填充空格

incbx

loopis20

cld

leasi,phone

movcx,4;把phone中的前8个字符放入tel_tab中每一个人信息的后8个byte中

repmovsw

ret

input_stor_phoneendp

;*****************************************************************

name_sortprocnear

subdi,56;仔细想想为什么是这样的

movendaddr,di

ns10:

movswapped,0

leasi,tel_tab

ns20:

movcx,20

movdi,si

adddi,28;下一个被比较的名字

movax,di

movbx,si

repecmpsb

jbens30;小于或等于不用交换

callnpxchg

ns30:

movsi,ax

cmpsi,endaddr

jbens20

cmpswapped,0

jnzns10

ret

name_sortendp

;*****************************************************

npxchgprocnear

movcx,14

leadi,temp

movsi,bx

repmovsw;moveloweritemtosave

movcx,14

movdi,bx

repmovsw

movcx,14

leasi,temp

repmovsw

movswapped,1

ret

npxchgendp

;************************************************************

disp_allprocnear

movah,09h

leadx,mess5

int21h

leasi,tel_tab

da10:

leadi,temp

movcx,14

repmovsw

movah,09h

leadx,temp

int21h

deccount

jnzda10

ret

disp_allendp

;*********************************************

name_searchprocnear

leasi,tel_tab

movbx,si

addendaddr,28

nase10:

leadi,_name;存放待查找的人名地址

movcx,10

repecmpsw

jcxznase_exit;相等

addbx,28;表中下一个比较的人名

movsi,bx

cmpsi,endaddr

jbenase10

notintab:

movcx,-1

ret

nase_exit:

movsi,bx

leadi,temp

movcx,14

repmovsw

ret

name_searchendp

;*******************************************************

printlineprocnear

cmpcx,-1

jenorecord

movah,09h

leadx,mess5

int21h

movah,09h

leadx,temp

int21h

ret

norecord:

movah,09h

leadx,mess6

int21h

ret

printlineendp

MOVAH,4CH

INT21H

CODESENDS

ENDmain

(4)实验结果(实验的运行结果)

三、课程设计(综合实验)总结或结论

这是我第一次使用汇编语言编程,因为程序是给出的所以运行成功。

我练习了使用DEBUG有关命令的使用方法。

虽然比较难理解

四、参考文献

注意:

要求打印,不要相互抄袭

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 法学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2