ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:145.78KB ,
资源ID:3825540      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3825540.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机课设.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

微机课设.docx

1、微机课设微机系统与接口课程设计任务书一、课程设计的目的 本课程设计通过系列的编程设计,来引导学生熟练地运用指令系统和汇编语言来进行程序设计,系统地掌握微机程序设计的基本要领和方法,使学生的应用知识能力、程序调试能力、程序设计能力等有一定的提高。二、课程设计题目微机汇编语言系列程序设计1、分支和循环程序设计:数据排序统计2、综合程序设计:时间显示综合应用三、实验目的1、分支和循环程序设计:数据排序统计(1)学习提示信息的显示及键盘输入字符的方法。(2)掌握分支程序和循环程序的设计方法。2、综合程序设计:时间显示综合应用(1)掌握子程序设计的基本方法,包括子程序的定义、调用和返回,子程序中如何保护

2、和恢复现场,主程序与子程序之间如何传送参数。(2)学习如何进行数据转换和计算机中日期时间的处理方法。(3)了解在程序设计中如何用查表法来解决特殊的问题。四、课程设计要求用微机实现三个系列程序,难度依次递增。1、屏幕上显示提示信息“Please input 10 numners:”,用户从键盘输入10个数(数的范围在0-99之间)到定义的缓冲区,对输入的这10个数从小到大排序,并统计0-59,60-79,80-99的数各有多少,最后,在屏幕上显示排序后的数(每个数之间用逗号分隔),并按一定格式来显示统计的结果。(选做)扩大输入数字的允许范围为0-999之间。2、编写一个程序,在屏幕上实时地显示日

3、期和时间(例如:2009-12-28 15:18:25显示为3:18:25 P.M.,Monday,December 28,2009),直到任意一个键被按下才退出程序。(选做)增加整点报时功能和倒计时功能。五、程序流程图1、分支和循环程序设计:数据排序统计2、综合程序设计:时间显示综合应用 六、程序总设计及总框图DATA SEGMENT ;定义数据段 ;提示信息字符串 MESSAGE DB Please input 10 numbers:,0DH,0AH,$ ;键盘缓冲区 KB_BUF DB 3 ;定义可接收最大字符数(包括回车键) ACTLEN DB ? ;实际输入的字符数 BUFFER D

4、B 3 DUP(?) ;输入的字符放在此区域中 ;数据及统计结果 NUMBERS DB 10 DUP(?) ;键入的数据转换成二进制后放在此处 LE59 DB 0 ;059的个数 GE60 DB 0 ;6079的个数 GE80 DB 0 ;8099的个数 ;显示结果的字符串 SORTSTR DB Sorted numbers: SORTNUM DB 10 DUP(20H,20H,),0DH,0AH MESS00 DB 059:,30H,30H,0DH,0AH MESS60 DB 60-79:,30H,30H,0DH,0AH MESS80 DB 8099:,30H,30H,0DH,0AH,$ D

5、ATA ENDS ;数据段结束CODE SEGMENT ;定义代码段 ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV CX,10 ;共读入10个数据 LEA DI,NUMBERS ;设置数据保存区指针LPl:INC DI ;指向下一个数据单元CRLF ;在下一行输入LOOP LPl ;直到10个数据都输入完2、综合程序设计:时间显示综合应用;显示字符的宏定义 DISP MACRO CHAR PUSH AX ;保存DX和AX PUSH DXMOV DL,CHAR ;显示字符 MOV AH,21NT 21H POP DX POP AX END

6、M DATA SEGMENT ;数据段开始;星期名指针表D_ TAB DW SUN,MON,TUE,WED,THU,FRI,SAT;月份名指针表M _TABD DW JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DCE;星期名字符串SUN DB Sunday$MON DB Monday$TUE DB Tuesday$WED DB Wednesday$THU DB Thursday$FRI DB Friday$SAT DB Saturday$;月份名字符串JAN DB January$FEB DB February$MAR DB March$APR DB

