微机原理课程设计——输出杨辉三角

时间:2019-05-13 23:56:37下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《微机原理课程设计——输出杨辉三角》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《微机原理课程设计——输出杨辉三角》。

第一篇:微机原理课程设计——输出杨辉三角

目录

第一章 绪论...................................................................................................................................1 第二章 分析与设计.......................................................................................................................2 2.1 题目.......................................................................................................................................................2 2.2 要求.......................................................................................................................................................2 2.3 方案设计与论证...................................................................................................................................3 2.3.1 整体设计思路...........................................................................................................................3 2.3.2 方案选择...................................................................................................................................3 2.4 结构框图...............................................................................................................................................4 3.1 宏定义换行...........................................................................................................................................5 3.2 阶数输入过程.......................................................................................................................................5 3.3 数据判断功能.......................................................................................................................................6 3.4 询问继续模块...................................................................7 3.5 数值计算模块.......................................................................................................................................7 3.6 显示模块...............................................................................................................................................9 3.6.1 数据显示.................................................................9 3.6.2 空格显示................................................................10

第四章 实验结果及问题处理.....................................................................................................12 4.1 实验结果.............................................................................................................................................12 4.2出现的问题以及解决的方案..............................................................................................................13 4.2.1 数据输入问题.........................................................................................................................13 4.2.2 除法溢出问题.........................................................................................................................13 4.2.3 数据计算问题.........................................................................................................................14 第五章 总结与体会.....................................................................................................................15 参考文献.......................................................................................................................................17 附录...............................................................................................................................................18

第一章 绪论

随着电子计算机技术的不断发展,微型计算机系统的功能越来越强,而关于计算机的程序设计语言也经历了一个发展的过程。从最基本的机器语言到汇编语言,并发展到高级的智能化语言,如visual C++、Visual Basic等。

汇编语言(Assembly Language)是一种采用助记符表示的程序设计语言,即用助记符来表示指令的操作码和操作数,用符号或标号代表地址、常量或变量。助记符一般都是英文单词的缩写,便于识别和记忆。使用汇编语言编写的程序称为汇编语言源程序。汇编语言源程序不能由机器直接执行,而必须翻译成有机器代码组成的目标程序,这个翻译的过程称为汇编。把汇编语言源程序翻译成目标程序的软件称为汇编程序。

汇编语言与机器语言密切相关,它们之间有明显的对应关系。一条汇编语言指令对应一条机器语言代码,所以汇编语言和机器语言一样都是面向机器的语言。使用汇编语言进行程序设计能充分利用机器的硬件功能和结构特点,从而有效地加快程序的执行速度,减少程序占用的存储空间。所以汇编语言大量用于编写计算机系统程序、实时通信程序和实时控制程序等。

汇编语言作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但重要性却勿庸置疑,因为它能够完成许多其它语言所无法完成的功能。就拿Linux内核来讲,虽然绝大部分代码是用C语言编写的,但仍然不可避免地在某些关键地方使用了汇编代码,其中主要是在Linux的启动部分。由于这部分代码与硬件的关系非常密切,即使是C语言也会有些力不从心,而汇编语言则能够很好扬长避短,最大限度地发挥硬件的性能。

第二章 分析与设计

2.1 题目

汇编显示杨辉三角

2.2 要求

基本内容:在提示信息下,从计算机键盘输入一个满足要求的数据,在输出提示信息后显示相应的杨辉三角。

具体要求如下:

(1)要有提示信息的输出显示,例如程序执行时直接显示输出提示信息“Please input a number:”然后等待用户从计算机键盘输入具体数值,例如输入“4”,然后换行显示下一步提示信息,例如“The YangHui triangle:”最后显示通过程序获得的杨辉三角如下:

(2)分析杨辉三角具体算法,计算结果要求正确。输出的杨辉三角要求上下左右对称显示,上下分别为两个等腰三角形的形式,即要求分析总结每行行首空格数量,及三角中各个数之间空格的安排方法;(3)要求最少要能够输出10阶的杨辉三角;

(4)提高要求:增大阶数(最少到20阶),可任意选择正反三角显示。

2.3 方案设计与论证

2.3.1 整体设计思路

本课题要求用汇编显示杨辉三角形,首先得了解什么是杨辉三角形。杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。其每一行的数据都有其特定的规律,杨辉三角形又有其独特的性质:

1、每行数字左右对称,由1开始逐渐变大,然后变小,最后回到1。

2、第n行的数字个数为n个。

3、第n行数字和为2^(n-1)。

4、每个数字等于上一行的左右两个数字之和,故可用此性质写出整个帕斯卡三角形。

5、第n行的第1个数为1,第二个数为1×(n-1),第三个数为1×(n-1)×(n-2)/2,第四个数为1×(n-1)×(n-2)/2×(n-3)/3···依此类推。

在熟悉了杨辉三角形的产生原理,杨辉三角形内各数据的计算方法之后,再在掌握了相关汇编知识以及一定编程能力的基础上,我们对课题进行了相关分析,总体来说,这个课题的关键点分为以下部分,厘清这些关键点也是作为明确整体设计思路的重要过程:

(1)、提示信息的显示。题目明确要求显示中要有提示信息,实际上,根据需要,在本课题中我们又加了一些功能,当然也必须要增加额外的提示信息。

(2)、阶数的输入功能。通过DOS系统功能调用,确定需要显示杨辉三角形的行数与大小,能够实现简单的人机交互。

(3)、编程得到需要在杨辉三角中显示的数。基于以下思想:第n行的第1个数为1,第二个数为1×(n-1),第三个数为1×(n-1)×(n-2)/2,第四个数为1×(n-1)×(n-2)/2×(n-3)/3···依此类推。

(4)、某数的显示及换行。为了显示的规范和美观,必须考虑到数与数之间的空格数,当然,某数的显示是能够完整输出杨辉三角形的基础和前提。

