计算机原理与汇编课设报告.doc

上传人:仙人指路1688 文档编号:2882140 上传时间:2023-03-01 格式:DOC 页数:17 大小:277KB
返回 下载 相关 举报
计算机原理与汇编课设报告.doc_第1页
第1页 / 共17页
计算机原理与汇编课设报告.doc_第2页
第2页 / 共17页
计算机原理与汇编课设报告.doc_第3页
第3页 / 共17页
计算机原理与汇编课设报告.doc_第4页
第4页 / 共17页
计算机原理与汇编课设报告.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《计算机原理与汇编课设报告.doc》由会员分享,可在线阅读,更多相关《计算机原理与汇编课设报告.doc(17页珍藏版)》请在三一办公上搜索。

1、姓名:学号:班级:信安1302指导老师: 中南大学汇编语言课程设计 实验报告目录 一设计内容3二设计目的3三设计原理4四设计思路3五程序实现及运行结果7六总结16一设计内容1使用到子程序 1000 以内的素数,以十进制形式输出。2用递归计算50以内Fibonacci 数,以十进制形式输出。3从键盘输入年份,通过计算后,输出该年份是否为闰年的信息。4.反向输出一个整数。(如原整数为34512,输出21543)。二设计目的 课程设计是计算机原理与汇编语言教学过程中的重要环节。本课程设计主要目的是使计算机专业学生深入学习计算机原理与汇编语言知识,进一步提高学生计算机原理与汇编语言综合能力和程序设计技

2、能,锻炼运用计算机原理与汇编语言解决实际问题的能力。三设计原理实验一设计原理: 素数是指除了1与它本身,不再有其他可以整除的数。故设计基本原理为:遍历2-100之间的所有数字,如果没有可以整除的数,那么它是素数。将找到的素数存起来,并转化为10进制输出。实验二设计原理: 斐波那契数列是通过前两个数字相加得到第三个,这样的递推关系得到的,所以可以设置两个变量,分别指向第一个和第二个数字,循环得到数列。实验三设计原理:判断输入的数字是否为年份,再判断其是否可以被四百整除,若是则为闰年,若否则继续判断是否能被四整除且不能被一百整除,若是则为闰年(Leap),否则为平年。实验四设计原理: 通过键盘将一

3、串字符输入缓冲区后,经过运算,将缓冲区中的字符反向输出。具体为通过0A输入,将字符串输入进缓冲区,运用字符指针,先记录下最后一个字符的指针,然后通过循环,将指针减一前向输出。四设计思路实验一:实验一分为两个模块。1. 得到素数并保存:这里通过两个循环实现,第一个遍历2-100,第二个寻找是否可以整除。如果没有找到可以整除的数,则保存。2. 转换为十进制输出:将之前临时保存的取出来,转化为十进制输出。实验二:实验二分为三个模块。1.得到斐波那契数并保存:这里通过两个中间变量实现,一个指向第一个数,一个指向第二个。每次将他们的和保存起来。2.转换为十进制输出:将之前保存的取出来,转化为十进制输出。

4、3.控制输出格式,每次有空格。程序设计流程图:实验三:实验三分为三个模块。1.输入数字判断合法性 2.将输入的数字乘以十加上原来的数字形成新数据存储 3.将得到的最终数据做除法判断是否为闰年 程序流程图:实验四:实验四分为三个模块。1. 输入模块2. 换行模块3. 反向输出模块 程序流程图:五程序实现实验一源代码与运行结果: DATAS SEGMENT ;此处输入数据段代码 DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: push ds su

5、b ax,ax push ax MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 mov cx,1000 ;cx储存外层循环次数999次 dec cx mov si,1 ;si依次储存1到1000,为要要判断的数;外层循环loop1: mov di,cx ;用di暂时储存外层循环次数 inc si ;si自加1 mov bp,2 ;bp储存除数,用来判断素数;内层循环loop2: mov cx,si ;内层循环次数为当前要判断的数的大小 mov ax,si ;ax储存当前要判断的数 mov dx,0 ;通过除法判断该数是否为素数 div bp cmp dx,0 ;判断余数是否

6、为零 jz next ;若是,则跳转至next inc bp ;否则除数自加1,再进行判断 loop loop2next: mov ax,si ;用ax重新记录当前要判断的数 cmp ax,bp ;比较当前除数与被除数的大小 jz cotinue ;若相等,证明该数是素数,则跳转至cotinue进行输出 jnz first ;否则,该数不是素数,跳转至first对下一个数进行判断cotinue: mov dh,100;输出百位 mov bx,ax div dh mov dl,al add dl,30h mov ah,2 int 21h mov ax,bx;输出十位 div dh mov dl,

7、ah mov ah,0 mov al,dl mov dh,10 div dh mov dl,al add dl,30h mov ah,2 int 21h mov ax,bx;输出个位 div dh mov dl,ah add dl,30h mov ah,2 int 21h mov dl,32;输出两个空格 mov ah,2 int 21h mov dl,32 mov ah,2 int 21h first: mov cx,di loop loop1 MOV AH,4CH INT 21HCODES ENDS END START实验二源代码与运行结果:DATAS SEGMENT ;此处输入数据段代码