7、 April$MAY DB May$JUN DB June$JUL DB July$AUG DB August$SEP DB September$OCT DB October$NOV DB November$DCE DB December$TMT DB .M.,$SPACE=20H ;空格字符DATA ENDS ;数据段结束CODE SEGMENT ;代码段开始ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX LLL:CALL TIMES ;显示时间 CALL DATES ;显示日期 DISP ODH ;回车 DISP OAH ;换行 MOV A

8、H,06H MOV DL,OFFH INT 21H ;检查是否有键按下 JE LLL ;若没有,则循环显示 MOV AH,4CH ;若有键按下则退回DOS INT 21H;显示时间的子程序TIMES PROC NEAR TIMES ENDP ;显示日期的子程序 DATES PROC NEARDATES ENDP CODE ENDS ;代码段结束 END START七、源程序清单1、分支和循环程序设计:数据排序统计CALLDOS MACRO FUNCTION MOV AH,FUNCTION INT 21H ENDM CRLF MACRO MOV DL,0DH CALLDOS 2 MOV DL,0

9、AH CALLDOS 2 ENDM DSEG SEGMENT ;定义数据段MESSAGE DBPlease input 10 numbers:,0DH,0AH,$;提示信息字符串;键盘缓冲区KB_BUF DB 3 ;定义可接收最大字符数(包括回车键) ACTLEN DB ? ;实际输入的字符数 BUFFER DB 3 DUP(?) ;输入的字符放在此区域中;数据及统计结果NUMBERS DB 10 DUP(?) ;键入的数据转换成二进制后放在此处LE59 DB 0 ;059的个数 GE60 DB 0 ;6079的个数 GE80 DB 0 ;8099的个数 ;显示结果的字符串 SORTSTR D

10、B Sorted numbers:SORTNUM DB 10 DUP(20H,20H,),0DH,0AHMESS00 DB 0-59:,30H,30H,0DH,0AHMESS60 DB 60-79:,30H,30H,0DH,0AHMESS80 DB 80-99:,30H,30H,0DH,0AH,$DSEG ENDS ;数据段结束CSEG SEGMENT;定义代码段ASSUME CS:CSEG,DS:DSEGSTART: MOV AX,DSEG MOV DS,AX ;初始化DS LEA DX,MESSAGE CALLDOS 9 MOV CX,10 ;共读入10个数据 LEA DI,NUMBERS

11、 ;设置数据保存区指针LP1: MOV DX,OFFSET KB_BUF MOV AH,0AH INT 21H ;返回DOS CRLF LEA SI,BUFFER ;将内存单元BUFFER的偏移地址送SI MOV AL,SI AND AL,0FH ;将AL的高四位清0,低四位保持不变 PUSH CX ;入栈 MOV CL,4 SHL AL,CL ;逻辑左移4位 MOV BL,AL POP CX ;出栈 INC SI ;地址指针加1 MOV AL,SI AND AL,0FH ;将AL的高四位清0,低四位保持不变 OR AL,BL ;将AL,BL中的内容相或,结果送到AL MOV DI,AL IN

12、C DI ;指向下一个数据单元 LOOP LP1 ;直到10个数据都输入完 LEA DI,NUMBERS ;设置数据保存区指针 MOV BL,9NEXT1: MOV SI,DI MOV CL,BLNEXT2: MOV AL,SI INC SI ;指向下一个地址 CMP AL,SI ;比较 JC NEXT3 ;若不大于,则转NEXT3 MOV DL,SI MOV SI-1,DL MOV SI,ALNEXT3: DEC CL ;将CL内容-1 JNZ NEXT2 ;若为0,则转NEXT2 DEC BL ;将BL内容-1 JNZ NEXT1 ;若为0,则转NEXT2 LEA DI,NUMBERS ;