(5)、新增功能,判断输入数据是否满足条件,判断是否继续执行。考虑到本程序的使用范围及使用者能连续使用显示杨辉三角形的方便性,特增加了数据判断和询问继续功能,使用者想要继续执行即输入“Y”,程序自动从头开始执行,若输入“N”,则退出。2.3.2 方案选择

1.对于阶数输入功能,我们想到两种方案。

方案(1):参考相关文献上得知,可以通过DOS系统功能调用:键盘输入单字符——

号系统功能调用,同时实现字符的输入与显示。

调用格式:MOV INT

AH,1 21H 说明:1号功能调用无入口参数,执行时系统首先等待键盘输入,待程序员按下任何一键,系统先检查是否是Ctrl-Break键。如果是则退出,否则将键入的字符的ASCII码置入AL寄存器,并在屏幕上显示该字符。

方案(2):同样是DOS系统功能调用,键盘输入字符串——0AH号系统功能调用。说明:其功能是将键盘输入的字符串写入到内存缓冲区,因此调用之前必须事先定义一个缓冲区。缓冲区的第一个字节给出用来存放键入的字符数,第二个留给系统填写实际键入的字符个数,从第三字节开始用来存放键入的字符串,最后键入回车(↙)键表示字符结束。

对于方案(1),格式简单,使用方便,易于理解,但是对于输入多位数,相对有点复杂。对于方案(2),从实际编程水平出发,不太能够娴熟的使用该系统功能,调用格式复杂,而且鉴于该程序输入的位数不超过两位,所以我们最后选择了方案(1)。

2.4 结构框图

在编写程序之前,明确其整个思路的流程图是相当重要的,所以我们花了一些时间来画出流程图,根据流程图来写实际程序。如图2.4.1为本程序的总体汇编思路图。

图2.4.1 程序总体流程图

第三章 实验程序及分析

3.1 宏定义换行

为了简化汇编语言源程序,可以把一些频繁出现的程序段定义为“宏指令”,当遇到这段程序时,只要按宏指令名调用即可,不必重复写许多指令,汇编程序在遇到宏指令时将其期待成相应的代码,这样就有效地缩短汇编语言源程序的长度,使源程序易读,也减少了由于重复书写而引起的错误。在本课题中,为了显示杨辉三角,必然需要多次使用换行代码,故将换行代码定义为“宏指令”,有以上所述的诸多好处。宏定义如下:

HUANH

MACRO

;宏名为HUANH

;使用2号功能,显示器输出字符;13即ASCII为0DH是回车符

;DOS系统功能调用

;10即ASCII为0AH是换行符;DOS系统功能调用;宏定义结束

MOV AH, 2

MOV DL, 13 INT 21H

MOV DL, 10 INT 21H ENDM

3.2 阶数输入过程

过程是程序的一部分,它可以被程序调用。每次可调用一个过程,当过程中的指令执行之后,控制返回调用它的地方。过程的定义是用过程定义伪指令完成的。过程的定义有三个注意点:①、过程名是自定义符,定义开始和结束时的过程名必须相同。②、过程名有三个属性:段地址,偏移量和距离属性(NEAR和FAR),汇编程序在汇编时根据过程类型生成段内或段间的调用或返回指令代码。③、在一个过程中,可以有多个RET指令。一个过程总是通过RET指令返回,RET常作为过程的最后一条指令。在了解以上说明及注意点的基础上,我们根据实际需要定义了一个实现阶数输入功能的过程。具体定义如下:

SHURU

PROC XOR

BP,BP MOV BX,10 MOV CX,3

;控制输入位数,外加一位回车

;输入过程定义,数字存在BP

input:

MOV AH,1 INT CMP JZ

SUB 21H

;DOS功能调用,键盘输入和显示数据

AL,0DH OK AL,30H

;判断是否以回车结束输入

;将ASCII码转为16进制数

;字节扩展为字,为了下一条交换指令 CBW

XCHG AX,BP MUL ADD BX

;扩大10倍;加一位 BP,AX

LOOP input RET

;返回调用过程的地方;过程定义结束 OK: SHURU

ENDP

3.3 数据判断功能

在第一套程序编写完毕,试运行时,我们发现,本程序能够支持输入的数据最大值为14,当数据大于等于15时,则程序出现除法溢出问题,并且自动关闭,所以为了能让使用者不至于输入不合法的数据,我们特增加了数据判断功能,输入数据满足条件,允许执行。否则,提示输入数据超过范围,要求重新输入。程序段如下:

MAIN: MOV

DX,OFFSET MSG

;输出字符串,请输入一个数;9号功能调用,输出字符串 MOV AH,9 INT 21H CALL SHURU CMP JB BP,15 MZTJ

;调用输入函数,显示输入的数;输入的数存在BP,与15比较;满足条件,允许执行;否则换行 HUANH MOV DX,OFFSET ERROR;准备显示错误信息

MOV AH,9

INT 21H

HUANH

;继续换行

JMP MAIN

;无条件跳转到MAIN,重新开始 6

MZTJ: HUANH

··· ··· ···

3.4 询问继续模块

在首套程序编写完毕运行时,每次我们只能运行一次显示杨辉三角的程序,以后还得重新键入相关命令,才能运行,如此调试程序,效率低下,且可能混乱我们对现象的记录。所以考虑到我们调试程序的高效性及对于使用者的便利性,我们又增加了一个询问继续模块,当第一次杨辉三角显示完毕,提示是否继续,如果键入“Y”,则程序自动重新开始执行;如果键入“N”,则程序运行结束,退出。程序段如下:

input1: HUANH MOV DX,OFFSET CON

;显示提问字符串,继续?

MOV AH,9

INT

21H

;判断是否继续;键盘输入数据 MOV AH,1 INT CMP JNZ HUANH JMP 21H AL,59H exit1

