1、微机原理课程设计102020年4月19日文档仅供参考微机原理课程设计一、 课程设计内容: 由键盘输入任意四位十六进制数转换为二进制输出即若输入数字 0 至 9 或字符 A 至 F,则转换为二进制输出;若输入为其它,则程序退出。二、 程序分析将十六位二进制数保存在BX中,对BX中的二进制数循环左移,每次移一位,然后把BL中的二进制数送给AL,再对AL的前7位进行屏蔽,只留一位原本是最高位的那位二进制数,它要么为1,要么为0。然后把AL中的这位二进制数转化为十进制数,而且输出。由于AL高7位都为0,因此转换为十进制数,而且输出。由于AL高7位都为0,因此转换为十进制后,依然要么为1,要么为0,而且
2、与那位二进制数相对应。做16次循环,显示整个二进制数。三、 流程图程序流程图开始屏幕显示字符调用输入函数调用显示函数返回结束输入函数INPUT流程图 开始BX寄存器清空,DI置循环次键盘输入单字符存入ALAL30AL=39AL41AL=46AL-30BX左移4位AX与BX累加后放入DI=DIDI=0错误处理AL-37结束NNNNYYYYN输出函数DISPLAY流程图开始结束置初值CX=16BX左移一位输出字符0CF=1CX=0输出字符1YYNN三、程序代码及分析DATA SEGMENTTIP DB 0DH,0AH,INPUTA DATA OF HEX FORM:$ WRONG1 DB 0DH,
3、0AH,INAVAILABLE INPUT!:$,0DH,0AH DATA ENDSCODE SEGMENTMAIN PROC FAR ;调用主函数ASSUME CS:CODE,DS:DATA MOV AX,DATAMOV DS,AX ;装数据段START:MOV AH,9 MOV DX,OFFSET TIPINT 21H ;屏幕显示提示输入字符CALL INPUT CALL DISPLAY JMP START RETMOV AX,4C00H INT 21HMAIN ENDP ;主函数结束;-键盘输入函数INPUT PROC NEARXOR BX,BXMOV DI,4 ;要求输入四位十六进制数
4、,置数NCHAR: MOV AH,1INT 21H ;从键盘输入一个字符的系统功能调用CMP AL,30H JB WRONG CMP AL,39H JBE SOLVE1CMP AL,41H JB WRONG CMP AL,46H JBE SOLVE2JMP WRONG ;判断是否输入有效字符SOLVE1:SUB AL,30H;0-9,将 ASCII 码转为二进制数JMP GOONSOLVE2:SUB AL,37H ; A-F,将 ASCII 码转为二进制GOON:MOV CL,4 ;将转换后的二进制数位依次存入寄存器BX SAL BX,CLMOV AH,0ADD BX,AXDEC DI ;输入
5、满四个字符后返回JNZ NCHAR ;正常返回,准备输入下一个数JMP BACK1WRONG: MOV AH,9 ;含有非十六进制数码,报错后退出程序MOV DX,OFFSET WRONG1INT 21HMOV AX,4C00H INT 21HBACK1:RETINPUT ENDP ;输入程序结束;- 显示字符函数DISPLAY PROC NEARMOV CX,16MOV DL,20H ;插入一个空格的系统功能调用MOV AH,02H INT 21HNEXT: SHL BX,1JC CASE1MOV DL,30H 输出字符 0MOV AH,02HINT 21HLOOP NEXT JMP BAC
6、K2CASE1: MOV DL,31H 输出字符 1MOV AH,02H INT 21HLOOP NEXT BACK2:RET DISPLAY ENDPCODE ENDS END MAIN四、运行结果五、附录程序清单4位16进制转换2进制程序输入程序输出程序屏幕显示程序六、心得体会经过这次微机原理课程设计,使我对汇编语言有了一定的了解。充分理解了如何将4位16进制数用汇编语言转换为2进制数输出,以及常见输入输出程序,掌握了流程图的画法,了解了汇编语言的构造和基础语法。虽然只是一个小程序,但这次课程设计使我体会到了,微机原理课程在实际中的应用价值。深刻感到了自己知识的有限和薄弱,我将倍加珍惜往后的课堂时光,努力学习知识并积极实践。 在此,感谢李老师。