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

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

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一、设计任务 编写一汇编语言程序,要求从键盘接收一个四位的十六进制数,并在终端上 显示与它等值的二进制数和十进制数。 掌握接受键盘数据的方法,了解将键盘数据显示时须转换为 ASCII 码的原理。 二、设计方案 (1)实现十六进制数向二进制数的转换 第一步:实现十六进制数的输入和对应二进制数的转换。利用 DOS 系统功能中的 1 号输入字符的功能,接收输入的十六进制数,将其转换成对应的二进制数(若 是 0-9 之间的数直接屏蔽高 4 位,若是 A-F 之间的数在屏蔽高 4 位后还要加 9)。 BX 中存放的是二进制数的结果,利用算数左移指令使 BX 左移 4 位,然后与下一 次转换后的数相加。如此循环 4 次,得到对应的二进制数。 第二步:实现显示转化后的二进制数。利用 ROL 和 RCL 指令,从最高位起循环取 出每位二进制数,将其转换成对应的 ASSCII 码,调用 DOS 系统功能调用中 2 号 功能显示。 (2)实现十六进制数向十进制数的转换。 第一步:从十六进制向二进制转换,由于十六进制和二进制的特殊关系,它们之 间的转换非常简单。 第二步:从二进制转换为十进制,方法是将要转换的二进制预先放到 AX 寄存器 中,判断 AX 中数的符号,若为负数,则将负号送入输出缓冲区,并求AX 的绝对 值;若 AX 中的数为正数,则不做其他处理,此时 AX 中即为无符号二进制数。然 后将无符号二进制数转换为十进制,可采用将 AX 除以 10,得到第一个商和第一 个余数,第一个余数就是所求十进制的个位,将第一个余数除以 10,得到第二 个商和余数,第二个余数就是十进制的十位数,重复以上过程,一直循环到商为 零时,得到的余数就是所求十进制的最高位数,这就是数制转换中常用的“除模 留余倒排列”法则。 三、流程图 开始 段寄存器和堆栈初始化 显示“请输入十六进制数” 调用 GETNUM 子程序,接收键入数值, 保存在 BX 中 计数值 16 送 CX BX 中内容循环左移 1 位 BL 送 DL,屏蔽掉 DL 高 7 位 DL 加 30H,变成二进制数位对应字符的 ASCII 码 显示 CX 减 1 为零 返回 DOS 主程序框图 保存寄存器 DX 清零 读键入字符的 ASCII 码送 AL 中 是回车键? N (AL)<30H? N 是数字 0~9? N 是字母 A~F? N 是字母 a~f? 将本次键入的数字加进 DX 中 显示“输入出错”信息 回车换行 恢复寄存器 返回  GETNUM 子程序框图 四、程序运行结果截图 通过设计和编写程序代码,运行程序后,其结果先为显示开始界面几位菜单界面,而后 随意输入一个小于 4 位的十六进制数,打完字敲回车,马上出现所对应的十进制数。当 连续输入 4 位的十六进制数直接输出十进制数,同时,再打回车,可以再输入十六进制 数,并且可以循环运行。 五、附录(程序源代码,要求有必要的注释) (1)十六进制转换为二进制 CRLF MACRO MOV AH,02H MOV DL,ODH INT 21H MOV AH,02H MOV DL,0AH INT 21H ENDM DATA SEGMENT MESS DB‘INPUT HEXNUMBER:$’ ERROR DB‘INPUT ERROR!’,0DH,0AH,‘$’ DATA ENDS STACK SEGMENT 32 DUP(?) ? STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:MOV AX,DATA MOV DS,AX MOV ES,AX MOV SP,TOP MOV AH,09H MOV DX,OFFSET MESS INT 21H ;显示提示输入的信息 CALL GETNUM ;接收键入数值送 DX MOV CX,0010H ;16 位 MOV BX,DX TTT: ROL BX,1 ;循环左移 1 位 MOV DL,BL AND DL,01H ;屏蔽掉高 7 位 ADD DL,30H MOV AH,02H INT 21H ;显示二进制数位对应的 ASCII 字符 LOOP TTT MOV AX,4C00H INT 21H GETNUM PROC NEAR ;子程序,接收键入数值送 DX PUSH CX XOR DX,DX GGG: MOV AH,01H INT 21H CMP AL,0DH JZ PPP CMP AL,30H JZ 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

文档评论(0)

lihuamei118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档