;判断输入的是否是Y NEAR PTR MAIN

;段内直接近转移,可以转移到段内的任何一个位置;结束程序,返回DOS exit1:

MOV AH,4CH

INT 21H 3.5 数值计算模块

本段数值计算,是正确显示杨辉三角的关键,所以能否找到一种既简便又能保证计算正确性的方法,是我们本阶段工作的中心,我们参阅了很多资料,从几种计算方法中,选取了最符合我们实际编程水平的,又在保证计算正确性的基础上,写出了如下的程序段,它的思想是基于:第n行的第1个数为1,第二个数为1×(n-1),第三个数为1×(n-1)×

(n-2)/2,第四个数为1×(n-1)×(n-2)/2×(n-3)/3···依此类推。

如图3.5.1为本段程序的流程图,文字描述即为上段。

Calculate:DEC

MUL

DIV

INC

CMP

JZ

PUSH

MOV

CALL

MOV

SUB

CALL

POP

CALL ok1:RET

图3.6.1

数值计算流程图

b;b每次减1相乘

b c;除以c,再加1 c b,0;b是否为0 ok1 AX;保存所得数据

d,0;此处d为位数,为了显示后面的空格 ShowNum AX,6;预设,总共显示的空格数为6个单位 AX,d;还需显示多少空格

Showspace1 AX

Calculate;继续执行 8

3.6 显示模块

3.6.1 数据显示

得到杨辉三角中的某一个数后,接下来的任务就是如何将它显示出来。不能完成这项工作,就不能完成整个课题。我们小组在参考平时微机实验的基础上,自己分析,找到了一种正确的显示方法:可以将某数不断除以10,取出余数显示,直到商为0,停止除法。例如:要显示的数是345,除以10后,商为34,余数为5,5压入堆栈。然后将34除以10,商为3,余数为4,4压入堆栈。最后将3除以10,商为0,余数为3,3压入堆栈。弹出堆栈,依次显示,在汇编中,使用无符号数除法指令DIV OP。指令DIV BL,被除数存在AX中,整数商存在AL,余数存在AH。所以在除以10后,只需将AH中的值取出,下一次除法,可以用逻辑指令AND将其高八位屏蔽,调用2号功能,依次显示。

为了能充分体现我们编程的思想,如图3.6.1是数据显示部分的流程图,以下编写的程序也是基于这种思想。

图3.6.1

数据显示流程图

具体程序段如下:

ShowNum: MOV BX, 10

;BX中存除数10

CMP AX, 0 JZ

INC d ok2

;除法运算是否完毕

;此处d为位数,以确定输出的空格数;除以10,整数商存在AL,余数存在AH DIV BL PUSH AX

AND AX, 00FFH;屏蔽高八位,取商 CALL

SHOWNum POP DX

;取出高八位,即为要显示的余数;转为ASCII码

MOV DL, DH OR DL, 30H

MOV AH, 2 INT RET 21H ok2: 3.6.2 空格显示

空格的显示,是为了调整整体杨辉三角的布局,使其输出为美观的等腰三角形。前期,我们采用在方格纸上试书写的方式,确定需要显示的空格数。实际编程中,使用到了3中空格形式,第一种是首数字1之前的空格,定义为AHEAD,第二种是首数字1后面的空格,定义为BETWEEN,第三种是和需显示的数字位数相关的空格,定义为BACK,具体在程序中定义如下:AHEAD

DB

BETWEEN DB

BACK

DB

'

$' '

$' ' $' 定义了这三种空格后,需要将其显示,这里我们使用DOS功能调用,9号系统功能调用——输出字符串。功能是将指定的内存缓冲区中的字符串在屏幕上显示出来,缓冲区的字符串以“$”为结束标志。

Showspace: MOV BX, AX

nexts: MOV AH, 9 MOV DX,OFFSET AHEAD CMP BX, 0

;BX减1,控制输出的空格数

;首行显示空格,空格数即为输入的阶数

JZ dones

dones: INT DEC JMP RET 21H BX nexts

;完成显示,返回;AX为6-数据位数 Showspace1: MOV BX, AX

MOV AH, 9

MOV DX,OFFSET BACK next: CMP BX, 0

JZ done

INT 21H

DEC BX

JMP next done: RET

第四章 实验结果及问题处理

4.1 实验结果

通过对程序的多次完善,现在能够达到的要求为:最小输出1阶,最大输出14阶的正反杨辉三角形,能够判断输入数据是否合法,能够询问是否继续输出,当输入阶数较小时,也能够很好的显示输出,输出的正反杨辉三角形美观、清晰,实现了题目所提出的基本要求,对于遇到的一些问题,将在下节讨论,下面附上一些运行调试图片。

如图4.1.1和图4.1.2为正反杨辉三角显示图,图4.1.3为当输入阶数超出范围时的提示错误信息,并要求重新输入数据。

图4.1.1

11阶杨辉三角

图4.1.2

继续输出的4阶和6阶杨辉三角

图4.1.3

输入阶数不合法的提示界面

4.2出现的问题以及解决的方案

4.2.1 数据输入问题

对于数据输入,我们当初考虑到了两种方法,在方案选择中已论证了两种方法各自的优缺点,本来想使用0AH号系统功能调用,因为它能直接得到输入的字符串,而不像1号系统功能调用那样,只能够输入单字符,但是使用0AH号系统功能调用实际编写程序时,却不清楚输入的字符串存放在内存的哪个区域,虽然参考文献上有相关说明,但是我们还是未能取出输入的字符串,这对于我们是极大的打击,因为阶数输入是完成整个课题的第一步,这一步基础不做好,更不要提后面的计算、显示了。

