课程设计综合实验报告书科院模版_第1页
课程设计综合实验报告书科院模版_第2页
课程设计综合实验报告书科院模版_第3页
课程设计综合实验报告书科院模版_第4页
课程设计综合实验报告书科院模版_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、科 技 学 院课程设计(综合实验)报告( 2010 - 2011 年度第 1 学期)名 称:汇编语言程序设计课程设计 题 目:查找匹配字符串院 系: 信息工程系 班 级: 学 号: 学生姓名: 指导教师: 设计周数: 一 周 成 绩: 日期:2010年 12 月 10 日一、课程设计的目的与要求 实验一 比较字符串sample熟悉debug有关命令的使用方法; 利用debug掌握有关指令的功能;利用debug运行简单的程序段。 进入和退出debug程序; 学会debug中的d命令、e命令、r命令、t命令、a命令、g命令等的使用。对于u命令、n命令、w命令等,也应试一下; 利用debug,验证乘

2、法、除法、加法、减法、带进位加、带借位减、堆栈操作指令、串操作指令的功能。编写一个程序:比较两个字符串string1和string2所含的字符数是否相同。若相同则显示math,否则,显示no math;要求编写程序,并汇编,连接,运行,然后使用debug调试该程序。实验二 查找匹配字符串程序接受用户键入的一个关键字以及一个句子。如果句子中不含关键字则显示no math;如果句子中包含关键字则显示math,且把该字在句子中的位置用十六进制数显示出来。实验三 分类统计字符的个数程序接收用户键入的一行字符(用回车符结束),并按字母,数字及其他字符分类计数,然后将结果存入以letter,digit和o

3、ther为名的存储单元中。实验四 查找电话号码41 要求程序建立一个可存50项的电话号码表,每项包括人名及电话号码两部分;42 程序可接受输入人名及相应的电话号码,并把他们加入到电话号码表中;43 凡有新的输入后,程序应按人名对电话号码表重新排序;44 程序可接受需要查找电话号码的人名,并从电话号码表中查出其电话号码,再在屏幕上显示出来。实验五 屏幕窗口程序在屏幕上开出三个窗口,它们的行列坐标如下图所示。(5,10)(15,30)(5,50)(15,70)(18,15)(22,65)光标首先定位在右窗口最下面一行的行首(15,50),如果从键盘输入字符,则显示在右窗口,同时也显示在下窗口的最下

4、面一行。若需要将字符显示于左窗口,则先按下左键,接着再从键盘输入字符,字符就会从左窗口的最下行开始显示,同时下窗口也显示左窗口的内容。当一行字符显示满后,窗口自动向上卷动一行,输入字符继续显示于最低一行,窗口最高一行向上卷动后消失。实验六 扩充键盘处理功能在完成键盘处理基本功能的基础上,增加left_shift 和 right_shift键的功能。要求实现左右shift任何一个键处于按下状态时输入字符为键盘的上档字符或大写字母,否则输出数字或小写字母。二、设计(实验)正文实验一 比较字符串sample(1)设计思路将两个字符串通过lea指令放入si和di中,用指令repz取字符串的首地址开始比

5、较, repz表示在cx不为0时,且zf1重复执行后面的串处理指令cmps。如果不同选择not match输出,否则输出match。repz cmpsbjz matchjmp not match(2)程序框图输入比较字符串将字符串分别放入si和di比较si和di内的字符串是否相同输出match结束输出not match(3)程序实现lea si,string1lea di,string2 /*分别放入字符串于si和 di*/cld /*规定字符串于si和 di的比较方向*/mov cx,25 /*设置字符串比较次数*/repz cmpsb /*循环比较字符串*/jz match /*字符串相同

6、跳转*/lea dx,mess2jmp short disp /*字符串不相同无条件跳转*/match:lea dx,mess1disp:mov ah,09 /*输出结果*/int 21hmov ah,4chint 21h(4)实验结果(实验的运行结果)实验二 查找匹配字符串(1)设计思路(包括程序的原理,算法及数据结构等)(2)程序框图(画出程序主要部分流程图)nyyy输入关键字结束关键字长度=0输入句子句子长度<关键字长度y保存关键字长度到cx,cx入栈,保存总循环次数(句子长度-关键字长度+1)到al,将句子的首地址放进bx(作为基址寄存器) si=di=0(变址寄存器)开始比较b

7、x+di与si是否相等si+1,di+1,cx-1(同时指向下一个字符)ynbx+1(句子指向下一个字符) cx出栈,再入栈,si,di清零,al-1cx是否为0n匹配完成,调用子程序输出al是否为0不匹配,输出(3)程序实现 lea dx,mess1 mov ah,09 int 21h ;输出enter keyword lea dx,stoknin1 mov ah,0ah ;用21号中段的0ah号功能获取关键字 int 21h cmp act1,0 je exit ;如果为空直接退出程序a10: 输入sentence并判断 lea dx,change mov ah,09 int 21h ;输

8、出回程,换行 lea dx,mess2 mov ah,09 int 21h ;输出enter sentence: lea dx,stoknin2 mov ah,0ah int 21h ;用21号中段的0ah号功能获取句子 mov al,act1 cbw mov cx,ax ;保存关键字长度到cx push cx ;cx入栈 mov al,act2 cmp al,0 je a50 ;保存句子长度到al,若句子为空则跳转显示not match sub al,act1 js a50 ;若句子长度小于关键字长度,则跳转显示not match inc al cbw lea bx,stokn2 ;将句子的

