武汉理工微机原理数字累加求和课设报告

更新时间:2024-06-20 21:02:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目录

摘要............................................................... 1 1 实验任务......................................................... 2 1.1 实验题目 ..................................................... 2 1.2 要求: ....................................................... 2 2题目分析及方案选择 ............................................... 2 3方案流程图 ....................................................... 3 3.1 方案分析 ..................................................... 3 3.2 流程图 ....................................................... 4 4.程序设计及分析................................................... 6 4.1 输入程序 ..................................................... 6 4.2 求数字累加之和程序 ........................................... 8 4.3 输出程序 ................................................... 10 5.运行结果及分析................................................. 11 6 心得体会....................................................... 12 7 参考文献....................................................... 13 附录............................................................. 14

武汉理工大学《微机原理》课程设计说明书

摘要

最近几十年,随着电子计算机的诞生和高速发展,社会和科技提到了前所未有的高度。计算机技术的发展所带来的信息技术的飞速发展,给人类社会带来了进步,给人们的生活生产发生了巨大深刻的变化。

微机技术,在计算机发展过程中发挥了重要的作用。计算机在保持速度和性能的基础上,使得机器更加小巧。典型代表是PC机普及到各行各业的各个领域。而在工程领域,在微机基础上使用汇编语言程序可以基本地实现计算机控制工程的运行状况。同时可以实现自动的检验计算机从系统中采集的信息以判断系统是否处于稳定的工作状态并发出命令进行调试。从而实现采集信息,辨别信息,执行命令一体化,形成多功能的控制终端。

作为电气工程自动化的学生,微机原理是我们的专业课,学好和灵活应用微机技术对我们来说有着十分重要的意义。学习了微机原理和接口技术,对微机有了初步的了解。学习结束后,为提高和巩固专业知识,我们进行了微机原理课程设计,程序设计是指为计算机编写能够接受并执行、且具有实际意义的语句序列。汇编语言程序设计就是运用汇编语言进行程序设计。汇编语言程序设计有以下几种结构形式,有顺序结构,分支结构,循环结构,子程序调用个,系统功能调用等。根据结果要就需进行合理的选择才能建立正确的程序,子并且画出流程图进而完成题目任务。

关键词:微机 汇编程序 流程图

武汉理工大学《微机原理》课程设计说明书

1 实验任务

1.1 实验题目

数字求和汇编语言程序设计

1.2 要求:

(1)屏幕提示输入一个数字N(2位数); (2)计算S=1+2+3+?+N的和并输出求和结果S;

(3)可连续输入数字进行计算,直至单击“Q”或“q”键退出程序。

2题目分析及方案选择

本次课设是在键盘中输入一个1到99的数,然后求出其累加之和,并显示出来。显然,在设计汇编程序过程中,程序代码要包括输入提示语句、求数字累加之和、将结果输出三个部分。考虑到我们用到的是16为汇编语言,而且寄存器有限,本题在编程序过程中会比较麻烦。

在进行课设之前,思路如下: 认 真分析题目, 计具体方设案 根据所选方案设计程序流程图代码 将设计好的程序放到相应的环境里面运行并调试 得出结果后,分析并完善程序

图1 思路流程图

所以,开始编程序前做出了两个方案。 方案一:

由于本题要求是输入一个数,然后算出累加结果,我们可以先输入的值n后,通过累加算出从1加到n的值。此种方案程序计算量大,但程序简单。

方案二:

在启动程序后,先将1到99的累加之和算出来,此处设为值A1,存在一定的位置,当得到输入n的之后,通过计算算出n到99的累加之和,此处设为值A2再通过A1减去A2得出加之和。此种方案计算量小,但程序复杂。

武汉理工大学《微机原理》课程设计说明书

两种方案都可行,经过思考,由于我们需要重复进行输入输出操作,程序可重复利用,让程序简单易懂且程序小运行快,我们选择第一种方案。

3方案流程图 3.1 方案分析

1、由于我们所选的方案是要将1到n的阶数之和给求出来,所以,我们需要先在汇编程序代码中实现可输入功能,即人机交互模式。这要求程序代码中有输入提示部分的程序。

2、由于n是介于1到99之间的数,那么我们程序必须可以判断输入的n是否超出了计算范围,这就要求我们的程序中有一部分可以判断n是否处于计算范围内,且在超出范围时输入界面提醒用户输入错误。

3、由于题目要求可连续输入,那么程序必须可以做到键入退出按键才能实现退出功能,否则视为继续输入计算。这就需要程序中设定退出功能以及可重复工作功能,实现用户使用时简单且方便。

而在设置错误判断部分我们又有两种方案:

①??、 通过累加求和后判断结果是否大于4050或者小于55.因为10加到n

(10<n<99)的结果为55到4050之间,如果结果结果大于4050或者小于55那么则说明n的输入范围错误。

②、通过直接判定n是否处于10到99之间判定错误。

而第一种方案需要占用的内存较大,且可使用的程序指令复杂,较少,不灵活。造成整体程序的设计工作量大,容易出现逻辑错误。而使用第二种方案主要原理为采用变量偏移地址内存进行比较判定是否出错。我们采用第二种方案。