在要求首先能实现功能的情况下,我们还是选择了1号系统功能调用,但是要加一个循环控制,控制输入最大位数和ENTER的ASCII码判断输入结束语句,因为是输入的单字符,其ASCII码存在AL寄存器中,所以对于2位数,必须要先将其ASCII码转为16进制数,将首先输入的数乘以10,再加上第二次输入的数,得到实际键入的数值。基于以上思想,我们写出了上述3.2节的阶数输入功能程序。4.2.2 除法溢出问题

由查阅资料可知,对于高阶的杨辉三角形,其内部的数据会变得相当大,当阶数为15阶时,其最大的数已经超过65536,在数学上65536并不是一个特殊的数,但是在计算机系统中,65536=2^16,在8086CPU内部,有8个16为的内部寄存器,当然累加器AX

也为16位,AX中能存放的最大的数为65536,分为高八位(AH)和低八位(AL),使用汇编的无符号数除法指令DIV OP,指令中给出的操作数是除数,它可以是8位/16位通用寄存器及存储器;被除数隐含在AX(字节除)或DX、AX(字除法)中。

查阅资料得到,可以使用特定指令,实现整数商存至AX,余数存至DX中,这样能够提高数值的上限,但是随之而来的问题是,对于编程的复杂度的提高,杨辉三角的显示格式问题,数据除以10取余数的显示问题,从而影响到整个课题。所以考虑到限定的时间,输出的美观等因素,取折中选择,我们只做到了14阶,对于大于等于15阶的阶数输入,我们增加了判断语句,避免除法溢出问题。4.2.3 数据计算问题

众所周知,杨辉三角形中的数据是有规律排列的,在上文整体设计思路中已经阐述了一些规律。对于数据的计算,我们一开始考虑到的是某数等于其上一行左右两数之和,依照此规律也可以写出整个杨辉三角形,而且不需要进行乘除法运算,不会出现除法溢出问题。但是如何得到这个数的上一行的左右两数,这两个数该存在哪里,却是一个不容忽视的问题,而且会占用很大的内存空间。

后来我们查阅资料,又得到一些规律,即第n行的第1个数为1,第二个数为1×(n-1),第三个数为1×(n-1)×(n-2)/2,第四个数为1×(n-1)×(n-2)/2×(n-3)/3···依此类推。这样可以用DEC n和INC c,用乘除法指令就可运算出正确结果,但是前提是输入的阶数有限制,上一节已经论证。为了能知道这一行到底要运算多少次,我们又加了一个CX控制其运算次数,在计算前,对某一行的n,都要进行压栈保护。综上所述,我们写出了上节结束输入模块的程序。事实表明,这样的方法能够计算出正确的数值。

第五章 总结与体会

微机原理与接口技术,是我们电子科学与技术专业学生的专业课,由此可知,这门课对于我们的意义是多么重大。所以,在做这次微机的课程设计时,更是不敢怠慢。唯恐不能正确得到设计效果。

这次我们的课程设计的题目是:汇编显示杨辉三角。刚拿到这个题目的时候,确实不知道从何下手,但是有句话说得好:不逼自己一把,怎么知道自己不可以?我们首先从什么是杨辉三角下手,查阅了相关资料,总结体会了杨辉三角的一些规律,这些规律能够在我们编程过程中得以体现,所以这个过程是必须的。

接下来,在熟悉了杨辉三角的基础上,我们结合编程,总结了有几个工作要做,一是:字符串的显示;二是:杨辉三角值得计算;三是:这些数值的显示;四是:输出的排版问题,保证输出美观正确。把整个课题,分为以上四个部分后,各个击破,从而高效的完成整个课题是一种很实用、有效的方法。虽然在这个过程中遇到了不少问题,但是我们小组成员都很积极的讨论解决问题的方法。最后通过整合,得到了整个程序。总体来说,这个程序虽然还不完美,但是代表着我们这一段时间以来的成果,我们都很欣慰,能够实现题目的要求。

这次微机原理课程设计历时两个星期,在整整两星期的日子里,可以说苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。以前在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序原理方框图化出来,但是我开始总觉得这样做没必要,很浪费时间。但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序方框图是很有必要的。因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。

其次,以前对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性上都有了很大程度的提高。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服

务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。同时学得到很多实用的知识,在此我表示感谢!同时,对给过我帮助的所有同学表示忠心的感谢!

参考文献

[1] 朱金钧,麻新旗,等.微型计算机原理及应用技术.机械工业出版社,第2版.附录

汇编输出杨辉三角程序代码: HUANH MACRO

;宏定义5句代码实现换行

MOV

AH, 2

DL, 13 21H DL, 10 21H

MOV

INT

MOV

INT ENDM

DATA SEGMENT

MSG

RESULT CON DB DB DB

'Please input a number: $' 'The YiangHui triangle:$'

'Do you want to continue?(Y/N): $' 'Data out of range!$' ERROR

DB

AHEAD

DB

'

$' BETWEEN DB BACK a

DB DW DW DW DW

'

$' ' $' ? ? ? ?

;记录位数,控制空格数

;a为阶数;b是行数 b c

d

DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA

;输入子程序,数字存在BP SHURU PROC

XOR

MOV

MOV BP,BP BX,10 CX,3

;控制输入位数,外加一位回车

input:

MOV

INT AH,1

21H

;键盘输入数据

CMP

JZ AL,0DH

OK AL,30H

;以回车结束输入

SUB

CBW

;化ASCII为HEX;字节扩展为字

OK:

SHURU START:

MAIN:

MZTJ:

XCHG MUL

ADD

LOOP

RET ENDP MOV

MOV

MOV

MOV

INT

CALL

CMP JB

HUANH MOV MOV

INT

HUANH JMP

HUANH MOV

MOV AX,BP BX

;扩大10倍 BP,AX

;加一位

input AX,DATA DS,AX

DX,OFFSET MSG;输出字符串,请输入一个数 AH,9 21H SHURU

