微机原理课程设计毕业设计(论文).docx

上传人:啊飒飒 文档编号:9590602 上传时间:2021-03-09 格式:DOCX 页数:15 大小:239.18KB
返回 下载 相关 举报
微机原理课程设计毕业设计(论文).docx_第1页
第1页 / 共15页
微机原理课程设计毕业设计(论文).docx_第2页
第2页 / 共15页
微机原理课程设计毕业设计(论文).docx_第3页
第3页 / 共15页
微机原理课程设计毕业设计(论文).docx_第4页
第4页 / 共15页
微机原理课程设计毕业设计(论文).docx_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《微机原理课程设计毕业设计(论文).docx》由会员分享,可在线阅读,更多相关《微机原理课程设计毕业设计(论文).docx(15页珍藏版)》请在三一文库上搜索。

1、一、设计任务1、 编写一汇编语言程序,要求从键盘接收一个四位的十六进制数,并在终端上 显示与它等值的二进制数和十进制数。2、 掌握接受键盘数据的方法,了解将键盘数据显示时须转换为 ASCII 码的原理。 二、设计方案(1)实现十六进制数向二进制数的转换第一步:实现十六进制数的输入和对应二进制数的转换。利用 DOS 系统功能中的1 号输入字符的功能,接收输入的十六进制数,将其转换成对应的二进制数(若是 0-9 之间的数直接屏蔽高 4 位,若是 A-F 之间的数在屏蔽高 4 位后还要加 9)。BX 中存放的是二进制数的结果,利用算数左移指令使 BX 左移 4 位,然后与下一 次转换后的数相加。如此

2、循环 4 次,得到对应的二进制数。第二步:实现显示转化后的二进制数。利用 ROL 和 RCL 指令,从最高位起循环取出每位二进制数,将其转换成对应的 ASSCII 码,调用 DOS 系统功能调用中 2 号 功能显示。(2)实现十六进制数向十进制数的转换。第一步:从十六进制向二进制转换,由于十六进制和二进制的特殊关系,它们之 间的转换非常简单。第二步:从二进制转换为十进制,方法是将要转换的二进制预先放到 AX 寄存器中,判断 AX 中数的符号,若为负数,则将负号送入输出缓冲区,并求AX 的绝对值;若 AX 中的数为正数,则不做其他处理,此时 AX 中即为无符号二进制数。然后将无符号二进制数转换为

3、十进制,可采用将 AX 除以 10,得到第一个商和第一个余数,第一个余数就是所求十进制的个位,将第一个余数除以 10,得到第二个商和余数,第二个余数就是十进制的十位数,重复以上过程,一直循环到商为零时,得到的余数就是所求十进制的最高位数,这就是数制转换中常用的“除模 留余倒排列”法则。三、流程图开始段寄存器和堆栈初始化显示“请输入十六进制数”调用 GETNUM 子程序,接收键入数值,保存在 BX 中计数值 16 送 CXBX 中内容循环左移 1 位BL 送 DL,屏蔽掉 DL 高 7 位DL 加 30H,变成二进制数位对应字符的 ASCII 码显示CX 减 1 为零返回 DOS主程序框图保存寄

4、存器DX 清零读键入字符的 ASCII 码送 AL 中是回车键?N(AL)30H?N是数字 09?N是字母 AF?N是字母 af?将本次键入的数字加进 DX 中显示“输入出错”信息回车换行恢复寄存器返回GETNUM 子程序框图四、程序运行结果截图通过设计和编写程序代码,运行程序后,其结果先为显示开始界面几位菜单界面,而后 随意输入一个小于 4 位的十六进制数,打完字敲回车,马上出现所对应的十进制数。当 连续输入 4 位的十六进制数直接输出十进制数,同时,再打回车,可以再输入十六进制 数,并且可以循环运行。五、附录(程序源代码,要求有必要的注释) (1)十六进制转换为二进制CRLF MACROM

5、OV AH,02HMOV DL,ODHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDATA SEGMENTMESS DBINPUT HEXNUMBER:$ERROR DBINPUT ERROR!,0DH,0AH,$DATA ENDSSTACK SEGMENTSSSSS 32 DUP(?)TTTTT ?STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV ES,AXMOV SP,TOPMOV AH,09HMOV DX,OFFSET MES