武汉理工大学《微机原理》课程设计说明书

3.2 流程图

根据所设计好的方案和计划,设计出流程图。 输入流程图如下:

开始

显示字符串 请输入一个数字

键盘读入数据N

判断是否为q或者Q Y 结束 N 判断是都在10~99中 N 报错 Y 计算1~N的累加之和

数制转化并显示

图 2 输出流程图

要求能够连续的输入数据进行计算,在此循环跳转。

对输入数据进行了判断,符合要就在10~99内则进行计算,并在屏幕上显示出计算结果,不在此范围内的输入报错,若为Q或q则直接退出程序,结束任务。

武汉理工大学《微机原理》课程设计说明书

计算部分流程图如图

将ax中内容赋值给cx

bx加上ax存于ax中 N

bx是否为0 将0赋值给ax,1赋值给bx bl减去30H,将字符转换成数字 开始 将ibuf+2便宜地址给si ax清零 Y 将最后一个字节赋值给$,以便将字符串输出

输出转换 N 将ax与ax相与是否得0

Y 结束

图3

主程序流程图

武汉理工大学《微机原理》课程设计说明书

输出流程图如下:

开始

图4 输出流程图

输出OUTPUT 将bx赋值给dx输出结果 跳转至start进行重复计算 结束

设计好流程图后,成功将程序的过程理清楚,给程序设计和调试带来了方便。

4.程序设计及分析

4.1 输入程序

根据报告要求和设计的方案需要,设计了输入10到99的累加和程序段,并且判断是否出错的程序段,程序如下如下:

lea dx,message ;输入提示语句 mov ah,09h int 21h mov ah,07h int 21h

cmp al,'Q' ;判定是否为Q je exit ;若是Q执行跳转 cmp al,'q' ;判定是否为q

武汉理工大学《微机原理》课程设计说明书

je exit ;若是q执行跳转 lea dx,input mov ah,09h int 21h

mov bl,0ffh

mov ibuf+5,bl ;

lea dx,ibuf mov ah,0ah int 21h mov si,dx mov bl,[si+5]

cmp bl,0ffh ;存在

jne error ;mov bl,[si+2] ;cmp bl,30h ;jna error ;cmp bl,3ah ;jnb error

mov bl,[si+3] ;cmp bl,2fh ;jna error cmp bl,3ah jnb error jmp correct error:

lea dx,ERROR_MESS ;

将ibuf里第三位数置为0ffh 与第三位进行比较判断是否有三位判定是否出错

判定输入是否为小于10的数 十位跟零比较

小于等于0就跳到错误 大于9就会错误 个位跟零比较 小于0就错误 出错提示

7武汉理工大学《微机原理》课程设计说明书

mov ah,09h int 21h jmp start exit: mov ah,4ch int 21h

此段程序主要是将输入的数字移动到ibuf这个变量里然后进行判断输入的数字是否在允许计算范围内。si+5表示第三位,si+2表示第一位,si+3表示第二位,分

别与这三位进行比较判定是否错误。

4.2 求数字累加之和程序

为求累加求和,设计了一下代码段: correct: mov cl,ibuf+1 xor ch,ch

mov si,offset ibuf+2

mov ax,0 ;循环运算前的初始化

again: ; (((0*10 * a0)*10 + a1)*10 + a2) mov dx,10

mul dx ;在做乘法的过程中不用考虑dx,因为输入的数为0~99,所以dx总是为0

mov bl,byte ptr [si] ;取出该字符的ASCLL码 sub bl,30h ;将其减去30H得到数值 add al,bl

adc ah,0 ;在做加法是要考虑是否有进位 inc si loop again

mov cx,ax mov ax,0

武汉理工大学《微机原理》课程设计说明书

mov bx,1

loop2: add ax,bx inc bx

loop loop2;这个循环就实现了sum = 1 + 2 + ... + n的操作了

mov bx,offset obuf+7

mov byte ptr [bx],'$';将最后一个字节赋值为'$'以便将数字字符串输出出来。

mov cx,10 jmp loop1 loop1 : mov dx,0

div cx ;(ax <- ax/10) ax 中存放的是商,汇编中16进制就可以当做10进制来运算

add dl,30h ; dl中存放的是余数 dec bx ;将指针前移一个字节 mov [bx],dl ;将余数放在字符串的末尾 or ax,ax ;当ax为0时结束

jnz loop1 ;当ZF==0时跳转,jump not zero dec bx

mov byte ptr [bx],0dh dec bx

mov byte ptr [bx],0ah ;在字符串的前面加上回车换行。

此部分主要为计算1加到n的算法程序,而程序解释已写入代码中。

武汉理工大学《微机原理》课程设计说明书

lea dx,input mov ah,09h int 21h

mov bl,0ffh

mov ibuf+5,bl ;将ibuf里第三位数置为0ffh

lea dx,ibuf mov ah,0ah int 21h mov si,dx mov bl,[si+5]

cmp bl,0ffh ;存在

jne error ;

mov bl,[si+2] ;cmp bl,30h ;jna error ;cmp bl,3ah ;jnb error

