《微机接口课程设计.doc》由会员分享,可在线阅读,更多相关《微机接口课程设计.doc(22页珍藏版)》请在三一办公上搜索。
1、微机原理课程设计姓名 李永尚 班级 电科0902 学号 3090504054 学院 电气学院 一、实验目的结合微型计算机原理课程的学习,进一步巩固已学习知识,同时针对计算机原理知识的具体应用,学会对系统中DOS和BIOS的 使用。学会使用编辑程序EDIT,弄懂汇编程序的上机过程以及如何运用TDEBUG软件进行汇编程序的调试。二、实验内容1、从键盘输入数据并显示设计编写程序,将键盘接收到的4位十六进制数转换为等值的二进制数,再显示在屏幕上2、响铃设计 为掌握响铃的使用方法。编写程序,从键盘输入字符,如果是数字N则响铃N次;如果不是数字,则不响铃。3、字符串匹配设计 编写程序实现两个字符串的比较.
2、如相同,则显示”MATCH”,否则,显示“NO MATCH”.4、将键盘输入的小写字母转换成大写字母的设计 接收键盘字符(-C为结束),并将其中的小写字母转换为大写字母,然后显示在屏幕上5、计算N!设计编写计算N!的程序。数值N由键盘输入,将结果在屏幕上输出。N的范围为0-65535.即刚好能被一个16位寄存器容纳。1、从键盘输入数据并显示设计流程图入口段寄存器和堆栈初始化显示“请输入十六进制数”调用GETNUM接收键入数值,保存在BX中计数值16送CXB X中内容循环左移1位BL送DL,屏蔽掉DL高7位DL加30H,变成二进制数位对应字符的ASCII显示CX减1为0? N返回DOS程序CRL
3、FMACROMOV AH,02HMOVDL,0DHINT21HMOVAH,02HMOVDL,0AHINT 21H ENDMDATASEGMENTMESSDBINPUT HEXNUMBER:$ERROR DB INPUT ERROR!,0DH,0AH,$DATA ENDSSTACKSEGMENTSTADW32 DUP(?)TOPDW?STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVES,AXMOVSP,TOPMOVAH,09HMOVDX,OFFSETMESSINT21HCAL
4、LGETNUMMOVCX,0010HMOVBX,DXTTT:ROLBX,1MOVDL,BLANDDL,01HADDDL,30HMOVAH,02HINT21HLOOPTTTMOVAX,4C00HINT21HGETNUMPROCNEARPUSHCXXORDX,DXGGG:MOVAH,01HINT 21HCMPAL,0DHJZPPPCMPAL,20HJZPPPCMPAL,30HJBKKKSUBAL,30HCMPAL,0AHJBGETSCMPAL,11HJBKKKSUBAL,07HCMPAL,0FHJBEGETSCMPAL,2AHJBKKKCMPAL,2FHJAKKKSUBAL,20HGETS:MOV
5、CL,04SHLDX,CLXORAH,AHADDDX,AXJMPGGGKKK:MOVAH,09HMOVDX,OFFSETERRORINT21HPPP:PUSHDXCRLFPOPDXPOPCXRETGETNUMENDPCODEENDSENDSTART运行结果:2、响铃设计流程图 程序CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H ENDM DATASEGMENTBUF DB 80 DUP(?)DATA ENDSSTACKSEGMENTSTA DB 50 DUP(?)TOP EQU LENGTH STAS
6、TACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AXMOV ES,AX MOV AX,STACKMOV SS,AX MOV SP,TOP KKK: MOV AH,01HINT 21HCMP AL,03HJZ PPPCMP AL,30HJBE TTTCMP AL,39HJA TTT, SUB AL,30HXOR AH,AHMOVBP,AXGGG:MOV AH,02HMOVDL,07HINT21HMOVCX,6000HUUU:LOOP UUUDECBPJNZGGGTTT:JM
7、PKKKPPP:MOVAX,4C00HINT21HCODEENDS END START运行结果:3、字符串匹配设计流程图 程序CRLF MACRO MOV DL,0DH MOV AH,02H INT 21H MOV AH,02H MOV DL,0AH INT 21H ENDMDATA SEGMENTMESS1 DB MATCH,0DH,0AH,$MESS2 DB NO MATCH,0DH,0AH,$MESS3 DB INPUT STRING1!,0DH,0AH,$MESS4 DB INPUT STRING2!,0DH,0AH,$MAXLEN1 DB 100STRING1 DB 100 DUP(
8、?)MAXLEN2 DB 100STRING2 DB 100 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATASTART: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AH,09H MOV DX,OFFSET MESS3 INT 21H MOV AL,MAXLEN1 MOV BX,OFFSET STRING1 MOV BX,AL MOV AH,0AH MOV DX,OFFSET STRING1 INT 21H CRLF MOV AH,09H MOV DX,OFFSET MESS4 INT 21H MO
9、V AL,MAXLEN2 MOV BX,OFFSET STRING2 MOV BX,AL MOV AH,0AH MOV DX,OFFSET STRING2 INT 21H CRLFCLD LEA SI,STRING1 MOV CL,SI+1 MOV CH,0BEING: LEA DI,STRING2 MOV DL,DI+1 MOV DH,0J1: MOV AL,SI+2 CMP DI+2,AL JE J3 J2: INC DI DEC DX JZ NOMAT JMP J1 J3: DEC CX JZ MATCH DEC DX JZ NOMAT INC SI INC DI MOV AL,SI+2
10、 CMP DI+2,AL JE J3 DEC DX JZ NOMAT LEA SI,STRING1 MOV CL,SI+1 MOV CH,0 JMP J1MATCH: MOV AH,09H MOV DX,OFFSET MESS1 INT 21H JMP NEXTNOMAT: MOV AH,09H MOV DX,OFFSET MESS2 INT 21H NEXT: MOV AH,4CH INT 21HCODE ENDS END START 运行结果:4、将键盘输入的小写字母转换成大写字母的设计流程图入口段寄存器和堆栈初始化BX指向字符缓冲区首址偏移指针SI清0用INT 21H的01H功能接收键入
11、字符是-C键是回车键是小写字母小写字母的ASCII码值转换为大写字母的ASCII值存入字符行缓冲区BX+SI单元SI 加1指向下一单元显示转换后的字符行缓冲区内容返回DOSCRLFMACROMOVAH,02HMOVDL,0DHINT21HMOVAH,02HMOVDL,0AHINT21HENDMDATASEGMENTBUFDB 82 DUP(?)DATAENDSSTACKSEGMENTSTADB 50 DUP(?)TOPEQU LENGTH STASTACK ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOVAX,DATA
12、MOVDS,AXMOVES,AXMOVAX,STACKMOVSS,AXMOVSP,TOPMOVBX,OFFSET BUFKKK:MOVSI,0000HGGG:MOVAH,01HINT21HCMPAL,03HJZPPPCMPAL,0DHJZBBBCMPAL,61HJBTTTCMPAL,7AHJATTTSUBAL,20HTTT:MOVBX+SI,ALINCSIJMPGGGBBB:MOVBX+SI,ALMOVAL,0AHMOVBX+SI+1,ALMOVAL,$MOVBX+SI+2,ALMOVAH,09HMOVDX,BXINT21HJMPKKKPPP:MOVAX,4C00HINT21HCODEENDS
13、ENDSTART运行结果:按回车键后5、计算N!设计流程图程序CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21HENDMDATA SEGMENTMESS1 DB INPUT THE NUMBER ACCORDING TO HEXNUM!,0DH,0AH,$MESS2 DB THE RESULT IS(HEX):$ERROR DB INPUT ERROR!,0DH,0AH,$LEN DW 1CY DW ?BUF DW 256 DUP (0)DATA ENDSSTACK SEGMENTSTA DW 32 DU
14、P(?)TOP DW ?STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV ES,AX MOV SP,TOP MOV AH,09H MOV DX,OFFSET MESS1 INT 21H CALL GETNUM MOV BP,DX CMP BP,0 JZ EEE CMP BP,1 JZ EEE MOV SI,OFFSET BUF MOV SI,DX XXX: DEC BP CMP BP,0001H JZ LLL XOR BX,BX MOV WORD PTR C
15、Y,0 MOV CX,LEN TTT: MOV AX,SI+BX MUL BP ADD AX,CY JNC JJJ INC DX JJJ: MOV SI+BX,AX MOV CY,DX INC BX INC BX LOOP TTT CMP DX,0000H JZ BBB INC WORD PTR LEN MOV SI+BX,DX BBB: JMP XXXEEE: MOV SI,OFFSET BUF MOV WORD PTR SI,1 LLL: MOV AH,09H MOV DX,OFFSET MESS2 INT 21H MOV CX,LEN MOV BX,CX DEC BX SHL BX,1
16、CCC: MOV AX,SI+BX CALL DISP DEC BX DEC BX LOOP CCC JMP START MOV AX,4C00H INT 21HDISP1 PROC NEAR MOV BL,AL MOV DL,AL MOV CL,04 ROL DL,CL AND DL,0FH CALL DISPL MOV DL,BL AND DL,0FH CALL DISPL RETDISP1 ENDPDISPL PROC NEAR ADD DL,30H CMP DL,3AH JB DDD ADD DL,27HDDD: MOV AH,02H INT 21H RETDISPL ENDPDISP
17、 PROC NEAR PUSH BX PUSH CX PUSH DX PUSH AX MOV AL,AH CALL DISP1 POP AX CALL DISP1 POP DX POP CX POP BX RETDISP ENDP GETNUM PROC NEAR PUSH CX XOR DX,DXGGG: MOV AH,01H INT 21H CMP AL,0DH JZ PPP CMP AL,20H JZ PPP SUB AL,30H JB KKK CMP AL,0AH JB GETS CMP AL,11H JB KKK SUB AL,07H CMP AL,0FH JBE GETS CMP
18、AL,2AH JB KKK CMP AL,2FH JA KKK SUB AL,20HGETS: MOV CL,04 SHL DX,CL XOR AH,AH ADD DX,AX JMP GGGKKK: MOV AH,09H MOV DX,OFFSET ERROR INT 21HPPP: PUSH DX CRLF POP DX POP CX RETGETNUM ENDP CODE ENDSEND START心得: 转眼间为期一周的微机课程设计就要结束了,因为微机原理这门课是上个学期学习的,很多的知识点已经忘记了,但好在还记得一些,通过课后学习,查阅各种资料,总算对其开始上路了。 虽然补习了一下微机与接口方面的知识,但实际操作编程的时候,任然有些力不从心,感觉无从下手,毕竟微机汇编语言已经放下一年多了。虽然力不从心,但我并没有放弃,因为我知道付出就会有收获,所以我并没有急着做老师布置的设计题目,而是找了好多汇编程序,认真阅读,仔细分析编程的思想和技巧,然后是熟悉了一下编辑和调试的环境。最后才动手实际编程,虽然前面耽误了一段时间复习,但磨刀不误砍柴工,编程过程中得心应手,更是避免了好多小错误,比如跳转指令的使用。总之,这次课程设计让我学到了很多,让我认识到了自己的优势和等待改进的地方,我想它会是我人生中的又一笔财富。