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