mov bl,[si+3] ;cmp bl,2fh ;jna error cmp bl,3ah jnb error jmp correct error:

lea dx,ERROR_MESS ;

与第三位进行比较判断是否有三位判定是否出错 判定输入是否为小于10的数 十位跟零比较

小于等于0就跳到错误 大于9就会错误 个位跟零比较 小于0就错误 出错提示

15武汉理工大学《微机原理》课程设计说明书

mov ah,09h int 21h jmp start exit: mov ah,4ch int 21h

correct: mov cl,ibuf+1 xor ch,ch

mov si,offset ibuf+2

mov ax,0 ;循环运算前的初始化

again: ; (((0*10 * a0)*10 + a1)*10 + a2) mov dx,10

mul dx ;在做乘法的过程中不用考虑dx,因为输入的数为0~99,所以dx总是为0

mov bl,byte ptr [si] ;取出该字符的ASCLL码 sub bl,30h ;将其减去30H得到数值 add al,bl

adc ah,0 ;在做加法是要考虑是否有进位 inc si loop again

mov cx,ax mov ax,0 mov bx,1

loop2: add ax,bx inc bx

loop loop2;这个循环就实现了sum = 1 + 2 + ... + n的操作了

16

武汉理工大学《微机原理》课程设计说明书

mov bx,offset obuf+7

mov byte ptr [bx],'$';将最后一个字节赋值为'$'以便将数字字符串输出出来。

mov cx,10 jmp loop1 loop1 : mov dx,0

div cx ;(ax <- ax/10) ax 中存放的是商,汇编中16进制就可以当做10进制来运算

add dl,30h ; dl中存放的是余数 dec bx ;将指针前移一个字节 mov [bx],dl ;将余数放在字符串的末尾 or ax,ax ;当ax为0时结束

jnz loop1 ;当ZF==0时跳转,jump not zero dec bx

mov byte ptr [bx],0dh dec bx

mov byte ptr [bx],0ah ;在字符串的前面加上回车换行。

lea dx,output ;输出提示 mov ah,09h int 21h mov dx,bx mov ah,09h

int 21h ;显示字符串bx j start

17

武汉理工大学《微机原理》课程设计说明书

code ends end start

18

武汉理工大学《微机原理》课程设计说明书

本科生课程设计成绩评定表

姓 名 专业、班级 课程设计题目: 课程设计答辩或质疑记录: 性 别 成绩评定依据: 最终评定成绩(以优、良、中、及格、不及格评定) 指导教师签字:

年 月 日

19

武汉理工大学《微机原理》课程设计说明书

成绩评分表

项目 课 程 设 计 说 明 书 撰 写 60分 评分标准 方案 论证 10分 能正确分析设计内容,算法选择合理,并有详细的说明、论证。 10≥X≥8 得分 流程图 设计 10分 能分析设计内容,算法选择满足设计要求,有简单说明 7≥X≥4 设计方案不太满足设计内容及要求,3≥X≥0 无说明 流程设计正确,并有详细的说明,流程图绘制规范 10≥X≥8 软件 设计 说明 10分 流程设计符合设计内容及要求,并有一定说明,流程图绘制正确 7≥X≥4 流程设计不太满足设计内容及要求,3≥X≥0 且无说明,流程图绘制不太正确 程序设计关键问题或段落有详细说明,程序代码正确 10≥X≥8 程序设计关键问题或段落有说明,程序代码基本正确 程序设计关键问题或段落基本无说明,程序代码不完整或不太满足设计要求 7≥X≥4 3≥X≥0 20

武汉理工大学《微机原理》课程设计说明书

结果 分析 10分 能正确记录调试结果,并能分析结果,给出合理的建议 10≥X≥8 心得 体会 10分 能记录调试结果,并加以分析 记录调试结果,但无分析 基本上真实、客观地反映了本人课程设计的收获、心得 无感而发,空洞,套话。 7≥X≥4 3≥X≥0 10≥X≥6 报告 规范 10分 5≥X≥0 完全按照报告格式要求,内容充实、10≥X≥8 详细,完全符合规范 7≥X≥4 3≥X≥0 程序调试 10分 基本按报告格式要求,内容完整,基本符合规范 未按报告格式要求,不太符合规范 10≥X≥8 程序上机调试运行结果完全正确 程序上机调试运行结果基本满足设计要求 程序上机调试运行结果不太满足设计要求 能详细完整地表述设计内容,并能正确回答问题 能完整地表述设计内容,并能回答相关问题 基本表述设计内容,但不能回答相关问题 设计答辩 10分 7≥X≥4 3≥X≥0 10≥X≥8 难度分值 10分 7≥X≥4 3≥X≥0 一~十四题:7分 十五~十七题:10分 纪律及考勤 按照课程设计进度安排完成课程设计任务,按时参加中期检查及10分 答疑、程序演示及答辩环节。缺席一次扣5分。 总评分数 优秀(100~90) 良好(89~80) 中等(79~70) 及格(69~60) 不及格(60以下) 21

本文来源:https://www.bwwdw.com/article/kgm3.html

Top