中南大学计算机原理与汇编课设报告

上传人:第*** 文档编号:56889282 上传时间:2018-10-16 格式:DOCX 页数:22 大小:167.30KB
返回 下载 相关 举报
中南大学计算机原理与汇编课设报告_第1页
第1页 / 共22页
中南大学计算机原理与汇编课设报告_第2页
第2页 / 共22页
中南大学计算机原理与汇编课设报告_第3页
第3页 / 共22页
中南大学计算机原理与汇编课设报告_第4页
第4页 / 共22页
中南大学计算机原理与汇编课设报告_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《中南大学计算机原理与汇编课设报告》由会员分享,可在线阅读,更多相关《中南大学计算机原理与汇编课设报告(22页珍藏版)》请在金锄头文库上搜索。

1、中南大学 计算机原理与汇编语言 课程设计报告 题 目 汇编语言课程设计 学生姓名 指导教师 王磊 学 院 信息科学与工程 专业班级 信息安全 1302 完成时间 2015/7/12 计算机原理与汇编课程设计 2 目录 第一章:反向输出一个整数.3 一、需求分析3 二、总体设计3 三、详细设计3 四、调试分析6 五、测试结果7 六、总结7 七、参考文献7 八、附录8 第二章:判断年份是否是闰年.10 一、需求分析10 二、总体设计10 三、详细设计10 四、调试分析12 五、测试结果12 六、总结13 七、参考文献13 八、附录13 第三章:输出 1000 以内的素数.17 一、需求分析17 二

2、、总体设计17 三、详细设计17 四、调试分析19 五、测试结果20 六、总结20 七、参考文献20 八、附录21 计算机原理与汇编课程设计反向输出一个整数 3 第一章:反向输出一个整数 一、需求分析 本实验的功能是输入一个整数,反向输出,如输入 12345 输出 54321,但本实 验限定输入整数最长的位数不超过 10。如果想要实现 10 位以上整数的反向输出, 则需要修改程序的数据段定义。 二、总体设计 提示输入,输入整数位数,输入整数,定义用于输入的函数 input 和用于输出 的循环函数 output 三、详细设计 1、两个字符串用于输入的提示,先输入整数位数,再输入整数: strin

3、g1 db please the number of digit(less than 10):,13,10,$ string2 db 13,10,please input the digit:,13,10,$ 用 int 21h 进行输出 2、输入的位数用作输入整数时的循环次数 3、定义用于输入的函数 数据段定义: digit dw ?,?,?,?,?,?,?,?,?,? 这样定义后最多存入 10 位 mov cx,bx cx 代表循环次数,可用户输入 lea si,digit ;si指向digit首地址 input: mov ah,01h ;输入 int 21h mov si,al ;将输入

4、的数存入数组 inc si ;si指向下一位 loop input 计算机原理与汇编课程设计反向输出一个整数 4 把输入的整数存入 digit 中 4、定义用于反向输出的函数 output: mov dl,si mov ah,02h ;输出 int 21h dec si ;si指向前一位 loop output 5、整个程序顺序执行 流程图: 图 1-1 整体流程图 计算机原理与汇编课程设计反向输出一个整数 5 计算机原理与汇编课程设计反向输出一个整数 6 四、调试分析 在设计程序过程中,首先一个问题就是如何输入一个多位的整数,因为用 mov ah,01h,int 21h 语句输入时,只能输入

5、以为数字。在这个程序里相当于定义了一个 数组来存放每一位数字。用数组也能方便反向输出,但是最大的问题是寻址问题, 实验过程中出现了很多问题,所用寻址方式不当导致程序不能运行或者运行错误。 本实验还可以进一步设计,实现当输入不当是提示出错等功能 五、测试结果 图 1-4 反向输出测试结果 六、总结 本实验总体来说比较简单,只要输入时存入数组,就可以方便地反向输出,把 一个整数分成每一位数字来实现。在这个过程中,我首先熟悉了循环体的使用,输 入输出函数都是循环函数,用 loop 实现 cx 存储循环次数。 一个重点就是如何寻址。因为要把一个整数的每一位存入数组,那么存数和取 数就是重点。这个实验让

6、我加深了认识,也更熟练。不断调试的过程中也可以熟练 的用 debug 进行单步调试,观察各个寄存器的变化。 总体来说,这个实验让我能够简单的熟悉汇编语言的编程过程,对他有了一些 更加深刻的认识。也能够简单的看懂一些程序代码,对我学习汇编有很大的帮助。 计算机原理与汇编课程设计反向输出一个整数 7 七、参考文献 【1】汇编语言程序设计第二版 沈美明 温冬婵 【2】程序设计实验指导 蔡启先 王志文 黄晓璐 八、附录 源代码: DATAS SEGMENT ;此处输入数据段代码 string1 db please the number of digit(less than 10):,13,10,$ s

7、tring2 db 13,10,please input the digit:,13,10,$ digit dw ?,?,?,?,?,?,?,?,?,? hc db 13,10,output:,$ DATAS ENDS STACKS SEGMENT STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX sub ax,ax lea dx,string1 ;输出字符串1 mov ah,09h int 21h mov ah,01h ;输入个数 int 21h sub al,