9、首地址放进bx mov di,0 mov si,0a20: ;比较,内循环mov ah,bx+dicmp ah,stokn1sijne a30inc diinc sidec cxcmp cx,0je a40jmp a20a30: ;外循环,bx+1,清空si,di继续内循环比较 inc bx dec al cmp al,0 je a50 mov di,0 mov si,0 pop cx push cx jmp a20a40: ; match,将bx减去句子的首地址加一得到关键字所在位置,调用二进制转十六进制子函数将位置输出 sub bx,offset stokn2 inc bx lea dx,

10、change mov ah,09 int 21h lea dx,mess3 mov ah,09 int 21h call btoh lea dx,mess5 mov ah,09 int 21h jmp a10 btoh proc near ;二进制转换十六进制mov ch,4rotate: mov cl,4rol bx,clmov al,bland al,0fhadd al,30hcmp al,3ahjl printitadd al,7h printit:mov dl,almov ah,2int 21hdec chjnz rotate ret btoh endp(4)实验结果(实验的运行结果)

11、实验三 分类统计字符的个数(1)设计思路(包括程序的原理,算法及数据结构等)(2)程序框图(画出程序主要部分流程图)(3)程序实现(注意:不用写出整体程序,写出部分关键代码即可,不要粘贴大量代码,代码后要求用文字描述代码完成的功能)(4)实验结果(实验的运行结果)实验四 查找电话号码(1)设计思路(包括程序的原理,算法及数据结构等)(2)程序框图(画出程序主要部分流程图)(3)程序实现(注意:不用写出整体程序,写出部分关键代码即可,不要粘贴大量代码,代码后要求用文字描述代码完成的功能)datas segment ;此处输入数据段代码 namepar label bytemaxnlen db 2

12、1actnlen db ?_name db 21 dup(?) ;在masm5.0下不能用name哦phonepar label bytemaxplen db 9actplen db ?phone db 9 dup(?)crlf db 13,10,'$'endaddr dw ?mess1 db 'input name:','$'mess2 db 'input a telephone number:','$'mess3 db 'do you want a telephone number?(y/n)'

13、,'$'mess4 db 'name?','$'mess5 db 'name',16 dup(' '),'tel',0dh,0ah,'$'mess6 db 'not in the table.',0dh,0ah,'$'mess7 db 'invalid input!',0dh,0ah,'$'count db 0tel_tab db 50 dup(20 dup(' '),8 dup(' ')

14、temp db 20 dup(' '),8 dup(' '),0dh,0ah,'$'swapped db 0 datas endsstacks segment ;此处输入堆栈段代码stacks endscodes segmentmain proc far assume cs:codes,ds:datas,ss:stacks push ds sub ax,ax push ax mov ax,datas mov ds,ax mov es,ax cld lea di,tel_tab ;di中存放表首地址 ;此处输入代码段代码 inputloop: ;提

15、示'input name' mov ah,09h lea dx,mess1 int 21h ; call input_name cmp actnlen,0 ;没有输入人名时 jz a10 ;直接跳到提示是否查找的地方 cmp count,50 ;输入上限 je a10 call stor_name ;保存人名到tel_tab ;提示'input a telephone number' mov ah,09h lea dx,mess2 int 21h ; call input_stor_phone ;输入并保存电话号码 jmp inputloopa10: cmp c

16、ount,1 jbe searchloop ;如果没有输入或者输入一个 call name_sort ;排序searchloop: lea dx,mess3 mov ah,09h int 21h mov ah,01h int 21h cmp al,'n' je exit cmp al,'n' je exit cmp al,'y' je showname cmp al,'y' je showname mov ah,09 lea dx,crlf int 21h lea dx,mess7 ;非法输入 mov ah,09h int 21h

17、 jmp searchloopshowname: mov ah,09 lea dx,crlf int 21h lea dx,mess4 ;当输入y时,显示'name?' mov ah,09 int 21h call input_name ;输入要查找的人名 call name_search ;查找 call printline jmp searchloop exit: retmain endp;*input_name proc near mov ah,0ah lea dx,namepar int 21h mov ah,02h mov dl,0ah ;换行 int 21h mov

18、 bh,0 mov bl,actnlen mov cx,21 sub cx,bxi20: mov _namebx,20h inc bx loop i20 retinput_name endp ;*stor_name proc near inc count cld lea si,_name mov cx,10 ;把name中的前20个字符放入tel_tab中每一个人信息的前20个byte中 rep movsw retstor_name endp ;* input_stor_phone proc near mov ah,0ah lea dx,phonepar int 21h mov ah,02h

19、mov dl,0ah ;换行 int 21h mov bh,0 mov bl,actplen mov cx,9 sub cx,bx ;计算剩下的长度is20: mov phonebx,20h ;剩下的地方填充空格 inc bx loop is20 cld lea si,phone mov cx,4 ;把phone中的前8个字符放入tel_tab中每一个人信息的后8个byte中 rep movsw retinput_stor_phone endp ;*name_sort proc near sub di,56 ;仔细想想为什么是这样的 mov endaddr,dins10: mov swappe

20、d,0 lea si,tel_tabns20: mov cx,20 mov di,si add di,28 ;下一个被比较的名字 mov ax,di mov bx,si repe cmpsb jbe ns30 ;小于或等于不用交换 call npxchgns30: mov si,ax cmp si,endaddr jbe ns20 cmp swapped,0 jnz ns10 ret name_sort endp;*npxchg proc near mov cx,14 lea di,temp mov si,bx rep movsw ;move lower item to save mov cx,14 mov di,bx rep movsw mov cx,14 lea si,temp rep movsw mov swapped,1 ret npxchg endp;*disp_all proc near mov ah,09h lea dx,mess5 int 21h lea si,tel_tabda10: lea di,temp mov cx,14 re

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论