汇编课程设计_第1页
汇编课程设计_第2页
汇编课程设计_第3页
汇编课程设计_第4页
汇编课程设计_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、一、实验目的课程设计是计算机原理与汇编语言教学过程中的重要环节。本课程设计主要目的是使计算机专业学生深入学习计算机原理与汇编语言知识,进一步提高学生计算机原理与汇编语言综合能力和程序设计技能,锻炼运用计算机原理与汇编语言解决实际问题的能力。二、实验要求1认真查阅资料,独立完成设计任务,每道题都必须上机通过。2独立思考,培养综合分析问题解决问题和调试程序的能力。3按时完成课程设计,写出课程设计报告。三、实验内容1.输入 2030 之间的 n 值, 用递归计算fibonacci 数, 以十进制数输出. 、概要设计程序要求键盘输入2030之间的 n 值,首先要设计一个输入子程序用来得到输入的 n 值

2、,然后设计一个递归计算fibonacci数的子程序,最后把得到的结果调用十进制输出子程序输出。程序流程图如下:屏幕输出提示信息程序开始键盘输入n 值递归计算fibonacci数判 断 递 归 是否大于n 输出第 n 个fibonacci数是否程序结束、具体设计主程序.model small .data b1 db fibonacci is: $用于输出提示信息ddw ?存放数的低位gdw ?存放数的高位countdb ?存放输入的 n 值.stack .code main proc far movax,data movds,ax call tishi输出提示信息call shuru调用输入子程

3、序call huiche回车换行mov ax,1 mov bx,1 mov cx,0 mov dx,0 call f计算 fibonacci数call out10 十进制输出计算结果mov ah,4ch int 21h mainendp输入子程序shuru proc near mov ah,1h;键盘输入一个字符int 21h sub al,30h mov ah,0 mov cl,10d mul cl;输入十位数movcx,ax mov ah,1 int 21h;输入个位数sub al,32h addcl,al movcount,cl;把输入的 n 值存入 count ret;返回主程序shu

4、ruendp 递归计算 fibonacci 数子程序f proc near movd,ax movg,dx add ax,bx低 16 位放在 ax里adcdx,cx高 16 位用带进位乘法放在dx 里movbx,d movcx,g dec count 递归次数减一jz exit如果递归次数为0 则结束递归过程call f如果递归次数不为0,进行递归计算exit: ret fendp 十进制输出子程序out10 proc near; dx 中存放高 16 位,ax中存放低 16 位mov bx,100d div bx为了降低商的大小,先除以100,把十进制个位和十位入栈movcx,ax mov

5、ax,dx mov dx,0 mov bx,10d divbx push dx push ax movax,cx mov dx,0 mov cx,2 cun: mov dx,0 div bx继续除以 10,把余数入栈push dx inc cx cmp ax,0 jnzcun mov ah,2 qu: pop dx 从高位到低位依次从栈中取出输出add dl,30h int 21h loopqu mov dl,20h int 21h ret out10endp 、运行结果2.求 100 以内的素数,要使用到子程序,完成这些素数的输出显示和个数统计以及求和计算,均以十进制形式输出。、概要设计dl

6、 存放要判断的素数,如果 bl 能够整除 dl 说明 dl 中不是素数,dl 加一继续循环,如果 bl 不能整除 dl,则调用十进制输出子程序输出dl,并把 count 加一,sum 加上 dl.判断 dl 大于 100 则退出循环。程序流程图如下:否是开始初始化数据段输出提示信息调用求素数子程序n=100 调用显示个数子函数调用显示素数和子函数结束、具体设计主程序.model small .stack .data d1db sushu in 100: $ d2db sum is: $ d3db count is: $ count dw 0;存放素数个数sum dw 0;存放素数和.code

7、main proc far movax,data movds,ax call qiusushu ; 调用求 100 以内素数并输出子程序call qiugeshu; 调用输出素数个数子程序call qiuhe ;调用输出素数和子程序mov ah,4ch int 21h mainendp 求素数子程序qiusushu proc near ; 计算 100 以内素数push ax pushbx push dx lea dx,d1 mov ah,9 int 21h mov dx,0ah mov ah,2h int 21h mov dx,0dh int 21h mov bl,2 l1: cmp bl,