;调用输入函数,显示输入的数BP,15

;输入的数在BP里 MZTJ

;满足条件

DX,OFFSET ERROR

;准备显示错误信息

AH,9

21H

MAIN DX,OFFSET RESULT;显示提示字符串

AH,9

INT

HUANH

MOV

CALL

MOV

MOV

INT

CMP

JZ

MOV

MOV

MOV

DEC

CALL

exit: HUANH MOV

CALL

MOV

MOV

INT

JMP

yhsj: MOV

HUANH

DEC

MOV

CALL

MOV

MOV

INT

MOV 21H

AX,BP

;准备显示杨辉三角,AX=BP=阶数

Showspace DL,'1'

;第一行显示空格完毕,输出'1' AH,2 21H BP,1

;阶数BP与1比较

exit b,2

;b=2 CX,BP;CX为阶数 a,BP;a为阶数 a

yhsj AX,BP

;准备显示杨辉三角,AX=BP=阶数

Showspace DL,'1'

;第一行显示空格完毕,输出'1' AH,2 21H NEAR PTR input1 c,1

;杨辉三角

BP AX,BP Showspace

;控制首数字前面的空格数 DL,'1'

;首数字必为1

AH,2 21H DX,OFFSET BETWEEN

MOV

INT

MOV

PUSH

CALL

POP

INC

DEC

CMP

JA

DEC

CMP

JZ

CALL

ok3:

HUANH

INC

MOV

CALL

MOV

MOV

INT

input1: HUANH MOV

MOV

INT

MOV

INT

CMP

JNZ

HUANH AH,9 21H AX,1 b Calculate b b

;b为行数

CX CX,1 yhsj b b,2 ok3 fyhsj a AX,a Showspace DL,'1' AH,2 21H

;判断是否继续

DX,OFFSET CON;显示提问字符串,继续? AH,9 21H AH,1

;键盘输入数据

21H AL,59H

;以回车结束输入 exit1

JMP exit1: MOV

INT

fyhsj: MOV

HUANH

INC

MOV

CALL

MOV

MOV

INT

MOV

MOV

INT

MOV

DEC

PUSH

CALL

POP

INC

CMP

JB

RET Showspace:

MOV

MOV

MOV

nexts:

CMP

JZ NEAR PTR MAIN AH,4CH 21H c,1

;反杨辉三角

BP AX,BP Showspace DL,'1' AH,2 21H

DX,OFFSET BETWEEN AH,9 21H AX,1 b b Calculate b CX CX,a fyhsj BX, AX;首行显示空格,空格数即为输入的阶数AH, 9 DX,OFFSET AHEAD BX, 0;BX减1,控制输出的空格数

dones

INT

DEC

JMP

dones:

RET Calculate: DEC

MUL

DIV

INC

CMP

JZ

PUSH

MOV

CALL

MOV

SUB

CALL

POP

CALL

ok1:

RET ShowNum: MOV

CMP

JZ

INC

DIV

PUSH

AND

CALL

POP 21H BX nexts b b c c b,0 ok1 AX;保存所得数据

d,0 ShowNum AX,6 AX,d Showspace1 AX Calculate BX, 10;显示某数,并记录位数AX, 0 ok2 d BL AX AX, 00FFH SHOWNum DX

ok2:

MOV

OR DL, DH DL, 30H AH, 2 21H MOV

INT

RET BX, AX AH, 9 DX,OFFSET BACK BX, 0 done 21H BX next Showspace1:MOV

next:

done:

RET

MOV

MOV

CMP

JZ INT

DEC

JMP

CODE ENDS

END START

第二篇:微机原理课程设计

电子信息科学与技术《微机原理》课程设计

一、本次课程设计的目的和意义

学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。

二、设计时间、基本要求

(一)、设计时间:二周(二)、基本要求:

a.每题2人;b.设计出完整的接口电路;c.编写出全部程序;d.在实验系统上调试通过。

三、设计选题与要求

选题一:多路模拟数据采集系统设计

要求:设计一个2路以上的模拟数据采集系统。

1、用按键选择那一路;

2、用LED显示转换结果(十进制数);

3、将每一路采集的100个数据存放到各自的存储区中。

选题二:温度测控系统的设计

要求:利用ADC0809设计一个温度测控系统,在LED数码显示器上显示温度值,并对温度进行测试和控制,当检测温度到达温度上限60℃时开风扇(即开启电动机,或以一个灯的亮灭表示),低于下限30℃时关闭风扇,LED上的显示内容为:XX ℃(采用十进制显示)。

选题三:函数发生器的设计(一)要求:利用DAC0832设计一个函数发生器,并利用按键选择输出波形,能分别产生三角波、阶梯波(每阶梯1V)、正向锯齿波、负向锯齿波和方波。并利用按键(自行定义)进行输出波形选择,同时将当前输出波形代号显示在LED上(左边位):0为方波、1为正向锯齿波、2为负向锯齿波、3 为三角波、4为阶梯波。

选题四:函数发生器的设计(二)要求:设计一个三角波发生器,可利用键盘改变其输出波形的幅值。例如,可利用1-5这5个数字键改变其输出波形的幅值,当按下1-5数字键时使D/A输出幅值从1V增加到5V。

选题五:电子音乐播放器

要求:设计要求:利用8253作为音阶频率发生器,应先对“2008年奥运会主题歌”进行编码后存入音符表,并建立好音阶表(只建立一个8度即可),音符长度不能少于60个,连续播放3遍后停止。

选题六:键盘电子乐器

要求:利用并行接口8155作为键盘接口,设计一个具有2个八度音阶的键盘乐器,音阶键不少于16个,采用扫描方式管理键盘,音域范围自行定义。

选题七:电子时钟设计

要求:利用8253定时器设计一个具有时、分、秒显示的电子时钟,并定义一个启动键,当按下该

