《微机原理汇编程序设计(共17页).doc》由会员分享,可在线阅读,更多相关《微机原理汇编程序设计(共17页).doc(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上微机原理课程设计设计一:从键盘输入十六进制数并显示出二进制值设计二:字符串匹配设计设计三:字符和数据显示的设计设计四:键盘输入小写字母转换成大写字母设计五:计算N!的设计 2011-7-6设计一:从键盘输入十六进制数并显示出二进制值实验目的:掌握接收键盘数据的方法,并了解数据显示时须转换为ASCII码的原理。实验内容:将键盘接收到的4位十六进制数据转换为等值的二进制数,再显示在屏幕终端上。流程图:程序源代码:CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21HENDMDATA SE
2、GMENTMARK DB ?MESS DB INPUT THE NUMBER! Press Enter to Transition,Press Space to Exit!,0DH,0AH,Input:$ERROR DB 0DH,0AH, Input Error!,0DH,0AH,$DATA ENDSSTACK SEGMENTSTA DW 32 DUP(?)TOP DW ?STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV ES,AX MOV SP,TOPHE
3、AD: CRLF MOV MARK,0 MOV AH,09H LEA DX,MESS INT 21H ;显示提示输入的信息 CALL GETNUM ;接收键入数值送DX CMP MARK,01H JE HEAD MOV CX,0010H ;16位 MOV BX,DXTTT: ROL BX,1 ;循环左移1位 MOV DL,BL AND DL,01H ;屏蔽掉高7位 ADD DL,30H MOV AH,02H INT 21H ;显示二进制位对应的ASCII字符 LOOP TTT JMP HEADFINI: MOV AH,4CH INT 21H ;返回DOSGETNUM PROC NEAR ;子程
4、序,接收键入数值送DX PUSH CX XOR DX,DXGGG: MOV AH,01H INT 21H CMP AL,0DH ;输入为回车,则进行转换 JE PPP CMP AL,20H ;输入为空格,则退回DOS JE FINI CMP AL,30H JB KKK SUB AL,30H CMP AL,0AH JB GETS CMP AL,11H JB KKK SUB AL,07H CMP AL,0FH JBE GETS CMP AL,2AH JB KKK CMP AL,2FH JA KKK SUB AL,20HGETS: MOV CL,04 SHL DX,CL XOR AH,AH ADD
5、DX,AX JMP GGGKKK: MOV AH,09H MOV DX,OFFSET ERROR INT 21H MOV MARK,01HPPP: PUSH DX CRLF POP DX POP CX RETGETNUM ENDPCODE ENDSEND START运行结果设计二:字符串匹配设计实验内容:编写程序实现两个字符串比较。如相同,则显示“MATCH”,否则显示“NO MATCH”。源程序:CRLF MACRO ;显示回车 MOV DL,0DH MOV AH,02H INT 21H MOV AH,02H MOV DL,0AH INT 21HENDMDATA SEGMENTMESS1 D
6、B 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(?)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
7、 INT 21H ;显示输入提示信息1 MOV AL,MAXLEN1 MOV BX,OFFSET STRING1 MOV BX,AL ;最大字符缓冲 MOV AH,0AH MOV DX,OFFSET STRING1 INT 21H ;接收键入的字符串1 CRLF MOV AH,09H MOV DX,OFFSET MESS4 INT 21H ;显示输入提示信息2 MOV AL,MAXLEN2 MOV BX,OFFSET STRING2 MOV BX,AL ;最大字符缓冲设置 MOV AH,0AH MOV DX,OFFSET STRING2 INT 21H ;接收键入的字符串2 CRLF CLD
8、LEA SI,STRING1 ;字符串1的地址送给SI MOV CL,SI+1 ;字符串1的字符数送给CX MOV CH,0KKK: LEA DI,STRING2 ;字符串2的地址送给DI MOV DL,DI+1 ;字符串2的字符数送给DX MOV DH,0 ZJ2: MOV AL,SI+2 ;字符串1的第一个字符在字符串2中匹配 CMP DI+2,AL JE ZJ3 ;匹配成功则跳转 ZJ1: INC DI ;指向字符串2下一个字符 DEC DX JZ GGG ;字符串2完,不匹配 JMP ZJ2 ;字符串2没完,重新匹配 ZJ3: DEC CX JZ MMM ;字符串1完,匹配 DEC D
9、X JZ GGG ;字符串2完,不匹配 INC SI ;指向串1下一个字符 INC DI ;指向串2下一个字符 MOV AL,SI+2 CMP DI+2,AL JE ZJ3 ;匹配,跳转 DEC DX JZ GGG ;字符串2完,不匹配 LEA SI,STRING1 ;重新从串1的第一个字符匹配 MOV CL,SI+1 MOV CH,0 INC DI JMP ZJ2MMM: MOV AH,09H ;输出匹配信息 MOV DX,OFFSET MESS1 INT 21H JMP PPPGGG: MOV AH,09H ;输出不匹配信息 MOV DX,OFFSET MESS2 INT 21H PPP:
10、 MOV AH,4CH ;程序终止 INT 21HCODE ENDS END START 设计三:字符和数据显示的设计实验内容:编写程序,先显示信息“INPUT STRING IS”,在接受字符。如为0-9,则计数器加1,并显示数据,非数字,则直接显示,但不计数。源程序:CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21HENDM DATA SEGMENTMESS1 DB INPUT STRING IS $MESS2 DB Char = $MESS3 DB Not number = $MESS4 DB Nu
11、m= $TOTAL DW ?DATA ENDSSTACK SEGMENTSTA DW 32 DUP (?)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 BX,0000H ;计数值清0 MOV AH,09H MOV DX,OFFSET MESS1 INT 21H CRLFXXX: MOV AH,01H INT 21H ;接收键入字符 CMP AL,20H JZ UUU ;是空格键则转UUU
12、 CMP AL,0DH JNZ III CRLF ;是回车键则转UUU JMP UUUIII: CMP AL,30H JB YYY CMP AL,39H JBE VVV ;0-9转VVVYYY: INC BX ;计数值加1VVV: INC TOTAL JMP XXXUUU: CRLF MOV AH,09H LEA DX,MESS2 ;显示字符总数 INT 21H MOV AX,TOTAL CALL DISP MOV AH,02H MOV DL,H INT 21H CRLF ;回车换行MOV AH,09H MOV DX,OFFSET MESS3INT 21H ;显示非数字字符总数MOV AX,B
13、XCALL DISP MOV AH,02HMOV DL,HINT 21H ;十六进制数标志CRLFMOV AH,09HLEA DX,MESS4 ;显示数字字符总数INT 21HMOV AX,BXSUB TOTAL,AXMOV AX,TOTALCALL DISPMOV AH,02HMOV DL,HINT 21HMOV AH,4CHINT 21HDISPP PROC NEAR ;显示子程序,显示AL中的数按十六进制数方式MOV BL,AL ;AL中数送BLKKK: MOV DL,BLMOV CL,04ROL DL,CLAND DL,0FHCALL DISPL ;显示字节高位MOV DL,BLAND
14、 DL,0FHCALL DISPL ;显示字节低位RETDISPP ENDPDISPL PROC NEARADD DL,30H ;由数值转为参应字符的ASCII码CMP DL,3AH JB DDD ;是0-9转DDD ADD DL,07H ;是A-FDDD: MOV AH,02H INT 21H ;显示DL中字符 RET ;返回DISPL ENDP ;显示子程序,显示AX中的数按十六进制数方式DISP PROC NEAR PUSH BX PUSH CX PUSH DX PUSH AX ;入栈保存 MOV AL,AH CALL DISPP ;显示高字节 POP AX CALL DISPP POP
15、 DX POP CX POP BX RET ;出栈DISP ENDPCODE ENDS END START设计四:键盘输入小写字母转换成大写字母实验内容: 编写程序,接收键盘字符,并将其中的小写字母变为大写字母,然后显示在屏幕上。源程序:DATA SEGMENT p1 db 100 P2 db 0array db 100 dup(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX mov dx,offset p1 MOV AH,0AH INT 21H xor bx,bx mov BL,p2 mov
16、 arraybx,$ mov di,0ffffh next: inc di cmp arraydi,$ je exit cmp arraydi,61h jl next cmp arraydi,7ah jg next sub arraydi,20h jmp next exit: mov p1, 0dh mov p2, 0ah MOV AH,09H INT 21H MOV AH,4CH INT 21HCODE ENDS END START设计五:计算N!的设计实验内容:编写程序,计算N!的程序。数值N由键盘输入,结果显示在屏幕上。N的范围为065535,即刚好能被16的寄存器容纳。源程序:CRLF
17、 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: $ERROR DB INPUT ERROR! INPUT ONCE MORE!,0DH ,0AH,$LEN DW 1CY DW ?BUF DW 256 DUP(0)DATA ENDSSTACKS SEGMENT STACK STACK DW 32 DUP(
18、?)STACKSENDSCODE SEGMENTASSUME CS: CODE, DS:DATA, ES:DATA, SS:STACKSSTART:MOV AX, DATA MOV DS,AX MOV ES, AX MOV AH, 09H MOV DX,OFFSET MESS1 INT 21H ;显示输入提示信息 CALL GETNUM ;读取键入的N值 MOV BP, DX ;N值送BP CMP BP, 0 JZ EEE CMP BP, 1 JZ EEE ;N=0或N=1则转EEE MOV SI, OFFSET BUF ;缓冲区首址 MOV SI,DX ;缓冲区初始化为值NXXX: DEC
19、BP ;N值减1 CMP BP,0001H JZ LLL ;若为1则转LLL XOR BX,BX ;偏移指针清0 MOV WORD PTR CY,0 ;进位单元清0 MOV CX,LEN ;当前结果长度送CXTTT: MOV AX, SI+BX MUL BP ;相乘 ADD AX,CY ;加低位进位 JNC JJJ ;结果无进位转JJJ INC DX ;有进位将高位单元加1JJJ: MOV SI+BX,AX ;结果送缓冲区中 MOV CY,DX ;高位单元送进位单元 INC BX INC BX ;一个字长度 LOOP TTT ;循环 CMP DX, 0000H JZ BBB ;最后1次的进位为
20、0则转BBB INC WORD PTR LEN ;长度加1 MOV SI+BX,DX ;进位送缓冲区中BBB: JMP XXXEEE: MOV SI,OFFSET BUF MOV WORD PTR SI,1 ;结果为1LLL: MOV AH, 09H MOV DX,OFFSET MESS2 INT 21H ;显示表头 MOV CX,LEN MOV BX,CX ;长度 DEC BX SHL BX,1 ;1个字为两个字节CCC: MOV AX, SI+BX CALL DISP DEC BX DEC BX ;显示结果 LOOP CCC MOV AX,4C00H ;结束 INT 21HDISP1 PR
21、OC NEAR ;显示字符(AL) MOV BL, AL MOV DL, BL MOV CL, 04 ROL DL, CL AND DL, 0FH CALL DISPL ;显示高位 MOV DL, BL AND DL, 0FH CALL DISPL ;显示低位 RETDISP1 ENDPDISPL PROC NEAR ;显示一位(DL0XH) ADD DL, 30H CMP DL, 3AH JB DDD ADD DL, 07HDDD: MOV AH, 02H INT 21H RETDISPL ENDPDISP PROC NEAR ;显示4位数(HEX) PUSH BX PUSH CX PUSH
22、 DX PUSH AX MOV AL, AH CALL DISP1 POP AX CALL DISP1 POP DX POP CX POP BX RETDISP ENDPGETNUMPROC NEAR ;字符匹配程序 PUSH CXREGET: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 AL, 2AH JB
23、KKK CMP AL, 2FH JA KKK SUB AL, 20HGETS: MOV CL, 04H SHL DX,CL XOR AH, AH ADD DX ,AX JMP GGGKKK: CRLF MOV AH, 09H MOV DX,OFFSET ERROR INT 21H JMP REGETPPP: PUSH DX CRLF POP DX POP CX RETGETNUMENDP CODE ENDS END START*心得体会*经过了一周的汇编课程设计,我在其中经历了很大的困难,可是也感受到了巨大的幸福。当我面对一个难题,从一筹莫展到逐渐清晰明朗,到最后成功完成任务。只要亲身经历过,
24、才能感受其中的泪水和快乐。更重要的是我们对汇编有了更进一步的理解。有了实际应用的体会,知识更加的融会贯通了。不管是从知识上还是从思维方式上,我们都得到了很大的进步。还有就是深切感受到了从课本以外的世界独立接受新知识,独立面对新问题的能力。面对挑战不气馁,积极的迎接他,战胜他。让自己变的充实起来。和感谢老师给我们这次课程设计的机会。知识来自于实践,用于实践。这次的微机课程设计使我对一些编程思想有个更加清晰的了解,第一个就是流程图,原来不以为然的事现在觉得非常的有必要。第二就是编程顺序,要写一个功能很复杂的程序首先写那些自己可以很快完成的较简单的内容,这样既可以使编程变得更有条理,而且对心态也是很
25、有帮助的。通过对这程序的制作,使我对汇编语言的基本知识的使用更加熟练,同时也增加了我对汇编语言的一些认识,在作业完成过程中通过和同学的交流,也增加了合作的技巧。通过查阅以下资料也学到了一些课本上没有的东西,拓宽了自己的知识面,增加了学好汇编语言的信心。在这次课程设计中,我真正体会到了合作的重要性,遇到很多问题时,当我看书查资料不能解决时,这是去找同学讨论一下,收获很大,可以使很多问题迎刃而解,直到问题最终解决。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。本次课程设计,我最大的收获就是自己的动手能力和独立解决问题的能力得到了很大的提高,也充分体会到了自己设计东西的乐趣、学会查阅资料和对别人的东西融会变通的重要性,也明白了很多知识光靠趴在书本上学是学不到其中的精髓的,必须亲自去试着实践,亲自去经历才能对它们真正的掌握。 课程设计使我收益非浅。在以后在日子里我们要本着一切从应用出发的态度出发学习。同样要珍惜以后的实践学习。专心-专注-专业
限制150内