汇编实验报告(共28页).doc

上传人:飞****2 文档编号:14106874 上传时间:2022-05-02 格式:DOC 页数:28 大小:209KB
返回 下载 相关 举报
汇编实验报告(共28页).doc_第1页
第1页 / 共28页
汇编实验报告(共28页).doc_第2页
第2页 / 共28页
点击查看更多>>
资源描述

《汇编实验报告(共28页).doc》由会员分享,可在线阅读,更多相关《汇编实验报告(共28页).doc(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上科 技 学 院综合实验报告( 2014 - 2015 年度第 一 学期)名 称: 汇编语言程序设计综合实验 题 目: 汇编综合实验 院 系: 班 级: 学 号: 学生姓名: 指导教师: 设计周数: 成 绩: 日期: 2015 年 1 月 4 日专心-专注-专业汇编语言程序设计综合实验任 务 书一、 目的与要求通过本门课程的学习与实践,学生可以加深对汇编语言程序设计课程的理解与掌握,有助于提高学生的汇编语言程序设计能力,同时可以加深对计算机工作原理的理解,有助于促进后续课程的学习。本课程要求学生针对课本所学知识从调试程序、循环程序设计、分支程序设计、子程序设计、显示器I

2、O程序设计、键盘输入程序设计和中断练习程序等七个实验进行学习和实践,使学生对汇编语言有更深入、细致和全面的了解,并能用所学知识解决实际问题。要求有设计说明,画出程序流程图,然后根据流程图编写程序,并上机调试写出运行结果。二、 主要内容1 比较字符串sample(学习)、用表格形式显示字符比较字符串sample:比较两个字符串string1和string2所含的字符数是否相同。若相同则显示match,否则显示no match;要求编写程序,并汇编,连接,运行,然后使用Debug调试该程序。 用表格形式显示字符:按15行*16列的表格形式显示ASCII码为10H-100H的所有字符,即以行为主的顺

3、序及ASCII码递增的次序依次显示对应的字符。每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCII为0)隔开。2 查找匹配字符串程序接受用户键入的一个关键字以及一个句子。如果句子中不含关键字则显示no match;如果句子中包含关键字则显示match,且把该字在句子中的位置用十六进制数显示出来。3 分类统计字符的个数程序接收用户键入的一行字符(用回车符结束),并按字母,数字及其他字符分类计数,然后将结果存入以letter,digit和other为名的存储单元中。4 查找电话号码要求程序建立一个可存50项的电话号码表,每项包括人名及电话号码两部分;程序可接受输入人名及相应的电话号码,

4、并将其保存至电话号码表中;当有新的输入后,程序应按人名对电话号码表重新排序;程序可接受键盘输入人名并查找电话号码,再在屏幕上显示出来。5 屏幕窗口程序在屏幕上开出三个窗口,它们的行列坐标如下图所示。(5,10)(15,30)(5,50)(15,70)(18,15)(22,65)光光标首先定位在右窗口最下面一行的行首(15,50),如果从键盘输入字符,则显示在右窗口,同时也显示在下窗口的最下面一行。若需要将字符显示于左窗口,则先按下左键,接着再从键盘输入字符,字符就会从左窗口的最下行开始显示,同时下窗口也显示左窗口的内容。当一行字符显示满后,窗口自动向上卷动一行,输入字符继续显示于最低一行,窗口

5、最高一行向上卷动后消失。6 扩充键盘处理功能(选做)在完成键盘处理基本功能的基础上,增加left_shift 和 right_shift键的功能。要求实现左右SHIFT任何一个键处于按下状态时输入字符为键盘的上档字符或大写字母,否则输出数字或小写字母。三、 进度计划序号设计内容完成时间备注1比较字符串sample(学习)用表格形式显示字符周一2查找匹配字符串周二3分类统计字符的个数周三4查找电话号码周四5屏幕窗口程序(选做)6扩充键盘处理功能(选做)注:其中第1-4个实验根据进度在1月4日之前验收即可;学有余力的同学可选做第5、6题。四、设计成果要求1. 以上实验要求首先画出程序流程图,然后根