键时时钟从当前设定值(可在显示缓冲区中予置)开始走时。

选题八:压力测控系统的设计(一)要求:对压力传感器的信号进行检测并在LED数码显示器上显示压力值,当压力低于30pa时,黄灯闪烁,闪烁周期为1秒。当压力高于150pa时,红灯闪烁。LED的显示内容为P=XXX。X为测试值。

选题九:可变输出频率方波发生器设计

要求:设计一个输出方波频率可利用按键改变的方波信号发生器(可以使用D/A也可以直接使用8253产生方波),利用键盘选择方波发生器的输出频率并驱动喇叭。输出频率=键号*100HZ

选题十:直流电机速度控制器设计

要求:利用D/A转换器和按键设计一个直流电动机转速控制器。按键定义如下:0 停止,1-1/10转速,2-2/10转速„„ 9 最高速(D/A输出满量程),键号每加1,D/A输出增加0.5V

选题十一:可任意启动/停止的电子秒表设计

要求:6位LED数码显示,计时单位为1/100秒。利用功能键进行启/停控制。其功能为:上电后计时器清0,当第一次(或奇数次)按下启/停键时开始计数。第2次(或偶数次)按下该键时停止计时,再一次按启/停键时清零后重新开始计时„„

选题十二:温度测试系统设计

要求:利用温度传感器和ADC0809设计一个温度测试系统,将测试结果(十进制)在LED上显示出来,并定义一个保持按键,当按下该键时,将当前测试值保持不变(按键不动作时为正常测量显示)。温度显示格式为:XXX ℃。(可以每隔0.3秒测量一次)

选题十三:压力测试系统设计(二)要求:利用压力传感器和ADC0809设计一个压力测试系统,并将测试结果(十进制)在LED上显示出来,并定义一个测试最大值按键,当按下该键时,可进行最大值测量(按键不动作时为正常测量显示),即:只有当当前测量值大于上次测量值时才刷新显示,显示格式为:P=XXX。可以每隔0.3秒测量一次。

选题十四:简易计算器系统设计

要求:设计一个可以进行2位数四则运算的计算器。

1、用按键输入数和运算符号;

2、用LED显示运算过程和结果(十进制数);

3、可以表示出当前的运算类型;

4、具有清零和复位功能;

5、具有连续运算功能。

选题十五:交通灯控制系统

要求:按照时间控制原则,利用并行接口和定时器,设计一套十字路口的交通灯管理系统,通行时间(或禁止时间)30秒,准备时间3秒,在准备时间里黄灯闪烁3次,闪烁频率为0.5秒,周而复始。可利用8255、8253等接口电路。

选题十六:计件系统设计

要求:利用8253计数,对外界脉冲技术,并将计数值在数码管上显示,可通过键盘控制重新计数。

四、设计任务及要求

1、接口设计:根据所选题目和所用的接口电路芯片设计出完整的接口电路,并在实验系统上完成电路的连接和调试通过。

2、程序设计:要求画出程序框图,设计出全部程序并给出程序设计说明和程序注释。

3、课程设计报告:(1)设计题目;

(2)系统的主要功能、作用以及主要技术性能指标;

(3)总体设计方案、工作和组成原理(框图)或设计说明、采用的技术路线等;

(4)系统设计:接口电路设计,程序设计(程序框图和程序清单及注释)其他有关的理论分析和计算;

(5)设计总结:对整个设计工作过程进行归纳和综合,对设计中所存在的问题和不足进行分析和总结,提出解决的方法、措施、建议和对这次设计实践的认识、收获和提高。

第三篇:微机原理课程设计

汇编程序设计题

题目一 密码设置模拟

该程序可以进行密码的设置(第一次)和修改(已设置密码)。要求输入的密码不显示。题目二 计算器

编辑程序可以实现键盘输入数据与运算符,进行“加减乘除”运算。(提示:先输入数据与运算符,保存,再按照运算符选择对应的子程序;输入的数据是用字符表示的,需要转换;要有良好的界面(提示信息))

题目三工作周期判断程序

输入年、月、日,能够判断当日的星期数,并进行输出。(以校历为依照,可设某日为起点,根据相差的天数与7的关系进行判断)。

题目四 PC扬声器发声

利用8253驱动PC机内扬声器发声,PC结构参考相关文献资料。题目五 乐曲播放

利用PC机内8253实现乐曲播放。题目六 按键选择乐曲播放

利用按键选择播放不同乐曲。(★)(自制交互界面实现按键选择★★)题目七 实现闪烁文字效果 编程提示:

提示信息于屏幕中央显示出来,用光标定位子程序将光标定位于80*25显示方式的第8行第10列,然后输出一条提示信息,接着调用屏幕上卷子程序上卷一行,接着再定位光标,然后显示下一条提示信息,直到所有信息显示完毕,对于闪烁的信息,同样是定位光标,然后用BIOS功能调用13H来显示闪烁信息,当BL的高位为1时,字符闪烁。mov ah,00h mov al,03h ;设置显示方式为80*25,16色文本 int 10h 题目八

数字秒表

设计可以显示1~60秒的无存储功能的秒表,最小单位为毫秒。题目九

倒计时牌

设计日期倒计时牌界面,可输入设定日期,显示当前日期的统计天数,如奥运计时牌。题目十

数字时钟

编程实现时钟功能,按秒刷新,要求定位在屏幕右上角。

硬件设计题

总体要求:根据题意自行设计电路,编写相关汇编程序。题目一

交通灯控制系统

1.利用8253定时,8259中断及8255设计电路,实现十字路口交通灯模拟控制。2.实现能自动控制和手动应急控制。

3.实现能随时可以调整自动模式的绿灯和红灯时间。题目二 实现特定功能的键盘及LED显示