13、DI指向NUMBERS LEA SI,SORTNUM ;SI指向SORTNUM MOV CX,10NEXT4:MOV AL,DI MOV BL,AL ;通用寄存器AL的内容送BL AND AL,0F0H PUSH CX ;出栈 MOV CL,4 ;移位次数为4次 SHR AL,CL ;逻辑右移4位 OR AL,30H ;将AL中的内容与30H相或,结果送AL POP CX ;出栈 MOV SI,AL INC SI ;地址指针加1 MOV AL,BL AND AL,0FH OR AL,30H ;相或 MOV SI,AL INC SI ;地址指针加1 INC SI ;地址指针加1 INC DI ;

14、指向下一个数据单元 LOOP NEXT4 ;转向 NEXT4 LEA DX,SORTSTR ;DX指向SORTSTR LEA DI,NUMBERS ;DI指向NUMBERS MOV CX,10L1: CMP BYTE PTRDI,60 ;与60相比较 JGE L2 ;大于等于60时则转L2,否则顺序执行 INC LE59 ;LE59加1 JMP L4 ;转L4L2: CMP BYTE PTRDI,80 ;与80相比较 JGE L3 ;大于等于80时则转L3,否则顺序执行 INC GE60 ;GE60加1 JMP L4 ;转L4L3: INC GE80 ;GE80加1L4: INC DI ;DI

15、加1 LOOP L1 ;转L1 MOV AH,LE59 CMP AH,10 ;比较 JGE L8 ;大于等于10时则转L3,否则顺序执行 ADD AH,30H ;相加 MOV AL,20H JMP L9 ;转L9L8: MOV AX,3031HL9: MOV WORD PTR MESS00+6,AX MOV AH,GE60 CMP AH,10 ;比较 JGE L10 ;大于等于10时则转L10,否则顺序执行 ADD AH,30H ;相加 MOV AL,20H JMP L11 ;转L11L10: MOV AX,3031HL11: MOV WORD PTR MESS60+7,AX MOV AH,G

16、E80 CMP AH,10 ;比较 JGE L12 ;大于等于10时则转L12,否则顺序执行 ADD AH,30H ;相加 MOV AL,20H JMP L13 ;转L13L12: MOV AX,3031H L13: MOV WORD PTR MESS80+7,AX LEA DX,SORTSTR ;DX指向SORTSTR CALLDOS 9 CALLDOS 4CHLEA DX,SORTSTR ;显示排序和统计的结果 MOV AH,9INT 21H MOV AH,4CH ;调用返回DOS功能 INT 21H ;返回DOSCSEG ENDS ;代码段结束END START ;程序结束2、综合程序设

17、计:时间显示综合应用 DISP MACRO CHAR PUSH AX ;保存DX和AX PUSH DX MOV DL,CHAR ;显示字符 MOV AH,2 INT 21H POP DX POP AX ENDM DSEG SEGMENT D_TAB DW SUN,MON,TUE,WED,THU,FRI,SAT ;星期名指针表(数组) M_TABD DW JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DCE ;月份名指针表 SUN DB Sunday$ ;星期名字符串 MON DB Monday$ TUE DB Tuesday$ WED DB Wedne

18、sday$ THU DB Thursday$ FRI DB Friday$ SAT DB Saturday JAN DB January$ ;月份名字符串 FEB DB February$ MAR DB March$ APR DB April$ MAY DB May$ JUN DB June$ JUL DB July$ AUG DB August$ SEP DB September$ OCT DB October$ NOV DB November$ DCE DB December$ DBD DB .M.,$ SPACE=20H E DB 20 F DB 19DSEG ENDSCSEG SEGM