6、据流程图编写程序并上机调试,教师将验收实验结果。2. 课程设计报告:完成上机题目后,应认真撰写上机综合实验报告,报告内容包括: 上机题目及要求; 设计说明:完成的功能、整体设计思想及使用的算法; 设计的程序流程框图和主要数据结构; 上机题目完成的情况,输入的典型代码数据和运行结果; 存在的问题及解决方法设想; 上机实验的心得体会。五、 考核方式依据进度计划,完成综合实验内容,并向老师讲解所完成任务的功能、思想、使用算法及主要程序流程,老师提出问题,提交综合实验报告。成绩评定方法:现场考查+验收+综合实验报告 学生姓名: 指导教师: 2014 年 12 月 23 日实验一:用表格形式显示字符一、

7、综合实验的目的与要求按15*16列的表格形式显示ASC码为10H100H的所有字符,即以行为主的顺序及ASC码递增的次序依次显示对应的字符。每16个字符为一行,每行中的相邻两个字符之间用空白符隔开。二、实验正文CODES SEGMENT;*main proc far ASSUME CS:CODESSTART: push ds sub ax,ax push ax mov di,15 mov dl,10hloo: mov cx,16next: mov ah,02h int 21h inc dl push dx mov dl,0 mov ah,02h int 21h pop dx loop next

8、 push dx mov dl,0dh mov ah,02hint 21h mov dl,0ah mov ah,02h int 21h pop dx dec di jne loo je exit exit: ret main endp CODES ENDS END START三、综合实验总结或结论四、参考文献 1, 作者:沈美明 温东婵2. 书名:IBM-PC汇编语言程序设计 3出版单位:清华大学出版社 4版本:第二版 5出版日期:2001年附录(设计流程图、程序、表格、数据等)(1) 显示每个字符可使用功能号为02的显示输出功能调用: Mov ah,02h Mov dl,输出字符的ASC码

9、Int 21h 将dl初始化为10H,然后使用其加1以取得下一个字符的ASC码。(2) 显示空白符是,用其ASC码置0入dl寄存器。每行结束时,用回车和换行来结束本行并开始下一行。(3) 由于逐个显示相继的ASC码字符是,需要不断修改dl寄存器的内容,而显示空白、回车、换行也需要使用dl寄存器,为此可使用堆栈保存dx。实验二:查找匹配字符串一、综合实验的目的与要求程序接受用户键入的一个关键字以及一个句子,如果句子中不包含关键字则显示“No match!”;如果句子中包含关键字则显示“match!”,且把该字在句子中的位置用十六进制数显示出来。要求程序的执行过程如下:Enter keyword:

10、abcEnter sentence:we are studying abcMatch at location:11H of the sentenceEnter sentence:xyzNo match!Enter sentence:二、实验正文DATAS SEGMENT para data mess1 db match!,13,10,$ mess2 db no match!,13,10,$ mess3 db enter keyword:,$ mess4 db enter sentence:,$ mess5 db match at location:,$ mess6 db H of the se

11、ntence,$ stoknim label byte max db 10 act db ? stokn db 10 dup(?) sentence label byte ma db 100 ac db ? sto db 100 dup(?)DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDS;*CODES SEGMENT para code ASSUME CS:CODES,DS:DATAS,es:datasmain proc farSTART: push ds sub ax,ax push ax MOV AX,DATAS MOV DS,AX mov e

12、s,ax;*输入关键字和一个句子*k: lea dx,mess3 mov ah,09 int 21h ; 显示字符串enter word lea dx,stoknim mov ah,0ah int 21h ;输入关键字到缓冲区Word push dx mov dl,0dh mov ah,02h int 21h mov dl,0ah mov ah,02h int 21h ;回车换行 pop dxd: lea dx,mess4 mov ah,09 int 21h ;显示字符串enter sentence lea dx,sentence mov ah,0ah int 21h ;输入句子到缓冲区sen

13、tence push dx mov dl,0dh mov ah,02h int 21h mov dl,0ah mov ah,02h int 21h ;回车换行 pop dx;*比较查找信息* lea si,stoknim ;si指向关键字 lea di,sentence ;di指向句子 mov ax,0 mov bl,1 ;初始化bx mov cl,0 ;初始化外循环计数单元 mov al,act mov ah,ac sub ah,al add ah,1 mov cl,ah ;cl中循环次数 cmp cl,0 je nomatcha: push cx mov cl,al repnz cmpsb