了解键盘及LED显示接口原理,设计实验电路图完成以下功能: 1.按1键显示年; 2.按2键显示月日; 3.按3键显示GOOD ;

4.按4键数码管由左到右字符“0”循环显示。5.自行设计特效显示功能。题目三

LED七段数码管数字钟

设计并完成LED七段数码管数字钟电路,数字钟显示格式为:HH:MM:SS。要求:具有通过键盘能够调整时、分、秒的功能。题目四

闪烁灯

利用8253和LED灯相结合实现闪烁灯效果。题目五

电子钟

利用8253定时器设计一个电子钟,并定义一个启动键。当按下该键时电子时钟从当前设定值开始走时。

附录:实验箱功能模块电路图

第四篇:2008微机原理课程设计

《微机原理及接口》课程设计任务书

适用专业:05电子信息工程 通信工程

一、本次课程设计的目的和意义

学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。

二、设计时间和设计题目

(一)、设计时间:一周(二)、设计题目:可从以下题目中任选一题,原则上每班每题不超过5人。每题的设计要求:a、设计出完整的接口电路。B、编写出全部程序。

1、交通灯控制系统:按照时间控制原则,利用并行接口和定时器,采用时间中断方式设计一套十字路口的交通灯管理系统,通行时间(或禁止时间)30秒,准备时间3秒,在准备时间里黄灯闪烁3次,闪烁频率为0.5秒,周而复始。可利用8255、8253、8259等接口电路。

2、温度测控系统的设计:利用ADC0809采用中断式设计一个温度测控系统,在LED数码显示器上显示温度值,并对温度进行测试和控制,当检测温度到达温度上限60℃时开风扇(即开启电动机),低于下限30℃时关闭风扇,LED上的显示内容为:XX ℃(采用十进制显示)。

3、函数发生器1的设计:利用D/A设计一个函数发生器,并利用按键选择输出波形,能分别产生三角波、阶梯波(每阶梯1V)、正向锯齿波、负向锯齿波和方波。并利用按键(自行定义)进行输出波形选择,同时将当前输出波形代号显示在LED上(左边位):0为方波、1为正向锯齿波、2为负向锯齿波、3 为三角波、4为阶梯波。

4、函数发生器2的设计:设计一个三角波发生器,可利用键盘改变其输出波形的幅值。例如,可利用1---5这5个数字键改变其输出波形的幅值,当按下1---5数字键时使D/A输出幅值从1V增加到5V。

5、电子音乐播放器:设计要求:利用8253作为音阶频率发生器,应先对一段音乐进行编码后存入音符表,并建立好音阶表(只建立一个8度即可,音阶表见附录),音符长度不能少于60个,连续播放3遍后停止。

6、键盘电子乐器:利用并行接口8255作为键盘接口,设计一个具有2个八度音阶的键盘乐器,音阶键不少于16个,采用扫描方式管理键盘,音域范围自行定义。

7、电子时钟设计:利用8253定时器设计一个具有时、分、秒显示的电子时钟,并定义一个启动键,当按下该键时电子时钟从当前设定值开始走时。

8、压力测控系统的设计:对压力传感器的信号进行检测并在LED数码显示器上显示压力值,当压力低于30pa时,黄灯闪烁,闪烁周期为1秒。当压力高于150pa时,红灯闪烁。LED的显示内容为P=XXX为测试值。

9、可变输出频率方波发生器设计:设计一个输出方波频率可利用按键改变的方波信号发生器(可以使用D/A也可以直接使用8253产生方波),利用键盘选择方波发生器的输出频率并驱动喇叭。输出频率=键号*100HZ。

10、直流电机速度控制器设计:利用按键控制直流电动机的转速。按键定义如下:0 停止,1 1/10转速,2 2/10转速…… 9 最高速(D/A输出满量程),键号每加1,D/A输出增加0.5V。

11、可任意启动/停止的电子秒表设计:6位LED数码显示,计时单位为1/100秒。利用功能键进行启/停控制。其功能为:上电后计时器清0,当第一次(或奇数次)按下启/停键时开始计数。第2次(或偶数次)按下该键时停止计时,再一次按启/停键时清零后重新开始计时……。12简易计算器系统设计:设计一个可以进行2位数四则运算的计算器,要求:1,用按键输入数和运算符号;2,用LED显示运算过程和结果(十进制数);3,可以表示出当前的运算类型;4,具有清零和复位功能;5,具有连续运算功能。

13点阵LED显示系统设计:设计一个点阵式LED显示系统。要求:1,每次显示一个文字和图形;2,每隔一固定时间更变需要显示的文字或图形;3,可以现实循环显示几个文字或图形;4,可以根据按键来控制显示的文字的替换时间的长短;5,具有复位功能。

三、设计任务及要求:

1、接口电路设计:根据所选题目和所用的接口电路芯片设计出完整的接口电路,并进行电路连接和调试。

2、程序设计:要求画出程序框图,设计出全部程序并给出程序设计说明和程序注释。

3、设计文件:a、设计图纸(接口电路原理图);b、使用或操作说明;c、设计报告:字数约3000~4000字,内容包括:(1)设计题目;(2)系统的主要功能作用及主要技术性能和指标;(3)总体设计方案及组成原理(框图)或设计说明及技术路线;(4)系统设计:接口电路设计,程序设计(程序框图和程序清单及注释)其他有关的理论分析和计算;(5)设计总结:对设计中所存在的问题和不足进行分析和总结,提出解决的方法、措施、建议和对这次设计实践的认识、收获和提高。

4、设计要求:

不允许抄袭和复印,否则取消设计成绩。

四、设计时间和成绩分配:

(一)设计时间:一周(二)设计成绩分配:

1、接口电路设计占30%(包括电路图设计、电路连接和调试通过)。

2、设计文件占30%

3、答辩占40%

第五篇:微机原理课程设计

接口技术课程设计

一、设计内容