8、 DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX mov ax,0 mov bx,1 mov dx,1 shuru: call shuchu add bx,ax mov ax,dx mov dx,bx cmp bx,50 js shuru ;此处输入代码段代码 MOV AH,4CH INT 21Hshuchu proc near push ax push bx push cx push dx mo

9、v cx,10d call switch mov cx,1d call switch mov dl,20h mov ah,2 int 21h pop dx pop cx pop bx pop ax ret switch proc near mov ax,bx mov dx,0 div cx mov bx,dx mov dl,al add dl,30h mov ah,2 int 21h ret switch endp shuchu endp CODES ENDSEND START实验三源代码与运行结果:DATA SEGMENT NUM DB 10 DUP(?) STRINGIN DB pleas

10、e input the year:,0AH,0DH,$ ERROR DB input error or not in the range!,0DH,0AH,$ STRING1 DB not leap year!,0DH,0AH,$ STRING2 DB leap year!,0DH,0AH,$ CLRF DB 0DH,0AH,$ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,10 MOV SI,0 LEA DX,STRINGIN MOV AH,9 INT 21H LOOPIN:

11、 ;输入年份 MOV AH,1 INT 21H CMP AL,1BH JZ EXIT CMP AL,0DH JZ JUDGE1 SUB AL,30h MOV NUMSI,AL INC SI LOOP LOOPIN JUDGE1: ;是否是4位 LEA DX,CLRF MOV AH,9 INT 21H CMP SI,4 JNZ STOP MOV CX,4 JMP JUDGE2 JUDGE2: ;是否是数字 DEC SI MOV BL,NUMSI CMP BL,0 JB STOP CMP BL,9 JA STOP CMP SI,0 LOOP JUDGE2 JUDGE3: ;是否在1900到2100

12、之间 MOV AL,NUM0 MOV BL,10 MUL BL MOV BL,NUM1 ADD AX,BX CMP AX,19 JB STOP CMP AX,21 JAE STOP JUDGE4: ;是否是闰年 MOV AL,NUM2 MOV BL,10 MUL BL MOV BL,NUM3 ADD AX,BX CMP AX,0 JNZ CONTINUE ;能被100整除 MOV AL,NUM0 MOV BL,10 MUL BL MOV BL,NUM1 ADD AX,BX MOV BL,4 DIV BL CMP AH,0 JNZ DISPLAY1 ;不能被400整除,不是闰年 JMP DISP

13、LAY2 ;能被400整除,是闰年 CONTINUE: ;不能被100整除 MOV BL,4 DIV BL CMP AH,0 JNZ DISPLAY1 ;不能被4整除,不是闰年 JMP DISPLAY2 ;能被4整除,是闰年 DISPLAY1: ;显示是闰年 LEA DX,STRING1 MOV AH,9 INT 21H JMP START DISPLAY2: ;显示不是闰年 LEA DX,STRING2 MOV AH,9 INT 21H JMP START STOP: ;显示输入错误 LEA DX,ERROR MOV AH,9 INT 21H JMP START EXIT: MOV AH,4

14、CH INT 21H CODE ENDS END START 输入错误:闰年:非闰年:实验四源代码与运行结果: DATAS SEGMENT A db 20 dup (?) str1 db 10,13,input error,please input a number:,$ str2 db 10,13,the result is:,$;此处输入数据段代码 DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,A

15、X mov si,0input: mov ah,1 int 21h cmp al,0dh jz newline mov Asi,al inc si jmp inputnewline: lea dx,str2 mov ah,9 int 21h output: dec si mov dl,Asi mov ah,2 int 21h cmp si,0 jnz output MOV AH,4CH INT 21H ;此处输入代码段代码 CODES ENDS END START六总结一周的课程设计结束了。通过课程设计,编码能力在一定程度上得到锻炼与提高,对底层语言也有了更直观的认识,对今后更好的运用高级语言

16、是极有好处的,同时也帮助我更直接的理解计算机底层的数据处理原理和运行方式。这过程中也遇到了许多问题,很多是由于基础知识不扎实,实战编码太少造成的。指令不熟悉,如何将思路转化为晦涩的汇编代码便困难了许多。在此过程中通过大量查找资料,和同学沟通讨论,解决了许多困惑,获益良多。之前一直听一些已经工作的学长学姐说起工作之中采用汇编代码优化服务器的例子,在这次课设中老师教了我们如何在c语言中嵌套汇编代码,如何进行汇报代码的debug,感觉在程序的关键部分进行汇编代码的优化是大并发条件下服务器代码的必经之路也是程序员需要掌握的技能。以前觉得汇编很神秘,但是通过这几个小程序的编写,我觉得汇编并没有想象中的那

17、么难,只是更贴近底层需要我们在编写时有更多的耐心,比如在闰年的程序中对于输入的数据进行是否合理的检测以增强程序的健壮性。在课设的检查时我也发现了自己的一些问题,比如学习时存在着想当然的问题。db我一直以为是double byte的意思,之前在写代码的时候也没有在这方面产生疑问,老师检查的时候才知道是define word的意思。对于另外的一些问题,我也是知其然不知其所以然,比如10 dup(?)这一句代码我只知道是开辟10个字节的空间 ,但是开辟空间的内容是什么我就不是很清楚,查阅资料后知道是不会进行数据的初始化。这一些都是书本上没有的东西,但是在学习中我们还是应该尽可能多的去了解和掌握我们学到的东西。

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号