14、 jz match sub di,1 sub si,2 add bl,1 pop cx dec cl cmp cl,0 jne a je nomatch;*输出信息*match: lea dx,mess1 mov ah,09h int 21h ;显示match push dx mov dl,0dh mov ah,02h int 21h mov dl,0ah mov ah,02h int 21h ;回车换行 pop dx lea dx,mess5 mov ah,09h int 21h ;显示match at location mov al,bl and al,0fh add al,30h cmp

15、 al,3ah jl p add al,7h p: mov dl,al mov ah,02h int 21h lea dx,mess6 mov ah,09h int 21h push dx mov dl,0dh mov ah,02h int 21h mov dl,0ah mov ah,02h int 21h ;回车换行 pop dx jmp wernomatch: lea dx,mess2 mov ah,09h int 21h ;显示no match push dx mov dl,0dh mov ah,02h int 21h mov dl,0ah mov ah,02h int 21h ;回车换

16、行 pop dxwer: jmp d main endpCODES ENDS END START三、综合实验总结或结论四、参考文献 1, 作者:沈美明 温东婵2. 书名:IBM-PC汇编语言程序设计 3出版单位:清华大学出版社 4版本:第二版 5出版日期:2001年附录(设计流程图、程序、表格、数据等)程序由三部分组成:(1) 输入关键字和一个句子,分别存入相应的缓冲区中。(2) 在句子中查找关键字(3) 输出信息。用功能调用09h分找到和未找到两种情况分别显示不同的信息。在“找到”时,显示关键字在字符串中位置。实验三:分类统计字符个数一、综合实验的目的与要求程序接受用户键入一行字符(字符个数

17、不超过80个,该字符串用回车符结束),并按字母、数字、其它字符分类计数,然后将结果存入以letter、digit和other为名的存储单元中。二、实验正文datarea segmenttou db enter word ,13,10,$letter db letter:,$number db number:,$other db other:,$datarea ends;*codes segmentmain proc farassume cs:codes,ds:datareastart:push dssub ax,axpush axmov ax,datareamov ds,ax mov bx,0

18、 mov cx,0 mov di,0 lea dx,tou mov ah,09h int 21h input: mov ah,1 int 21h cmp al,0dh je disp cmp al,30h jae n1 o: inc di jmp short inputn1: cmp al,39h ja n2 inc cx jmp short inputn2: cmp al,41h jae n3 jmp on3: cmp al,5ah ja n4 inc bx jmp short input n4: cmp al,61h jae n5 jmp short on5: cmp al,7ah ja

19、short o inc bx jmp short input disp: push ax mov dl,0dh mov ah,09h int 21h mov dl,0ah mov ah,09h int 21h pop ax lea dx,letter push ax mov ah,09h int 21h pop ax call binihex push ax mov dl,0dh mov ah,09h int 21h mov dl,0ah mov ah,09h int 21h pop ax lea dx,number push ax mov ah,09h int 21h pop ax mov

20、bx,cx call binihex push ax mov dl,0dh mov ah,09h int 21h mov dl,0ah mov ah,09h int 21h pop ax lea dx,other mov ah,09h int 21h mov bx,di call binihex push ax mov dl,0dh mov ah,09h int 21h mov dl,0ah mov ah,09h int 21h pop axretmain endp;*binihex proc near push cx push ax push dx mov ch,4rotate: mov c

21、l,4 rol bx,cl mov dl,bl and dl,0fh add dl,30h cmp dl,3ah jl printin add dl,07hprintin: mov ah,02h int 21h dec ch jnz rotate pop dx pop ax pop cx retbinihex endpcodes endsend start三、综合实验总结或结论四、参考文献 1, 作者:沈美明 温东婵2. 书名:IBM-PC汇编语言程序设计 3出版单位:清华大学出版社 4版本:第二版 5出版日期:2001年附录(设计流程图、程序、表格、数据等)(1) 程序可采用01H功能调用把