8、30h ;转换ascii码 mov bl,al ;存入bx中 计算机原理与汇编课程设计反向输出一个整数 8 mov cx,bx ;循环次数 lea dx,string2 ;输出字符串2 mov ah,09h int 21h lea si,digit ;si指向digit首地址 input: mov ah,01h int 21h mov si,al inc si loop input lea dx,hc ;提示结果输出 mov ah,09h int 21h mov cx,bx ;循环次数 dec si ;si指向最后一位 output: mov dl,si ;取出数组值 mov ah,02h i

9、nt 21h dec si ;si指向前一位 loop output MOV AH,4CH INT 21H CODES ENDS END START 计算机原理与汇编课程设计闰年的判断 9 第二章:判断年份是否是闰年 一、需求分析 本程序用于在键盘输入年份,判断该年份是否是闰年,并输出结果。本程序 年份均为四位。 二、总体设计 提示输入年份,将年份调用 input 函数以每一位数字存入 year1 数组中, change 函数将数组中的数转换为 16 进制数存入 year 变量中。 判断是否为闰年,并输出结果。 三、详细设计 1、定义输入函数,将年份的每一位存入数组year1中,循环4次,并将

10、其ascii码转化 mov cx,4 lea si,year1 input: ;输入年份,存入year mov ah,01h int 21h sub al,30h mov bl,al mov si,bl inc si loop input 2、定义转换函数,将数组中的每一位数还原为一个数,并将此年份数存入 year 中, 一下为 change 函数的部分代码,以此类推 change: lea si,year1 mov bx,0fh mov ax,si 计算机原理与汇编课程设计闰年的判断 10 and ax,bx mov dx,1000 mul dx add year,ax inc si 共有四

11、个类似的程序块,用于将每一位数合在一起,还原原本年份值。 3、判断该年份能否被 400 整除,若能,则输出 yes,若不能则判断能否被 4 整除, judge1 函数为判断能否被 4 整除,若能,则判断能否被 100 整除,转到 judge2 函数,若不能则输出 no。 mov ax,year cwd mov cx,190h div cx cmp dx,0 jz output1 jnz judge1 jmp exit 流程图: 计算机原理与汇编课程设计闰年的判断 11 图 2 整体流程图 四、调试分析 在完成这个程序过程中,怎样将存入数组的每一位还原为年份值是一个重点, 我没有使用循环体,而是

12、直接写了四个程序块,将每一位的值相加。用循环体可以 让程序更简洁。用 debug 中的 P 语句进行单步执行,观察每一次执行后各寄存器的 变化,查找程序哪一步或者哪个值传的不正确,最终完成程序编写。 五、测试结果 图 2.1 判断闰年测试截图 1 计算机原理与汇编课程设计闰年的判断 12 图 2.2 判断闰年测试结果 2 六、总结 这个程序在写的过程中出现了很多错误,开始的时候我直接把存在数组中的 每个数以移位的方式存储在了 year 中,调试后发现这样的结果已经更改了原本输入 的值,后来想用与循环实现 change 函数,但是由于对寻址方式还不是特别熟练因而 没能用循环体,而是直接写了四个程

13、序块,将其转化。 虽然这个程序不难,但是由于我对汇编还不熟练,寄存器功能掌握不好,各 种指令中隐含的寄存器的变化不是很清楚,所以花费了很多时间来调试,每一个函 数功能的实现都是单独调试好函数后才放在一起组合成完整的程序。 判断过程中,用除法如果不扩展的话就会出现溢出错误,通过这个程序我学 会了如何用 cwd 扩展。 在这个过程中,我由于有点地方思考方向错误因而浪费了很多时间,最后终 于完成了程序,给了我信心,我也从中学到了很多。 七、参考文献 【1】汇编语言程序设计第二版 沈美明 温冬婵 【2】程序设计实验指导 蔡启先 王志文 黄晓璐 八、附录 DATAS SEGMENT ;此处输入数据段代码

14、 year1 db ?,?,?,? string db please input year:,13,10,$ 计算机原理与汇编课程设计闰年的判断 13 year dw 0 string1 db 13,10,yes,13,10,$ string2 db 13,10,no,13,10,$ DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 sub ax,ax lea dx,s

15、tring mov ah,09h int 21h mov cx,4 lea si,year1 input: ;输入年份,存入year mov ah,01h int 21h sub al,30h mov bl,al mov si,bl inc si loop input change: ;转换函数,将存在数组中的每一位还原为原本的数值 lea si,year1 mov bx,0fh ;取后四位 mov ax,si 计算机原理与汇编课程设计闰年的判断 14 and ax,bx mov dx,1000 ;将其每一位还原原本的十进制值 mul dx add year,ax ;year存储单元最初为1,存放每一位还原十进制后的和 inc si ;si指向下一个单元 mov ax,si and ax,bx mov dx,100 mul dx add year,ax inc si mov ax,si and ax,bx mov dx,10 mul dx add year,ax inc si mov ax,si and ax,bx add year,ax ;* mov ax,year ;判断函数 cwd ;转换为双字,若不扩展则除

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号