设计一个投票统计器,完成投票、计票统计和票数显示等功能。

二、设计原理及方案

在8086最小工作模式下,连接一块8255A芯片。在 8255A的C端口连接8个开关,开关按下表示支持,灯亮,开关不按便是反对,灯不亮,从8255A的C端口输入投票结果,经8086运算统计出结果;在 8255A的A端口连接一块7段LED数码管,将输出结果通过数码管显示出来。电路图:

接口技术课程设计

程序代码: A_PROT B_PROT C_PROT CT_PROT DATA DATA CODE

MOV DX,C_PROT IN AL,DX EQU EQU EQU EQU 200H 202H 204H 206H

;可通过计算获得,连接的是IO1 SEGMENT ENDS SEGMENT MOV AX,DATA MOV DX,AX MOV AL,10001001B MOV DX,CT_PROT OUT DX,AL

;控制字写入

;A端口输出,C端口输入 TAB1 DB 7FH,07H,7DH,6DH,66H,4FH,5BH,06H,3FH ASSUME CS:CODE,DS:DATA

START: MOV DX,C_PROT MOV AL,0 OUT DX,AL

;C端口清零

AGAIN: TJ: XOR AH,AH

MOV CX,8 LOOP1: SAL AL,1

ADC AH,0

LOOP LOOP1

MOV AL,AH

PUSH BX

LEA BX,TAB1

XLAT

MOV DX,A_PROT

OUT DX,AL

PUSH CX

MOV CX,2801 WAIT1: LOOP WAIT1

POP CX

JMP AGAIN

MOV AH,4CH INT 21H CODE ENDS END START

接口技术课程设计

;统计1个数

;进位加CF,以统计出C端口中1的个数

;延时10ms

接口技术课程设计

三、运行结果

程序结果图:

接口技术课程设计

四、设计总结与体会

为期一周的微机原理课程实践终于结束了,回过头来,感慨万千。过了一个多月,书本上的好些知识已然忘却,刚开始拿到课题时,看到一大堆传说中的神器,霎时凌乱了,选来选去,从仅剩的课题中挑了“投票统计器”,上网搜索了一下,大体上把设计的方向搞清了,接下来,便是开始设计了。

画模拟图对于我们来说,还是比较困难的,特别是8086那一块儿,大家参考网上的资料,反复讨论,着实花了不少时间。接下来的画图连线就比较简单了,为了节省时间,在做模拟图的同时,其他两个人便开始编写程序了。将设计流程图简略写下来,对照流程图,分块儿编写程序,显得很有条理,简单轻松些。

就这样,三次课之后,设计的图和程序都好了,只剩下调试程序,查看模拟结果了。这是检错和纠错的过程,轻松但也不轻松,因为那么多东西,如果看不仔细了,你就找不到错误,也就没法儿解决问题了,费事费力还一无所获,这是最伤脑筋的事情。还好,运气不错,只是程序出现了小小的问题,改好之后,得到了很满意的结果。

最后的验收,是对书本与实践知识的融汇总结,本以为毫无问题的我们,没想到被程序中的一个问题给秒杀了,大家四处找资料,和别的组的同学讨论,反复演算了半天,终于会了。当然,就算是会了,我们也只是懂得了微机原理中的一点皮毛而已,学的扎实很重要,因为这样才能把理论知识运用到实践中去,不断地提高自己。

五、参考文献 1.周明德.微型计算机系统原理及应用.北京:清华大学出版社

2.张弥左,王兆月,邢立军等.微型计算机接口技术.北京:机械工业出版社 3.戴梅萼,史嘉权.微型计算机技术及应用.北京:清华大学出版社 4.沈美明,温冬婵.IBM-PC汇编语言程序设计.北京:清华大学出版社

下载微机原理课程设计——输出杨辉三角word格式文档
下载微机原理课程设计——输出杨辉三角.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    微机原理课程设计

    《微机原理》课程设计报告 时间 学 院 专业班级 姓 名 学 号 合 作 者 指导教师 成 绩 2013 年 11 月摘要 本文针对可燃气体检测模块MQ—K1,综合运用《微机原理》所学知识......

    微机原理课程设计

    合肥工业大学 计算机与信息学院 课程设计 课程:微机原理与接口技术设计 专业班级:计算机科学与技术班 学号:2 姓名: 一、设计题目及要求: 利用 8259A中断,实现对8253多种计数......

    微机原理课程设计

    一、设计题目 单片机综合试验仪——计数/中断模块 二、功能及性能指标 显示计数,记到15就重新开始计数 三、设计目的 1 了解单片机综合实验仪基本构成和分模块设计方法。掌......

    2012微机原理课程设计指导书

    微机原理课程设计 指 导 书 南通大学计算机科学与技术学院计算机科学与技术系 二零一二年五月 目 录 1 课程设计的目的和任务 ....................................... 1......

    微机原理课程设计题目

    1. 汇编绘图1 屏幕上出现随机(随机颜色,随机边长,随机线宽)的正方形 2. 汇编绘图2 屏幕上出现随机(随机颜色,随机边长,随机线宽)的三角形 3. 汇编绘图3 屏幕上出现随机(随机颜色,随机......

    微机原理课程设计题目

    微机原理课程设计题目与要求 微机原理课程设计说明: 1. 要求使用 A4 纸打印,必须有封面和目录。封面内容有课设题目、班级、 学号、 姓名、指导教师、日期等内容。设计题目可......

    微机原理课程设计跑马灯

    微机原理课程设计走马灯 运用8086最小模式和8255等芯片设计出一个跑马灯电路,要求至少有5中花式,在ISIS 7 Professional软件中运行。 设计电路图如图所示: 源代码 DATA SEGMENT......

    微机原理课程设计题目

    微机课程与接口技术课程设计任务书 一、本次课程设计的目的和意义 学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论......