22、键入字符先分类计数再存入缓冲区中。(2) 程序进入debug运行并查看计数结实验四:查找电话号码一、综合实验的目的与要求(1) 要求程序建立一个可存放50项的电话号码表,每项包括人名及电话号码两部分;(2) 程序可接受输入人名及相应的电话号码,并把它们加入电话号码表中;(3) 凡有新的输入后,程序可按人名对电话号码表重新排序;(4) 程序可接受需要查询电话号码的人名,并从电话号码表中查出其电话号码,再在屏幕上以如下格式显示出来。 Name tel 二、实验正文dataseg segment namepar label byte maxnlen db 21 actnlen db ? _name

23、db 21 dup(?) phonepar label byte maxplen db 9 actplen db ? phone db 9 dup(?) crlf db 13,10,$ endaddr dw ? mess1 db enter name:,$ mess2 db enter a telephone number:,$ mess3 db Do you want a telephone number?(Y/N),$ mess4 db name?,$ mess5 db name,16 dup( ),tel,0dh,0ah,$ mess6 db Not in the table.,0dh,

24、0ah,$ mess7 db Invalid input!,0dh,0ah,$ count db 0 tel_tab db 50 dup(20 dup( ),8 dup( ) temp db 20 dup( ),8 dup( ),0dh,0ah,$ swapped db 0dataseg ends;*codeseg segmentmain proc far assume cs:codeseg,ds:dataseg,es:datasegstart: push ds sub ax,ax push ax mov ax,dataseg mov ds,ax mov es,ax; cld lea di,t

25、el_tab ;di中存放表首地址inputloop: mov ah,09h lea dx,mess1 int 21h call input_name cmp actnlen,0 ;没有输入人名时 jz a1 ;直接跳到提示是否查找的地方 cmp count,50 ;输入上限 je a1 call stor_name ;保存人名到tel_tab mov ah,09h lea dx,mess2 int 21h call input_stor_phone ;输入并保存电话号码 jmp inputloopa1: cmp count,1 jbe searchloop ;如果没有输入或者输入一个 cal

26、l name_sort ;排序 call disp_all ;显示所有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 jmp searchloopshowname: mov ah,09 lea dx,crlf int 21h lea

27、dx,mess4 ;当输入Y时,显示name? mov ah,09 int 21h call input_name ;输入要查找的人名 call name_search ;查找 call printline jmp searchloop exit: ret main endp;*input_name proc near mov ah,0ah lea dx,namepar int 21h ;输入名字 mov dl,0ah mov ah,02h int 21h ;换行 mov bh,0 ;bx高位置0 mov bl,actnlen ;bx低位置输入名字个数 mov cx,21 sub cx,bx

28、;计算剩下的长度i1: mov _namebx,20h inc bx loop i1 ;把bx之后剩下的填充空格 retinput_name endp ;*stor_name proc near inc count ;有人名输入所以个数加1 cld lea si,_name ;把si指向刚才输入名字的位置 mov cx,10 ;把name中的前20个字符放入tel_tab中每一个人信息的前20个byte中 rep movsw ;把si所指名字赋值给di所指地方tel_tab retstor_name endp ;* input_stor_phone proc near mov ah,0ah l

29、ea dx,phonepar int 21h ;把电话号码存入phonrpar mov ah,02h mov dl,0ah ;换行 int 21h mov bh,0 mov bl,actplen mov cx,9 sub cx,bx ;计算剩下的长度s2: mov phonebx,20h ;剩下的地方填充空格 inc bx loop s2 cld lea si,phone ;再把名字放入之后di就已经移动到名字之后了 mov cx,4 ;把phone中的前8个字符放入tel_tab中每一个人信息的后8个byte中 rep movsw retinput_stor_phone endp ;*nam

30、e_sort proc near sub di,56 mov endaddr,din1: mov swapped,0 lea si,tel_tabn2: mov cx,20 mov di,si add di,28 ;下一个被比较的名字 mov ax,di mov bx,si repe cmpsb ;比较20次 jbe n3 ;小于或等于不用交换 call npxchgn3: mov si,ax cmp si,endaddr jbe n2 cmp swapped,0 jnz n1 ret name_sort endp;*npxchg proc near mov cx,14 ;交换名字和电话号码

31、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_tabd1: lea di,temp mov cx,14 rep movsw mov ah,09h lea dx,temp int 21h dec count jnz d1 ret disp_all endp ;*

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