8、100 jajieshu mov dl,2 l2: cmpbl,dl jzsushu movax,bx div dl cmp ah,0 jz l3 inc dl jmp l2 l3: incbl jmp l1 sushu: movax,bx call out10 incbl inc count addsum,ax jmp l1 jieshu: pop dx popbx pop ax ret qiusushuendp 十进制输出子程序out10 proc near;十进制输出 ax push ax pushbx push cx push dx mov bx,10d mov cx,0 c: mov

9、 dx,0 divbx push dx inc cx cmp ax,0 jnz c mov ah,2 q: pop dx add dl,30h int 21h loop q mov dl,20h int 21h pop dx pop cx popbx pop ax ret out10endp 输出素数个数子程序qiugeshu proc near push ax push dx mov ah,2h mov dx,0ah int 21h mov dx,0dh int 21h lea dx,d3 mov ah,9 int 21h movax,count call out10 pop dx pop

10、ax ret qiugeshuendp 输出个数和子程序qiuhe proc near push ax push dx mov ah,2h mov dx,0ah int 21h mov dx,0dh int 21h lea dx,d2 mov ah,9 int 21h movax,sum call out10 pop dx pop ax ret qiuheendp end 、运行结果3.模型机设计、实验目的a. 掌握模型机的基本原理和结构b. 掌握机器指令与微程序的对应关系;c. 掌握机器指令的执行流程;、实验原理dr1(74273)dr2(74273)alu-br0(74374)ar(742

11、73)pc (74161)mem (6116)output时序微控器ir(74273)inputalu(74181)celed-bw/rcesw-bcecew/rldart3pc-bloadldpct4w/rcs0cs1cs2ldirt3t4ldr0r0-blddr1t4t4lddr2cnms3s2s1s0bus地址总线数据总线cpu图 1 模型机示意图图 1 中所示模型机包括运算器、存储器、微控器、输入设备、输出设备以及寄存器。这些部件的动作控制信号都有微控器根据微指令产生。需要特别说明的是由机器指令构成的程序存放在存储器中,而每条机器指令对应的微程序存储在微控器中的存储器中。、实验内容a.

12、 选择实验设备,将所需要的组件从组件列表中拖到实验设计流程栏中b. 搭建实验流程:根据原理图1 和电路图(见附件) , 将已选择的组件进行连线。c. 输入机器指令 : 选择菜单中的“工具” ,再选择“模型机调试” ,在指令输入窗口中输入如下指令:00000000 00010000 00001001 00100000 00001011 00110000 00001011 01000000 00000000 00000001 本实验设计机器指令程序如下:地址(二进制)内容(二进制)助记符说明0000 0000 0000 0000 in r0 “input device ”-r0 0000 0001

13、 0001 0000 add 0ah,r0 r0+0ah-r0 0000 0010 0000 1010 0000 0011 0010 0000 sta r0,0bh r0-0bh 0000 0100 0000 1011 0000 0101 0011 0000 out 0bh 0bh-led 0000 0110 0000 1011 0000 0111 0100 0000 jmp 00h 00h-pc 0000 1000 0000 0000 0000 1010 运算数据自定0000 1011 求和结果这里做的是个加法运算,第一个加数已经存入到内存的0000 1010 单元中,第二个加数是需要手工输

14、入的。 在实验运行面板中点击 “运行”按钮, 选择“输入”芯片,设置输入的数据后,双击连接“输入”芯片的单脉冲,这样第二个加数就设置好了。在实验运行面板中双击连续脉冲, 模型机便开始工作,观察各个芯片的状态。或者在模型机调试窗口中(如图2 所示)点击“指令执行”选项卡,在模型机调试窗口中点击“下一时钟” ,模型机机执行到下一个时钟,点击“下一微指令”,模型机机执行到下一个微指令, 点击“下一指令”, 模型机机执行到下一条指令。观察各个芯片的状态,思考模型机的运行原理。、实验结果四、实验总结经过两周的课程设计,明显感觉到自己用汇编语言编程能力的提高,虽然在课程设计中间遇到很多问题, 但是经过耐心的查阅资料和反复检查终于解决了问题。例如求素数和fibonacci 数都遇到了一个共同的难题,就是十进制输出问题。显示 100 以内的素数和时,由于素数和只有四位,就想着先除以1000 得到的商就是千位数字,然后依次除以100、10、1 分别得到百位十位和个位数字。但是用同样的思想输出第35 个 fibonacci数时遇到了问题,由于第35 个 fibonacci数已经超过了 2 的 16 次方,所以产生了溢出。现在需要想出另一种显示十

温馨提示

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

评论

0/150

提交评论