




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机应用综合实验报告姓名:侯庆华 . 卢泳君学号:201232010615 . 201232010616班级:2012320106撰写时间:2015.1.15一 程序一,输入自然数并计算加法1. 需求分许程序运行以后, 提示用户输入一个自然数, 用户输入并回车后提示用户输入第二个自然数, 用户回车后, 计算并显示两数的和.2. 技术路线(打算通过什么手段来完成这些功能利用DOS中断来接收用户输入的字符,并判断这些字符是否为数字,若为数字则继续程序,反之让用户继续输入直到输入的字符是数字为止,然后照此方法继续输入第二个字符,并判断之,最后进行两个数相加并将结果输出。3. 流程图与结构图(结构图反映系统是如何进行模块划分的初始化用DOS中断接收用户键入字符记录该数字是否为数字是否为数字输入第二个字符两数相加并输出结果NYNY4. 测试(采用了哪些测试样例, 这些样例是怎么设计出来的, 调试过程中都遇见了什么问题, 是如何解决的)通过论证取两个个位数相加和仍为个位数,再去两个数相加得十位数,最后测试和的范围。二 程序二,打字练习1. 需求分析在屏幕上显示若干字母, 要求用户依次输入这些字母, 当用户输入了和显示的字母一样的字母时, 该字母变成一种颜色, 输入错误, 该字母变成另外一种颜色. 最后统计正确率和用时.2. 技术路线首先设定三个字符串分别存放用户输入字符的花费时间和正确率,还有系统给定的模板字符,为计算方便初始调试设定为10个字符,利用DOS中断来处理用户输入数据,接收过程中与给定数据相比较,若用户输入不同于给定字符则认为输入错误,用户输入字符将变为红色并显示于屏幕上,若输入字符与给定字符相同则认为输入正确,屏幕上将显示绿色用户输入字符。输入完成后再次调用DOS获取当前时间,并计算用户输入时间和正确率。3. 流程图与结构图初始化:设定一定数量字符处变量,并赋0,利用DOS中断获取当前系统时间 获取用户输入的字符与系统给定字符进行比较字符显示为绿色字符显示为红色记下输入正确字符个数是否完成输入获取完成时间,及正确率的计算。以一定格式输出YNNY4. 测试目前为测试方便紧编写了十个字符的“打字练习”程序,如需修改字符个数可在程序开头的目标字符处修改,相关测试界面如下所示三 程序三,枪打小鸟1. 需求分析屏幕上从下到上不断自动的有若干小鸟飞过, 屏幕左方或右方有一杆枪, 可以用键盘控制枪上下移动以及开火, 开火后可以看到子弹的飞行,当子弹击中小鸟后, 显示击中并发出声音.2. 技术路线调用INT21的9号功能显示界面,用INT16功能判断是否有键盘按下及是否有左右键按下并调整枪与小鸟的显示,用BIOS的INT10 功能显示小鸟和枪,判断子弹和小鸟的列值是否相等并修改相应的得分3. 流程图与结构图按回车开始游戏显示鸟1,鸟2鸟与子弹列值相等让鸟向右移动左键按下让枪左移一格右键按下让枪右移一格空格按下画出子弹轨迹将score+2(得分)显示在左上角是否开始按下ESC游戏结束NYYNYNNYNY4. 测试程序测试结果如下,在测试过程中我们未能实现将鸟击中后鸟消失的现象,小鸟被击中后仍继续飞行,这是这个程序存在的问题四 程序四1. 需求分析,电子琴利用PC机的键盘与扬声器电路, 设计简易电子琴, 使PC机成为一架电子琴. 当按下数字键18时, 依次发出1, 2, 3, 4, 5, 6, 7, i八个音阶2. 技术路线主要调用INT21的9号功能来显示界面INT10 的1 号功能来设置光标INT16 检测是否有键盘按下,根据相应的按键写入电脑42H端口不同的频率值,然后设置61H端口的值实现电脑发声,完成了题目的功能。3. 流程图与结构图调用显示界面检测是否有按键按下esc键按下结束18键按下写入电脑相应端口频率,发出声音按键被放开延时关闭扬声器结束NYNYNYNY4. 测试测试时发现有些键没有声音,经过仔细排查,最终把问题解决,实现了题目要求的功能附程序源代码如下1.两数相加data segment string1 dbPlease input the first natural number,0dh,0ah,$string2 dbPlease input the second natural number,0dh,0ah,$string3 dbThe sum is ,$data endscode segmentassume cs :code ,ds:datastart: mov ax,datamov ds,axlea dx,string1mov ah,09hint 21h ;提示用户输入自然数mov ah,1int 21hmov bl,al ;输入第一个数并存在BL中mov ah,1int 21hcmp al,0dh ;判断是不是回车je yesjne noyes: lea dx,string2mov ah,09hint 21h no: ;mov ah,1int 21hmov bh,al ;输入第二个数并存在BH中sub bh,30hsub bl,30hadd bh,bladd bh,30h;mov dl,bh ;两个数的和放在dl中mov ah,1 int 21h cmp al,0dh ;判断是不是回车 lea dx,string3mov ah,09hint 21h ;输出结果是mov dl,bh ;两个数的和放在dl中 mov ah,2int 21h ; 输出结果 mov ah,4chint 21hcode endsend start2.打字练习dseg segmentSTRING3 DB 0DH,0AH,ABCDEFGHIJ,0DH,0AH,$STRING4 DB 0DH,0AH,correct rate:,$STRING5 DB 0DH,0AH,time:,$correct DB 30H;定义的一开始的正确数,30h为零inputword DB ABCDEFGHIJ ;先给inputword赋初值len db 0time1 DB 3 dup(0);存放时间timeOUTPUT DB 2 DUP(0),:, 2 DUP(0),:,2 DUP(0),$;存放输出时间格式dseg endscseg segmentassume CS:CSEG,DS:CSEGstart:MOV AX,DSEGMOV DS,AXlea dx,string3mov ah,09hint 21h ;*取开始输入的时间;开始,按下任意键之后读取当前的时间mov ah,07hint 21hmov ah,2ch ;2ch号功能调用,取系统时间:ch,cl,dh中分别存放时分秒 int 21h lea si,time1 ;把初始时间放在内村中,以时分秒的顺序mov si,ch inc simov si,cLinc simov si,dh ;*;游戏开始MOV CX,0AHnext: ;*用户输入循环计数的开始mov ah,2 ;置光标位置mov bh,0 ;mov dh,8 ;行号;从0开始的mov dl,len;列号,根据打字长度要移动int 10hmov ah,07h;输入打入的字母,无回显,保存在al中int 21h ;和正确的字符比较判断lea si,inputword;要输入的的字符串的首地址给sipush cx ;为了不破坏循环的cxxor cx,cxmov cl,lenadd si,cx ;改变指针到需要需要比较的字符pop cxcmp al,si ;比较 jz right ;如果是正确的跳到下面执行 *判断部分mov ah,9 ;改变属性显示字符* 若输入错误mov bh,0mov bl,0ch ;若输入错误则用户键入字符为红色mov al,al ;push cxmov cx,1 ;显示一次int 10h ;调用bios 10h中断jmp outr ;跳过下一段代码right: ; * 若输入正确mov ah,9mov bh,0mov bl,0Ah;用户键入字符为绿色 *这部分是通过查阅BIOS的INT 10 中断了解到的mov al,al ;al要显示的字符,push cxmov cx,1 ;显示一次int 10h ;调用bios 10h中断;统计正确的个数mov al,correct inc almov correct,aloutr: ;*统计模块;统计循环的次数,以便光标移动mov al,leninc almov len,al pop cxloop next;取结束时间mov ah,2ch ;2ch号功能调用,取系统时间:ch,cl,dh中分别存放时分秒 int 21h ;对打字结束的时间获得后,减去开始时间为打字所花时间;其中对其60进制转换lea si,time1ADD SI,2H ;指向秒cmp Dh,sijb lessSecondSUB Dh,si;相减后秒数给dhCLC PUSHFjmp setSecondlessSecond:stcPUSHFadd Dh,60SUB Dh,sisetSecond:MOV si,DHDEc si ;将si指向分钟cmp CL,sijb lessminPOPFSBB cl,siCLC PUSHFjmp setminlessmin:add cl,60POPFSBB cl,sistcPUSHFsetmin:MOV si,CLDEc si ;将si指向小时POPFSBB Ch,siMOV si,CH;对时间进行输出lea dx,STRING5mov ah,09hint 21h ;将小时转换成输出的格式LEA SI,time1lea DI,timeOUTPUTXOR AH,AHMOV AL,SIMOV BL,0AHDIV BLADD AL,30HMOV DI,ALINC DIINC SIADD AH,30HMOV DI,AH;将分钟转换成输出的格式INC DIINC DIXOR AH,AHMOV AL,SIMOV BL,0AHDIV BLADD AL,30HMOV DI,ALINC DIINC SIADD AH,30HMOV DI,AH;将秒数转换成输出的格式INC DIINC DIXOR AH,AHMOV AL,SIMOV BL,0AHDIV BLADD AL,30HMOV DI,ALINC DIADD AH,30HMOV DI,AH;将转换好的输出格式输出LEA dX,timeOUTPUTmov ah,09hint 21h;显示正确率lea dx,STRING4mov ah,09hint 21h mov dl,correctmov ah,02hint 21hCMP correct,3AHJNZ UNPREFECT ;如果全对的话就输出10,否则就跳过输出correct的值mov dl,08Hmov ah,02hint 21hmov dl,31Hmov ah,02hint 21hmov dl,30Hmov ah,02hint 21hUNPREFECT:;继续输出0%mov dl,30hmov ah,02hint 21hmov dl,%mov ah,02hint 21hMOV AH,4CHINT 21Hcseg endsend start3.枪打小鸟DATAS SEGMENT ;此处输入数据段代码 plane_buffer db 7 ;飞机数据缓冲区,用于画飞机 db 1eh,0fh,0,0 ;字符ASCII,字符属性,行偏移,列偏移 db 0dbh,0fh,1,0 db 3ch,0fh,0,-1 db 3eh,0fh,0,2 db 5ch,0fh,1,0 db 2fh,0fh,0,-2 db 7ch,0fh,0,1 bird_buffer db 3 ;小鸟数据缓冲区,用于画小鸟 db 0c4h,0fh,0,0 db 3eh,0fh,0,1 db 0c4h,0fh,0,1 bird_buffer2 db 3 ;第二只小鸟 db 0c4h,0fh,0,0 db 3eh,0fh,0,1 db 0c4h,0fh,0,1 amount dw 00;用于飞机的相关数据存储 line db 00 ;多少个部位,起始行列,字符缓冲区指针 column db 00 pointer dw 00 amount_bird dw 00;用于小鸟相关数据的存储 line_bird db 00 column_bird db 00 pointer_bird dw 00 amount_bird2 dw 00 line_bird2 db 00 column_bird2 db 00 pointer_bird2 dw 00 message db your score:,$ yourscore db 3 dup(0),$;分数的ASCII码,用于显示 yourscore_b db 00h;分数的二进制码,用于运算 ;用于画游戏开始菜单 message_welcome db * welcome *,$ message_operation db how to play:,$ message_operation1 db move:left and right direction key,$ message_operation2 db shoot:space bar,$ message_operation3 db Now,you can:,$ start_button db press Enter to start the game$ end_button db press Esc to quit(also in the game).$ message_end db *,$DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 ;选择80*25文本模式 mov ah,00 mov al,03 int 10h ;开始菜单 call help_view mov dh,22;显示飞机 mov dl,40 mov di,offset plane_buffer mov bh,00 call display mov dh,04;显示小鸟 mov dl,00 mov di,offset bird_buffer call display_bird mov dh,06 mov dl,20 mov di,offset bird_buffer2 call display_bird2 mov ah,02;显示分数提示 mov bh,00 mov dh,0 mov dl,0 int 10h mov ah,09 mov dx,offset message int 21h mov ah,02;显示具体分数,初始化为0 mov bh,00 mov dh,0 mov dl,11 int 10h mov ah,09 mov dx,offset yourscore int 21h again: call delay_long call move ;让小鸟动起来 call move2 mov ah,01 ;检测是否有按键,没有的话循环检测 int 16h jz again mov ah,00 ;检测按下什么键,并进行判断 int 16h cmp ah,4bh ;按下左方向键 je toleft cmp ah,4dh ;按下右方向键 je toright cmp ah,39h ;按下空格 je shoot cmp ah,01h ;按下ESC键 je endthegame jmp againtoleft: mov dl,column ;边界检测 cmp dl,01 jna again call erase ;先擦除原来的图像 mov dh,line mov dl,column sub dl,1 mov di,offset plane_buffer mov bh,00 call display ;在新的位置显示图像,达到移动的效果 jmp againtoright: mov dl,column ;类似toleft cmp dl,78 jnb again call erase mov dh,line mov dl,column add dl,1 mov di,offset plane_buffer mov bh,00 call display jmp again shoot: mov dh,line mov dl,column call bullet ;发射子弹 call score ;判断是否射中,射中得分 jmp again endthegame: MOV AH,4CH INT 21H;-display proc ;用于显示飞机 push ax push bx push cx push dx push di mov ch,0 mov cl,di mov amount,cx mov line,dh mov column,dl inc di mov pointer,di next: add dh,di+2 add dl,di+3 mov ah,02;设置光标 int 10h push cx mov ah,09;画图 mov al,di mov cx,01 mov bl,di+1 int 10h pop cx add di,4 loop next pop di pop dx pop cx pop bx pop ax retdisplay endp;-erase proc;用于飞机的擦除 mov cx,amount mov di,pointer mov dh,line mov dl,column l: add dh,di+2 ;与画图一样,只是字符属性设置为黑底黑字,实现擦除效果 add dl,di+3 mov ah,02 int 10h mov al,di mov bl,0 push cx mov ah,09 mov cx,01 int 10h pop cx add di,4 loop l reterase endp;-bullet proc ;发射子弹 push cx rep1: sub dh,01 ;在新位置画图 mov ah,02 mov bh,00 int 10h mov ah,09 mov bh,00 mov al,18h mov bl,0fh mov cx,01 int 10h call delay ;清除原来痕迹 mov ah,09 mov bh,00 mov al,18h mov bl,00h mov cx,01 int 10h cmp dh,00 jne rep1 pop cx retbullet endp;-delay proc;用于子弹的延迟 push cx push dx mov dx,200h wait1: mov cx,50h wait2: loop wait2 dec dx cmp dx,0 jne wait1 pop dx pop cx retdelay endp;-delay_long proc;用于小鸟飞行的延迟 push cx push dx mov dx,200h wait1: mov cx,200h wait2: loop wait2 dec dx cmp dx,0 jne wait1 pop dx pop cx retdelay_long endp;-move proc;小鸟的移动 push ax push bx push cx push dx push di ;call delay_long call erase2 ;擦除原来的小鸟,继而在新位置画图 mov dl,column_bird cmp dl,77 jb paint mov dl,-1paint: inc dl mov dh,line_bird mov di,pointer_bird mov cx,amount_bird mov column_bird,dl;得保存改变后的值 ;设置光标 tt: add dh,di+2 add dl,di+3 mov ah,02 mov bh,00 int 10h ;在光标处画符号 push cx mov ah,09 mov bh,00 mov al,di mov cx,01 mov bl,di+1 int 10h pop cx add di,04 loop tt pop di pop dx pop cx pop bx pop ax retmove endp;-erase2 proc;用于小鸟的擦除 mov cx,amount_bird mov di,pointer_bird mov dh,line_bird mov dl,column_bird p: add dh,di+2 add dl,di+3 mov ah,02 int 10h mov al,di mov bl,0 push cx mov ah,09 mov cx,01 int 10h pop cx add di,4 loop p reterase2 endp;-display_bird proc ;小鸟的显示 push ax push bx push cx push dx push di mov ch,0 mov cl,di mov amount_bird,cx mov line_bird,dh mov column_bird,dl inc di mov pointer_bird,di next: add dh,di+2 add dl,di+3 mov ah,02;设置光标 int 10h push cx mov ah,09;画图 mov al,di mov cx,01 mov bl,di+1 int 10h pop cx add di,4 loop next pop di pop dx pop cx pop bx pop ax retdisplay_bird endp;-score proc ;判断子弹是否击中飞机,击中得分 push ax push bx push si mov al,column mov bl,column_bird cmp al,bl ;子弹的列值在小鸟的列值范围内时,击中 je getscore inc bl cmp bl,al je getscore inc bl cmp bl,al je getscore mov al,column mov bl,column_bird2 cmp al,bl je getscore inc bl cmp bl,al je getscore inc bl cmp bl,al je getscore jmp theend getscore: add yourscore_b,2 sub ah,ah mov al,yourscore_b mov si,offset yourscore call b2asc_con ;分数的二进制码转化为ASCII码 mov ah,02;显示具体分数 mov bh,00 mov dh,0 mov dl,11 int 10h mov ah,09 mov dx,offset yourscore int 21h theend: pop si pop bx pop ax retscore endp;-b2asc_con proc ;二进制码转化为ascii码 pushf push bx push dx mov bx,10 add si,2 ;这个视有几个ASCII码而定,显示三位时定为二 b2a_loop: sub dx,dx div bx or dl,30h mov si,dl dec si cmp ax,0 ja b2a_loop pop dx pop bx popf retb2asc_con endp;-help_view proc ;显示开始菜单 mov ah,02 mov bh,00 mov dh,04 mov dl,23 int 10h mov ah,09 mov dx,offset message_welcome int 21h mov ah,02 mov bh,00 mov dh,06 mov dl,23 int 10h mov ah,09 mov dx,offset message_operation int 21h mov ah,02 mov bh,00 mov dh,08 mov dl,23 int 10h mov ah,09 mov dx,offset message_operation1 int 21h mov ah,02 mov bh,00 mov dh,10 mov dl,23 int 10h mov ah,09 mov dx,offset message_operation2 int 21h mov ah,02 mov bh,00 mov dh,12 mov dl,23 int 10h mov ah,09 mov dx,offset message_operation3 int 21h mov ah,02 mov bh,00 mov dh,14 mov dl,23 int 10h mov ah,09 mov dx,offset start_button int 21h mov ah,02 mov bh,00 mov dh,16 mov dl,23 int 10h mov ah,09 mov dx,offset end_button int 21h mov ah,02 mov bh,00 mov dh,18 mov dl,23 int 10h mov ah,09 mov dx,offset message_end int 21h ;检查是否有键被按下checkbutton: mov ah,01 int 16h jz checkbutton mov ah,0 int 16h cmp ah,1ch;回车键 je startthegame cmp ah,01h;Esc键 je endthegame jmp checkbuttonstartthegame: call clearscreen ;清屏 rethelp_view endp;-clearscreen proc;清屏push axpush bxpush cxpush dxmov ah,06mov al,00mov bh,07mov ch,00mov cl,00mov dh,24mov dl,79int 10hpop dxpop cxpop bxpop axretclearscreen endp;-display_bird2 proc push ax push bx push cx push dx push di mov ch,0 mov cl,di mov amount_bird2,cx mov line_bird2,dh mov column_bird2,dl inc di mov pointer_bird2,di next: add dh,di+2 add dl,di+3 mov ah,02;设置光标 int 10h push cx mov ah,09;画图 mov al,di mov cx,01 mov bl,di+1 int 10h pop cx add di,4 loop next pop di pop dx pop cx pop bx pop ax retdisplay_bird2 endp;-move2 proc push ax push bx push cx push dx push di ;call delay_long call erase3 mov dl,column_bird2 cmp dl,77 jb paint mov dl,-1paint: inc dl mov dh,line_bird2 mov di,pointer_bird2 mov cx,amount_bird2 mov c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版铁塔基站租赁与广告位合作合同范本
- 2025版桥架安装与防雷接地工程承包合同样本
- 2025年建筑材料供货与绿色建筑认证服务合同
- 2025年二手房买卖合同:针对老旧房屋改造的特别约定条款
- 2025年度高效节水农业种植技术服务合同范本
- 2025年跨境矿山资源承包与国际贸易合同
- 2025版文化旅游区建筑承包合同范本
- 2025年数字经济法律咨询项目评标保密与委托合同
- 2025版石料矿山安全生产责任协议
- 2025年度旅游行程变更免责协议及游客须知
- 七年级班主任开学第一课课件
- XXX有限公司报销审核制度
- WS/T 427-2013临床营养风险筛查
- GA/T 1047-2013道路交通信息监测记录设备设置规范
- GJB9001C内审员培训讲学课件
- 五牌一图(完整版)
- 幼儿园绘本故事:《十二生肖》 课件
- 激光跟踪仪使用手册
- 新媒体运营知识考核试题与答案
- 金属材料的主要性能ppt课件(完整版)
- 丽声北极星自然拼读绘本第二级 Fat Cat 课件
评论
0/150
提交评论