19、ENT ;定义数据段ASSUME CS:CSEG,DS:DSEGSTART: MOV AX, DSEG MOV DS, AX ;初始化DS LLL: CALL TIMES ;显示时间 CALL DATES ;显示日期 DISP 0DH ;回车 DISP 0AH ;换行 MOV AH,06H ;控制口 MOV DL,0FFH INT 21H ;检查是否有键按下 JE LLL ;若没有,则循环显示 MOV AH,4CH ;若有键按下则退回DOS INT 21H ;返回DOS ;显示日期的子程序DATES PROC NEAR MOV AH,2AH ;显示字符串 INT 21H ;返回DOS PUSH

20、 DX ;入栈 LEA SI,D_TAB ;SI指向星期名 MOV AH,0 ; 使AH为0 ADD AX,AX ; 两数相加 ADD SI,AX ; 两数相加 MOV DX,SI ;将SI 送DX MOV AH,09H ;字符串显示功能 INT 21H ;返回DOS POP DX ;出栈DISP SPACE ;空格 PUSH DX ;入栈 MOV AL,DH ;刷新 DEC AL ;将AL的内容减1 MOV AH,0 LEA SI,M_TABD ;SI指向月份名 MOV AH,0 ADD AX,AX ; 两数相加 ADD SI,AX ; 两数相加 MOV DX,SI ;将SI 送DX MOV

21、 AH,09H ;字符串显示功能 INT 21H ;返回DOS POP DX ;出栈 DISP SPACE ;空格 MOV AL,DL MOV AH,0 ;使AH为0 AAM ;乘法的ASCII调整 OR AX,3030H ;将AX内容与3030H相或 DISP AH ;显示AH DISP AL ;显示AL DISP , ;显示, CMP CX,2000 ;将CX与2000相比较 JB L3 ;若CX2000,则转 L3 SUB CX,2000 ;将CX与2000相减 DISP 2 ;显示2 DISP 0 ;显示0 JMP L4 ;转L4 L3: SUB CX,1900 ;相减 DISP 1

22、;显示1 DISP 9 ;显示9 L4: MOV AL,CL MOV AH,00H AAM ;拆字 OR AX,3030H ;相或 DISP AH ;显示AH DISP AL ;显示AL RET ;返回 DATES ENDP;显示时间的子程序TIMES PROC NEAR MOV AH,2CH ;取时间 INT 21H ;返回DOS MOV BH,A CMP CH,12 ;比较 JB T1 ;若CH12,则转 T1 MOV BH,P SUB CH,12 ;相减 T1:OR CH,CH ;相或 JNE T2 ;若不为0则转T2 MOV CH,12T2:MOV AL,CH MOV AH,0 AAM

23、 ;拆字 OR AH,AH;相或 JZ T3 ;若为0则转移 ADD AH,O DISP AH T3 :ADD AL, 0 DISP AL ;显示AL的值 DISP : ;显示: MOV AL,CL MOV AH,0 AAM ADD AX,3030H PUSH AX ;入栈 DISP AH ;显示AH的值 POP AX ;出栈 DISP AL ;显示AL DISP SPACE ;显示空格 DISP BH ;显示BH LEA DX, DBD;DX指向DBD MOV AH,9 ;字符串显示功能 INT 21H ;返回DOS DISP SPACE ;空格 RET ;返回TIMES ENDP ;结束

24、MOV AH,4CH ;调用返回DOS功能 INT 21H ;返回DOS CSEG ENDS ;代码段结束END START ;程序结束八、运行结果1、分支和循环程序设计:数据排序统计2、综合程序设计:时间显示综合应用九、课程设计心得通过本次的程序设计,函数调用,调试方法的比较可以让我们更好的学习这门语言,而且,值得注意的一点是,任何语言的学习都必须经过不断的实践才能学好,汇编语言更是这样,在不断的实践中我们会碰到各种问题,而解决问题会使我们从中受益。汇编语言的调试比较麻烦,而且指令也比较多,稍没搞好就会出问题然后就得重来,在编程的过程中我还碰到了许许多多其他方面的问题,通过本次课程设计我觉得:学一门语言或者做任何事情都是一个不断实践,不断出错,不断改正的过程。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1