微机原理课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计说明书
课程名称:微机原理课程设计
题目:数制转换实验
院系:理学院
专业班级:应用物理13-1
学号: 2013305188
学生姓名:李立才
指导教师:李声
2016年 6 月 17 日
安徽理工大学课程设计(论文)任务书
年月日
安徽理工大学课程设计(论文)成绩评定表
目录
1. 课程设计实验目的与要求 (1)
1.1从键盘输入数据并显示 (1)
1.2将键盘输入的小写字母转换成大写字母 (1)
2.课程设计实验内容 (1)
2.1从键盘输入数据并显示 (1)
2.2将键盘输入的小写字母转换成大写字母 (2)
3.课程设计实验流程图 (2)
3.1从键盘输入数据并显示 (2)
3.2将键盘输入的小写字母转换成大写字母 (3)
4.课程设计实验程序 (4)
4.1从键盘输入数据并显示 (4)
4.2将键盘输入的小写字母转换成大写字母 (8)
5. 课程设计实验运行结果 (12)
5.1从键盘输入数据并显示 (12)
5.2将键盘输入的小写字母转换成大写字母 (12)
6. 课程设计实验心得 (13)
1.课程设计实验目的与要求
1.1从键盘输入数据并显示
1.掌握键盘接受数据的方法,并了解将键盘数据显示时必须转换为
ASCII码的原理,编写程序,将键盘接受到的四位十六进制数据转换
为等值的二进制数显示。
2.掌握子程序定义和调用的方法。
3.掌握循环移位指令的用法和无符号数比较大小的方法。
1.2将键盘输入的小写字母转换成大写字母
1.了解小写字母和大写字母在计算机内的表示方法,并学习如何进行
转换,编写程序,接受键盘字符,并将其中的小写字母转变为大写
字母,然后显示在屏幕上。
2.熟练掌握汇编语言程序设计的方法及上机步骤
3.掌握将小写字母转换为相应的大写字母的方法
4.掌握子程序的设计方法
5.掌握DOS功能的调用方法
2.课程设计实验内容
2.1从键盘输入数据并显示
为了解小写字母和大写字母在计算机内的表示方法,并学习如何进行转换,编写程序,接受键盘字符,并将其中的小写字母转变为大写字母,然后显示在屏幕上。
课程设计要求进行小写字母到大写字母的转换。
其实字母大小写的区别在于他们的ASCII码范围,它们之间的转换其实就是加减相应的ASCII码值。
在判断输入的字母是大写的还是小写的(即判断输入符号ASCII码在41H~5AH还是在61H~7AH内)之后,决定判断是加上还是减去ASCII码值
2.2将键盘输入的小写字母转换成大写字母
第一步是实现小写字母向大写字母的转换,主要利用小写字母比大写字母大20H的关系。
第二部要键盘输入,显示输出。
3.课程设计实验流程图
3.1从键盘输入数据并显示
图3-1 实验流程图
3.2将键盘输入的小写字母转换成大写字母
图3-2 实验流程图
4.课程设计实验程序
4.1从键盘输入数据并显示
data segment
; 数据区定义开始
strr db 'please input hexadecimal number:$' errr db 'this is an error number!$'
; 数据区定义结束
data ends
stack segment stack
; 堆栈区定义开始
db 100 dup(?)
; 堆栈区定义结束
stack ends
code segment
; 代码区定义开始
assume cs:code,ds:data,ss:stack
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
; 设定区址
mov cx,00h
xor bx,bx
call getnum
; 按提示输入四个字符,存入 BX 中
mov cx,10h
; 用于下面的 loop next 处,因为 BX 共有 16 位
call newline
; 转到新行
mov dl,0ah
mov ah,02h
int 21h
; 换行
mov dl,0dh
mov ah,02h
int 21h
; 回车
next: rol bx,1
; 把 BX 所存字符的二进制的最高位移到最低位
mov dl,bl
and dl,01h
; 获取最低位
add dl,30h
; 将最低位转成数字,即字符 '0' 或 '1'
mov ah,02h
int 21h
; 即将之前 BX 的最高位输出到屏幕
loop next
; 循环,将 BX 的每一位都输出来
mov ah,4ch
int 21h
; 完成
; ----------------------------------------
; 功能:接受四个字符,必须输入 0-9 A-F,否则提示错要重输; 假设先后输入 1 2 3 4,则最后 BX 为 0x1234
getnum proc near
; 子过程 getnum 开始
again: push cx
mov cl,4
shl bx,cl
; 把 BX 左移四位,空出了低四位
again1: call newline
; 转到新行
lea dx,strr
mov ah,09h
int 21h
; 输出 "please input hexadecimal number:"
mov ah,01h
int 21h
; 接受输入字符
cmp al,46h
ja done
; 如果字符比 'F' 大则转到 done
cmp al,41h
jb next1
; 如果字符比 'A' 小则转到 next1
sub al,07h
; 如果字符在 'A' 和 'F' 间,则减七
; 提示:数字 1-9 为 0x31-0x39,字符 A-F 处理后为 0x3A-0x3F,正好接在数字后
jmp tt
next1: cmp al,39h
ja done
; 如果字符比 '9' 大则转到 done
tt: cmp al,30h
jb done
; 如果字符比 '0' 小则转到 done
sub al,30h
; 减 0x30,于是原字符 0-9 A-F 变成相应的十六进制数 0x0-0xF
mov ah,00h
add bx,ax
; 把 0x0-0xF 存到 bx 的低四位
pop cx
inc cx
cmp cx,04h
; 是否循环了四次
je tt2
; 是的话就跳到 tt2 结束
jmp again
; 否则跳到 again 再来一次
done: call newline
lea dx,errr
mov ah,09h
int 21h
; 如果输入的字符不符合要求,输出错误提示
jmp again1
; 转到 again1 再次接受输入
tt2: ret
; 子过程 getnum 结束
getnum endp
; ----------------------------------------
; 功能:输出回车换行符,即转到新行
newline proc near
; 子过程 newline 开始
mov dl,0ah
; 设输出字符为 0x0A,即换行符
mov ah,02h
int 21h
mov dl,0dh
; 设输出字符为 0x0D,即回车符
mov ah,02h
int 21h
ret
; 子过程 newline 结束
newline endp
; ----------------------------------------
; 代码区定义结束
code ends
; 指定执行起点
end start
4.2将键盘输入的小写字母转换成大写字母
DATAS SEGMENT
MESSAGE DB 'Welcome to the system!',13,10,13,10
DB 'The function of the program is changing small letters to capital letters.',13,10
DB 'If you enter capital letters or numbers there will be no changes.',13,10,13,10
DB 'Please enter a string.',13,10,'$'
CR DB 13,10,'$' ;回车换行
STRING DB 100
DB 0
DB 80 DUP(0) ;定义缓冲区
AGAIN DB 'Do you want to try again?(Y or N)',13,10,'$'
ERROR DB 'ERROR!',13,10,'Please enter the right commomds.',13,10,'$' ;错误提示
DATAS ENDS
STACKS SEGMENT
DB 200 DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
HEAD:
MOV AX,DATAS
MOV DS,AX
LEA DX,MESSAGE ;输出提示语
MOV AH,09H
INT 21H
LEA DX,STRING
MOV AH,0AH
INT 21H ;把字符串输入到BUF区
LEA DX,CR
MOV AH,09H
INT 21H ;以上为回车换行
LEA SI,STRING+2 ;把字符串首地址存入BX
MOV CL,STRING+1 ;把字符个数存CX
MOV CH,0
NEXT1:
MOV DL,[SI]
CMP DL,'a'
JB NEXT2
CMP DL,'z'
JA NEXT2 ;ASCII码小于a和大于z的跳过,其余的减32 SUB DL,20H ;大小写字母的ASCII码差32
NEXT2:
MOV AH,02H
INT 21H
INC SI ;BX自加,判断下一个字符
DEC CX ;CX自减,最终将是0
JNE NEXT1 ;CX非零时,跳回NEXT1
MOV DX,OFFSET CR ;输出回车换行
MOV AH,09H
INT 21H
JMP EXIT
OVERFLOW: ;错误提示
LEA DX,CR
MOV AH,09H
INT 21H
LEA DX,ERROR
MOV AH,09H
INT 21H
EXIT:
LEA DX,CR
MOV AH,09H
INT 21H
LEA DX,AGAIN ;提示是否再试一次
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
PUSH AX
LEA DX,CR
MOV AH,09H INT 21H
POP AX CMP AL,'Y' JZ HEAD CMP AL,'y' JZ HEAD CMP AL,'N' JZ OVER CMP AL,'n' JZ OVER
JMP OVERFLOW
OVER:
MOV AH,4CH INT 21H
CODES ENDS
END START
5.课程设计实验运行结果
5.1从键盘输入数据并显示
图5-1 实验运行结果
5.2 将键盘输入的小写字母转换成大写字母
图5-2 实验运行结果
6.课程设计实验心得
通过这次课程设计,使我认识到自己理论知识掌握不够,对于许多指令和一些基本的编程方法都掌握不清晰。
为了顺利完成课程设计,我重新拿起课本,用心阅读,问题才一一解决。
由此看来,知识只有在实践中才能真正掌握。
难怪人们说汇编语言编程必须在使用中慢慢理解。
本学期做了许多微机原理的实验,开始以为这次课程设计会像前几次实验简单。
直到要编写程序实现的时候,才发现自己对汇编程序的了解确实还不够,尤其是编程方面的能力有待提高。
在不断地再次学习和理解过程中,我慢慢掌握了更多汇编语言的应用知识,最终写出了大小写字母转换的程序。
把编写好的程序输入软件时候,也出现了许多小问题,比如没有定义变量等等。
归纳起来都是因为编程掌握不牢固,写程序没有条理,加上自己粗心大意的恶习依旧没改正造成的,以后需要努力改正。
总的来说,这次课程设计,自己受益匪浅。
不但加固了微机原理知识的理解,而且加强了对汇编语言的应用能力。
同时,非常感谢指导老师与同学给予我在编程方面的帮助,让我能够完成这次设计。
参考文献
[1] 姚燕南,薛钧义主编.微型计算机原理(第四版)[M],西安:西安电子科技大学出版社,2003
[2] 潘峰主编.微型计算机原理与汇编语言(第三版)[M],西安电子工业出版社,2003
[3] 雏逢兴编著.计算机硬件技术基础[M],北京:高等教育出版社,1998
[4] 王永山等编著.微型计算机原理与应用[M],西安:电子科技大学出版社,1999
[5] 舒贞权等编著.Intel 8086/8088系列微型计算机原理[M].西安:西安交通大学出版社,1993
[6] Hwang S, Choi S. Ironbird Ground Test for Tilt Rotor Unmanned Aerial Vehicle[J]. International Journal of Aeronautical and Space Science. 2010, 11(4): 313-318
[7]Miller M, Narkiewicz J. Tiltrotor modelling for simulation in various flight conditions[J]. Journal of Theoretical and Applied Mechanics. 2006, 44(4): 881-906。