6、SINT 21H ;显示提示输入的信息CALL GETNUM ;接收键入数值送 DXMOV CX,0010H ;16 位MOV BX,DXTTT: ROL BX,1 ;循环左移 1 位MOV DL,BLAND DL,01H ;屏蔽掉高 7 位ADD DL,30HMOV AH,02HINT 21H ;显示二进制数位对应的 ASCII 字符 LOOP TTTMOV AX,4C00HINT 21HGETNUM PROC NEAR ;子程序,接收键入数值送 DXPUSH CXXOR DX,DXGGG: MOV AH,01HINT 21HCMP AL,0DHJZ PPPCMP AL,30HJZ KKKS

7、UB AL,30HCMP AL,0AHJB GETSCMP AL,11HJB KKKSUB AL,07HCMP AL,0FHJBE GETSCMP AL,2AHJB KKKCMP AL,2FHJA KKKSUB AL,20HGETS:MOV CL,04HSHL DX,CLXOR AH,AHADD DX,AXJMP GGGKKK: MOV AH,09HMOV DX,OFFSET ERRORINT 21HPPP: PUSH DXCRLFPOP DXPOP CXRETGETNUM ENDPCODE ENDSEND START(2)十六进制转换为十进制DATA SEGMENTCR EQU 0DH;回车

8、LF EQU 0AH;换行DAT1 DBQingshurushiliujinzhishu:,CR,LF,$;请输入十六进制数 DAT2 DBShuchushijinzhishu:,CR,LF,$;输出十进制数DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATAMAIN PROC FARSTART:CALL HEXIBIN ;16-2CALL CRLF ;换行CALL BINIDEC ;2-10CALL CRLFJMP MAIN ;输入下一个四位十六进制数RETMAIN ENDPHEXIBIN PROC NEARMOV AX,DATAMOV DS,AXMOV

9、DX,OFFSET DAT1 ;DS:DX 指向字符串 DAT1MOV AH,09H ;DOS 9 号功能调用INT 21HMOV BX,0 ;将 BX 清零MOV DX,0 ;将 DX 清零NEWCHAR:CMP Dx,04H ;用 DX 控制输入数的个数为 4 位JZ EXITMOV AH,01H ;键盘输入数据INT 21H ;DOS 1 号功能调用SUB AL,30H ;ASCII 转为 2 进制JL EXIT ;如果小于零就跳出,输入不合法CMP AL,10D ;判断是否超出十JL ADD_TO ;如果没超出十就是十进制数 ;如果超出十那么可能是 A 到 F 的字母输入 SUB AL

10、,27H ;将 ASCII 变为十进制字母要加九CMP AL,0AH ;将它与字母 a 转化成的数比较JL EXIT ;如果小就跳转CMP AL,10H ;将它与字母 f 的转化码比较JGE EXIT ;如果大就跳出ADD_TO:MOV CL,4SHL BX,CLMOV AH,0ADD BX,AXINC DXJMP NEWCHAR ;在 BX 中存储转化的二进制数为二进制转化为十进制做准备EXIT:RETHEXIBIN ENDPBINIDEC PROC NEARMOV AX,DATAMOV DS,AXMOV DX,OFFSET DAT2MOV AH,09HINT 21HMOV CX,10000

11、DCALL DEC_DIVMOV CX,1000DCALL DEC_DIVMOV CX,100DCALL DEC_DIVMOV CX,10DCALL DEC_DIVMOV CX,1DCALL DEC_DIVRETDEC_DIV PROC NEARMOV AX,BX ;将 BX 的数送入 AX 中 MOV DX,0 ;将被除数高位清零 DIV CXMOV BX,DX ;余数保存在 BX 中 MOV DL,AL ;商放入 DL 显示 ADD DL,30H ;将数变为 ASCII 码 MOV AH,02HINT 21HRETDEC_DIV ENDPBINIDEC ENDPCRLF PROC NEARMOV DL,0AHMOV AH,02HINT 21HMOV DL,0DHMOV AH,02HINT 21HRETCRLF ENDPCODE ENDSEND START

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1