计算机原理与汇编课设报告.doc_第1页
计算机原理与汇编课设报告.doc_第2页
计算机原理与汇编课设报告.doc_第3页
计算机原理与汇编课设报告.doc_第4页
计算机原理与汇编课设报告.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

姓名:学号:班级:信安1302指导老师: 中南大学汇编语言课程设计 实验报告目录 一设计内容3二设计目的3三设计原理4四设计思路3五程序实现及运行结果7六总结16一设计内容1使用到子程序 1000 以内的素数,以十进制形式输出。2用递归计算50以内fibonacci 数,以十进制形式输出。3从键盘输入年份,通过计算后,输出该年份是否为闰年的信息。4.反向输出一个整数。(如原整数为34512,输出21543)。二设计目的 课程设计是计算机原理与汇编语言教学过程中的重要环节。本课程设计主要目的是使计算机专业学生深入学习计算机原理与汇编语言知识,进一步提高学生计算机原理与汇编语言综合能力和程序设计技能,锻炼运用计算机原理与汇编语言解决实际问题的能力。三设计原理实验一设计原理: 素数是指除了1与它本身,不再有其他可以整除的数。故设计基本原理为:遍历2-100之间的所有数字,如果没有可以整除的数,那么它是素数。将找到的素数存起来,并转化为10进制输出。实验二设计原理: 斐波那契数列是通过前两个数字相加得到第三个,这样的递推关系得到的,所以可以设置两个变量,分别指向第一个和第二个数字,循环得到数列。实验三设计原理:判断输入的数字是否为年份,再判断其是否可以被四百整除,若是则为闰年,若否则继续判断是否能被四整除且不能被一百整除,若是则为闰年(leap),否则为平年。实验四设计原理: 通过键盘将一串字符输入缓冲区后,经过运算,将缓冲区中的字符反向输出。具体为通过0a输入,将字符串输入进缓冲区,运用字符指针,先记录下最后一个字符的指针,然后通过循环,将指针减一前向输出。四设计思路实验一:实验一分为两个模块。1. 得到素数并保存:这里通过两个循环实现,第一个遍历2-100,第二个寻找是否可以整除。如果没有找到可以整除的数,则保存。2. 转换为十进制输出:将之前临时保存的取出来,转化为十进制输出。实验二:实验二分为三个模块。1.得到斐波那契数并保存:这里通过两个中间变量实现,一个指向第一个数,一个指向第二个。每次将他们的和保存起来。2.转换为十进制输出:将之前保存的取出来,转化为十进制输出。3.控制输出格式,每次有空格。程序设计流程图:实验三:实验三分为三个模块。1.输入数字判断合法性 2.将输入的数字乘以十加上原来的数字形成新数据存储 3.将得到的最终数据做除法判断是否为闰年 程序流程图:实验四:实验四分为三个模块。1. 输入模块2. 换行模块3. 反向输出模块 程序流程图:五程序实现实验一源代码与运行结果: datas segment ;此处输入数据段代码 datas endsstacks segment ;此处输入堆栈段代码stacks endscodes segment assume cs:codes,ds:datas,ss:stacksstart: push ds sub 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 ;判断余数是否为零 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,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 ;此处输入数据段代码 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 mov 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 please 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: ;输入年份 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之间 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 display2 ;能被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,4ch 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,ax 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六总结一周的课程设计结束了。通过课程设计,编码能力在一定程度上得到锻炼与提高,对底层语言也有了更直观的认识,对今后更好的运用高级语言是极有好处的,同时也帮助我更直接的理解计算机底层的数据处理原理和运行方式。这过程中也遇到了许多问题,很多是由于基础知识不扎实,实战编码太少造成的。指令不熟悉,如何将思路转化为晦涩的汇编代码便困难了许多。在此过程中通过大量查找资料,和同学沟通讨论,解决了许多困惑,获益良多。之前一直听一些已经工作的学长学姐说起工作之中采用汇编代码优化服务器的例子,在这次课设中老师教了我们如何在c语言中嵌套汇编代码,如何进行汇报代码的debug,感觉在程序的关键部分进行汇编代码的优化是大并发条件下服务器代码的必经之路也是程序员需要掌握的技能。以前觉得汇编很神秘,但是通过这几个小程序的编写,我觉得汇编并没有想象中的那么难,只是更贴近底层需要我们在编写时有更多的耐心,比如在闰年的程序中对于输入的数据进行是否合理的检测

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论