微机原理课程设计-杨辉三角课程设计
微机原理课程设计总结

微机原理课程设计数据采集系统(中断法)一、课设目的:进一步掌握微机原理知识,了解微机在实时采集数据的应用,学习掌握编程和程序调试的方法。
二、课设内容和要求:用中断法将ADC0809通道0外接0—5V电压,转换成数字量后,在七段数码管LED上显示。
以小数点后两位表示精度,显示模拟电压的十进制;0809通道0的数字量以线性控制方式DAC0832输出,当通道0的电压为5V时,0832的OUT为0V当通道0的电压为0时,0832的OUT为2.5V;此模拟电压再送到ADC0809通道1,转换后的数字量在CRT上以十六进制显示。
ADC0809的采样脉冲CLK由定时器8254的OUT0提供;ADC0809的EOC信号用作8259中断请求信号。
三、总体设计:1)、ADC0809的IN0采集电位器0—5V电压,IN1采集0832输出的模拟量。
2)、DAC0832将ADC0809的IN0数字量重新转换成模拟量输出3)、8259用于检测ADC0809转换是否结束和向CPU发送INTR信号4)8255为七段LED数码管显示提供驱动信息5)、七段LED数码管显示ADC0809的IN0的值6)8254提供ADC0809的采样时钟脉冲。
四、硬件设计:因采用PC机和微机实验箱,硬件电路设计相对比较简单,主要利用微机实验箱上的8255并行口,ADC0809,DAC0832,七段数码管LED,8254定时/计数器,74LS574输出接口,电位器等单元(图1:数据采集系统硬件连接示意图)六、软件设计:本设计通过软件编程,实现模/数转换,0809分别对IN0 0—5V直流电压的采样和经线性控制后输出电压IN1采样,IN0的值转换成十进制后,在七段数码管LED上显示IN1的值。
CPU根据IN0的值,使八位二极管根据课设要求指示相应的范围。
1、设计思想:数据采集系统分成四个功能模块分别是主程序模块、量纲转换模块、数码管显示模块、中断服务子程序模块。
【可编辑全文】微机原理与接口技术-课程设计任务书

可编辑修改精选全文完整版微机原理与接口技术课程设计任务及指导书(适用于0944121班)一、课程设计目的和任务:通过课程设计,主要达到以下目的:1、使学生增进对单片机的感性认识,加深对单片机理论方面的理解;2、使学生掌握单片机的内部功能模块的应用,如定时器/计数器、中断、片内外存贮器、I/O口、A/D、D/A等;3、使学生了解和掌握单片机应用系统的软硬件设计过程、方法及实现,为以后设计和实现单片机应用系统打下良好基础。
二、课程设计题目:【1】数字音乐盒设计要求:1、利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音响,从而演奏乐曲(最少储存三首乐曲,每首不少于三十秒);2、采用LCD显示;3、开机时有英文欢迎字符,播放时显示歌曲序号(或名称);4、可通过功能键选择乐曲,暂停,播放;扩展功能:显示乐曲播放时间或剩余时间;【2】数字温度计设计要求:1、基本范围为-50℃—110℃;2、精度误差小于0.5℃;3、LED数码管直读显示;扩展功能1、可以任意设定温度的上下限报警功能;2、实现语音报数。
【3】交通灯设计设计要求:1、设计一个十字路口交通灯控制器。
用单片机控制LED灯模拟指示。
2、系统包括人行道、左转、右转以及基本的十字路口交通灯功能;3、系统除具有基本交通灯功能外,还具有显示倒计时、时间设置、紧急情况处理功能。
扩展功能:1、分时段调整信号灯的点亮时间2、根据具体情况实现灵活手动控制功能。
【4】电子密码锁设计要求:1、系统能完成开锁、超时报警、超次锁定、管理员解密、修改用户密码基本的密码锁的功能;2、还具有调电存储、声光提示等功能。
扩展功能:通过遥控器实现锁的基本操作。
【5】电子钟的设计设计要求:1、可以实现23h59m59s的显示,用六位LED显示出来,显示格式为“时时:分分:秒秒”。
2、可以利用按键设置任意的时分秒各位,并具有按键复位功能;扩展功能:1、实现整点语音报时功能。
2、实现年月日的显示。
微机原理课程设计(电梯)

微机原理课程设计(电梯)计算机原理课程设计实验报告学院:专业:班级:姓名:学号:成绩:目录1.实验题目------------------------------------------3 ------------------------------------------3分析------------------------------------------3------------------------------------------4----------------------------------------5------------------------------------------5------------------------------------------7------------------------------------------13一、实验题目垂直电梯运行曲线控制(一)模拟题:在实际中,电梯是我们的交通工具,电梯从静止开始,慢慢加速,当到达某个值时,转入匀速运动,根据电梯运行的速度,电梯快要到达停止层时,开始减速,直到平层停止,打开轿厢门,客人安全走下电梯,无人上下电梯,电梯关门,向另一个目的层运动,火灾时,电梯自动归位到首层。
二、题目分析从题目要求来看,需要实现的功能有:3.电梯所在楼层的显示三、原理分析本课程设计以步进电机为驱动电机,通过8086处理器、8259A中断控制器、8255可编程接口为核心芯片,并辅以开关、LED,构成一个控制系统,用以模拟电梯正常运行过程。
其中的实验器材原理分别为:步进电机:作为被控制的电机,电机每走一步转过度,转一圈需要48步才能转一圈。
电梯的控制方法为:A-AB-B-BC-C-CD-D-DA-A,一个周期内有八步,按照这个规律不断循环就能实现电机的连续运转。
8086:作为CPU,控制步进电机、8259A可编程中断控制器、8255可编程接口以及LED,使用汇编语言编程。
微机原理课程设计_11

一、设计内容设计一个投票统计器,完成投票、计票统计和票数显示等功能。
二、设计原理及方案在8086最小工作模式下,连接一块8255A芯片。
在 8255A的C端口连接8个开关,开关按下表示支持,灯亮,开关不按便是反对,灯不亮,从8255A的C端口输入投票结果,经8086运算统计出结果;在 8255A的A端口连接一块7段LED数码管,将输出结果通过数码管显示出来。
电路图:程序代码:A_PROT EQU 200H ;可通过计算获得,连接的是IO1 B_PROT EQU 202HC_PROT EQU 204HCT_PROT EQU 206HDATA SEGMENTTAB1 DB 7FH,07H,7DH,6DH,66H,4FH,5BH,06H,3FHDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DX,AXMOV AL,10001001B ;A端口输出,C端口输入MOV DX,CT_PROTOUT DX,AL ;控制字写入MOV DX,C_PROT ;C端口清零MOV AL,0OUT DX,ALAGAIN: MOV DX,C_PROTIN AL,DXTJ: XOR AH,AH ;统计1个数MOV CX,8LOOP1: SAL AL,1ADC AH,0 ;进位加CF,以统计出C端口中1的个数LOOP LOOP1MOV AL,AHPUSH BXLEA BX,TAB1XLATMOV DX,A_PROTOUT DX,ALPUSH CX ;延时10msMOV CX,2801WAIT1: LOOP WAIT1POP CXJMP AGAINMOV AH,4CHINT 21HCODE ENDSEND START三、运行结果程序结果图:四、设计总结与体会为期一周的微机原理课程实践终于结束了,回过头来,感慨万千。
过了一个多月,书本上的好些知识已然忘却,刚开始拿到课题时,看到一大堆传说中的神器,霎时凌乱了,选来选去,从仅剩的课题中挑了“投票统计器”,上网搜索了一下,大体上把设计的方向搞清了,接下来,便是开始设计了。
微机原理课程设计讲解

微机原理课程设计学院:机电工程学院专业:自动化班级:XXXX学号:XXXX姓名:XX指导教师:XXXXXXXX 完成时间:2015一、课程设计的基本要求•设计8088微处理器最小系统•用8284设计频率恒定的时钟电路•用6264和2764设计存储器(RAM和ROM)电路。
•用ADC0809组成8位温度检测A/D变换接口电路•用DAC0832设计8位D/A变换接口电路驱动直流电机•用8255和8253设计步进电机控制电路•用8255外联LED和键盘显示电路二、设计的基本思路采用8088的最小方式,利用三片74LS373锁存器设计20位地址总线电路,利用一片74LS245收发器形成数据总线电路。
利用8254芯片提供频率恒定的时钟信号,同时具有复位信号和准备好信号发送给8088系统。
运用两片2764和两片6264进行扩展,形成16K的ROM和16K的RAM电路。
系统的定时计数器由一片8253构成,中断系统由8259组成,并行接口电路由8255构成。
AD转换电路由ADC0809及其外围电路构成,由DAC0832及其外围电路构成DA转换电路驱动直流电机。
芯片所需的片选信号均由74LS138译码电路产生。
三、系统的地址分配ROM2764(1):0FC000H~0FDFFFH;ROM2764(2):0FE000H~0FFFFFH;RAM6264(1):00000H~01FFFH;RAM6264(2):02000H~03FFFH;ADC0809:0058H~005FH;DAC0832:0074H;计时器8253:0020H~0023H;并行接口芯片8255:0028H~002BH;键盘地址:0070H~0073H; LED地址:0080H~0083H。
四、具体设计1、8088微处理器最小系统1.1 8088微处理器介绍8088微处理器采用40条引脚的双列直插式封装。
为减少引脚,采用分时复用的地址/数据总线,因而部分引脚具有两种功能。
微机原理 课程设计.doc

电子信息工程专业微机原理课程设计报告课题名称:出租车计价器学生班级:自动化1班学生学号:学生姓名:指导教师:成绩评定:2010年元月 1日摘要当有人乘车时,司机按“开始键START”同时开动汽车。
通过转速传感器装置,这个装置可以在车轮转动时产生源脉冲,源脉冲经过修整后,送至具有计数和显示功能的主体模块。
其中显示部分有三个部分:里程显示、价格显示、以及等时显示。
要求设定里程从零开始计,价格从起步价(可以设定为5元)开始计,而且在不大于起步里程(设定为5公里)时,价格一直是起步价5元,若超过起步里程,计价显示在原有起步价基础之上然后加上相应的里程费用。
设单位里程一公里价格2元。
当在运作过程中是由于红灯或者客人需要的有效等待时,主题模块30S如果没有检测到脉冲信号,则计价显示工作,并且每隔30S计价器就增加一元。
这便是出租车计价器的原理和设计思路。
关键词:模块化设计 8086CPU 汇编程序设计目录摘要 (2)关键字 (2)正文 (3)前言 (3)本论 (3)一、开题论证 (3)二、系统整体论证 (4)三、硬件方案选择部分 (4)四、软件编写部分 (5)五、整体测试情况 (18)结论和感想 (19)谢辞 (20)参考文献 (20)电子系微机原理与接口技术课程设计报告正文前言微机原理与接口技术是一门理论结合实践的专业基础课,同时也是考研的考察科目。
可以毫不夸张的说,学好学精微机原理,在就业时就有了非常大的优势。
为了让我们更好的掌握汇编语言和各种芯片的特点和功能,安排了我们这次课程设计。
8086 CPU及其相应的外围可编程芯片实现对计价器主体功能的实现是本次试验的目的,需要充分考虑了星研电子ES-PCI环境下的硬件条件,我负责这次设计的统筹环节,并负责书写报告。
本论一、开题论证:设计满足的基本要求包括:1、里程显示价格显示(起步价以及起步价之后的里程费用的显示)2、等时收费3、复位。
当有人乘车时,司机按“开始键START”,且开动汽车。
微机原理课程设计
微机原理课程设计课程设计任务书学⽣姓名:黎健专业班级:电⽓0804 指导教师:张锐⼯作单位:⾃动化学院题⽬: 计算机时钟模拟显⽰软件设计初始条件:1.⽤于调试程序的IBM兼容PC机⼀台;2.安装DOS/WIN98操作系统或运⾏于DOS/ WIN98兼容⽅式;3.EDIT 等⽂本编辑器输⼊80x86汇编程序,MASM 5.0编译及链接程序。
要求完成的主要任务:(包括课程设计⼯作量及其技术要求,以及说明书撰写等具体要求)1.使⽤汇编语⾔设计⼀个运⾏于计算机的时钟模拟显⽰软件,软件应实现模拟显⽰时钟,要求⾄少有⼀种动态时钟显⽰效果如七段码管形状显⽰或旋转指针式指⽰效果等。
可以附加显⽰花边背景和⽇期信息。
2.说明书撰写格式应符合《课程设计说明书统⼀书写格式》。
时间安排:1.程序框图设计,3天2.编程,4天3.调试,3天4.编写设计报告,4天指导教师签名:年⽉⽇系主任(或责任教师)签名:年⽉⽇摘要汇编语⾔是⾯向机器的程序设计语⾔。
在汇编语⾔中,⽤助记符代替操作码,⽤地址符号或标号代替地址码。
这样⽤符号代替机器语⾔的⼆进制码,就把机器语⾔变成了汇编语⾔。
于是汇编语⾔亦称为符号语⾔。
使⽤汇编语⾔编写的程序,机器不能直接识别,要由⼀种程序将汇编语⾔翻译成机器语⾔,这种起翻译作⽤的程序叫汇编程序,汇编程序是系统软件中语⾔处理系统软件。
汇编语⾔是⼀种功能很强的程序设计语⾔,也是利⽤计算机所有硬件特性并能直接控制硬件的语⾔。
汇编语⾔,作为⼀门语⾔,对应于⾼级语⾔的编译器,需要⼀个“汇编器”来把汇编语⾔原⽂件汇编成机器可执⾏的代码。
⾼级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于⾼级语⾔的特征,⽐如结构化、抽象等。
在这样的环境中编写的汇编程序,有很⼤⼀部分是⾯向汇编器的伪指令,已经类同于⾼级语⾔。
现在的汇编环境已经如此⾼级,即使全部⽤汇编语⾔来编写windows的应⽤程序也是可⾏的,但这不是汇编语⾔的长处。
8086微机原理课程设计_压力测量系统的设_有硬件电路图计
序号:课程设计(微机原理及应用A)二○一一年七月八日课程设计任务书及成绩评定课题名称压力测控系统的设计I、题目的目的和要求:设计一个对压力传感器的信号进行检测并在LED数码显示器上显示压力值的系统,当压力低于30pa时,黄灯闪烁,闪烁周期为1秒。
当压力高于150pa时,红灯闪烁。
LED的显示内容为P=XXX。
X为测试值。
II、设计进度及完成情况日期内容7月4日查阅资料,拟定设计方案。
7月5日选课程设计题目,编写程序。
7月6日设计总体方案,上机调试。
7月7日整理打印设计报告。
7月8日上交设计报告并进行答辩。
III、主要参考文献及资料《微型计算机原理及应用》清华大学出版社郑学坚周斌《微型计算机技术及应用》清华大学出版社史嘉权《微机原理与接口技术基础与应用》海洋出版社邓振杰《微机原理与接口技术实验及课程设计》西南交通大学出版社杨斌《单片机原理及接口技术》清华大学出版社梅丽凤王艳秋学科部主任(签字)Ⅵ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○一一年七月八日一、设计要求设计一个对压力传感器的信号进行检测并在LED数码显示器上显示压力值的系统,当压力低于30pa时,黄灯闪烁,闪烁周期为1秒。
当压力高于150pa 时,红灯闪烁。
LED的显示内容为P=XXX。
X为测试值。
二.设计思想压力测试系统的设计,必然要牵涉到压力的感应与转化,所以必须要有压力传感与A/D转换器。
将自然中的模拟量转化为电压信号,再转化位数字信号进行处理。
一个小型的微机系统,必须要有8086cpu来进行整体的控制,将其通过8255与A/D传感器进行连接。
这就是这个系统的主要框架。
而具体的应用框架则是在主要的框架上添加。
要当压力低于30pa时,黄灯闪烁。
当压力高于150pa时,红灯闪烁。
则应添加8255。
模块。
通过编程来控制黄灯与红灯的亮灭情况,考虑到要进行比较,所以我用了两个比较器进行数据的比较。
同时,由于灯要闪烁,闪烁周期要一秒,所以我们考虑到还要加一个8253芯片去控制。
微机原理课程设计报告书
微机原理与应用课程设计目录一、设计任务1、计时秒表,具有分、秒和百分之一秒的计时功能。
2、可以在屏幕中央显示计时结果,屏幕显示彩色图案和文字。
3、秒表具有键控启/停功能,而且可以随时通过键盘复位,清零。
二、设计原理1、HALT<启动子程序>2、DIS〔宏定义——苹果显示程序3、DISS〔宏定义——字符串的输出4、CLOUR〔字体颜色设置程序5、IOSET<设置光标位置子程序>6、GO<初始化显示子程序>7、TIME<延时子程序>8、TRAN<压缩BCD码转ASCII码程序>9、复位、停止等功能的实现三、流程图a)主程序流程图b)压缩BCD转ASCII码子程序流程图c)延时子程序流程图四、程序段五、程序调试六、程序运行结果七、心得体会八、参考文献一、设计任务:1.计时秒表,具有分、秒和百分之一秒的计时功能,并可以在屏幕中央显示计时结果。
2.屏幕显示彩色图案和文字。
3.秒表具有键控启/停功能,而且可以随时通过键盘复位,清零。
二、设计原理:本程序的主要设计原理是用主程序完成百分之一秒与秒之间的转换,显示计时结果,实现暂停,暂停再启动,复位,复位再启动的功能,并通过调用一些附加程序,缩减主程序的长度,提高运行效率和精度,现将用到的所有附加程序的原理及其在运行过程中所起到的作用汇总如下:1.DIS〔宏定义——苹果显示程序通过宏调用,实现苹果图案的显示。
在宏定义里,设置一个形参变量,作为移动光标的位置,在下面调用宏中,给予变量X不同的实参,输出苹果图案。
2.DISS〔宏定义——字符串的输出原理同上。
3.CLOUR〔字体颜色设置程序通过字体颜色设置程序,实现屏显字体颜色的改变。
当改变BX值时,字体颜色会改变。
4.HALT<启动子程序>通过启动子程序,实现计时的开始,当从键盘输入一个字符时,判断是否等于S,如果不等,则在循环执行启动子程序中动态等待,直到输入的字符为S时,计时开始。
微机原理课程设计_简易计算器的设计
目录一前言 (1)二总体设计 (2)三硬件设计 (2)3.1微处理器8086芯片 (2)3.2可编程并行接口芯片8255A (3)3.3 LED数码管 (4)3.4 4×4矩阵按键 (4)3.5硬件原理图 (6)四软件设计 (7)4.1程序流程图 (7)4.2源代码 (9)五仿真 (18)六课程设计体会 (18)七参考文献 (19)一前言1.1课程设计的目的和任务课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。
它具有动手、动脑和理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一个重要教学环节。
通过课程设计,要求学生熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,使学生得到微机开发应用方面的初步训练。
让学生独立或集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。
通过本次课程设计使学生熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。
通过课程设计实践,不仅要培养学生事实求是和严肃认真的工作态度,培养学生的实际动手能力,检验学生对本门课学习的情况,更要培养学生在实际的工程设计中查阅资料,撰写设计报告表达设计思想和结果的能力。
1.2课程设计指导及要求在课程设计时,2~3名同学组成1个设计小组,分别完成项目的功能设计、电路编辑及调试、编码及调试和课程设计报告编写工作。
同批次同学中选择同一题的不超过3组。
在教师指导下,可以相互讨论。
每设计小组提交1份设计报告,设计报告由设计小组同学独立完成,不得互相抄袭。
教师的主导作用主要在于指明设计思路,启发学生独立设计的思路,解答疑难问题和按设计进度进行阶段审查。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告课程微机原理课程设计题目杨辉三角实现系别物理与电子工程学院年级09 专业电子信息工程班级电信(2)班学号1604092010学生姓名师骏指导教师职称设计时间2012-3-19~2012-3-31目录引言2第一章杨辉三角简介21.1杨辉三角历史 2 1.2 杨辉三角性质 2第二章汇编语言简介42.1 汇编语言概况 4 2.2汇编语言优点及缺点 4第三章程序设计流程图6第四章子程序设计74.1 输入子程序 7 4.2杨辉三角算法子程序 8 4.3计算输出数字长度子程序 94.4计行前数字间空格子程序9 4.5输出子程序11结束语13参考文献13附录14附录A 14附录B 19杨辉三角实现引言中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。
中国古代数学史曾经有自己光辉灿烂的篇章,而杨辉三角的发现就是十分精彩的一页。
杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。
第一章杨辉三角简介1.1 杨辉三角历史北宋人贾宪约1050年首先使用“贾宪三角”进行高次开方运算。
11世纪中国宋代数学家杨辉在《详解九章算法》里讨论这种形式的数表,并说明此表引自11世纪前半贾宪的《释锁算术》,并绘画了“古法七乘方图”。
故此,杨辉三角又被称为“贾宪三角”。
元朝数学家朱世杰在《四元玉鉴》(1303年)扩充了“贾宪三角”成“古法七乘方图”。
意大利人称之为“塔塔利亚三角形”(Triangolo di Tartaglia)以纪念在16世纪发现一元三次方程解的塔塔利亚。
在欧洲直到1623年以后,法国数学家帕斯卡在13岁时发现了“帕斯卡三角”。
布莱士·帕斯卡的著作Traité du triangle arithmétique(1655年)介绍了这个三角形。
帕斯卡搜集了几个关于它的结果,并以此解决一些概率论上的问题,影响面广泛,Pierre Raymond de Montmort(1708年)和亚伯拉罕·棣·美弗(1730年)都用帕斯卡来称呼这个三角形。
1.2 杨辉三角性质1、每行数字左右对称,由1开始逐渐变大,然后变小,回到1。
2、第n行的数字个数为n个。
3、第n行数字和为2^(n-1)。
(2的(n-1)次方)4、每个数字等于上一行的左右两个数字之和。
可用此性质写出整个帕斯卡三角形。
5、将第2n+1行第1个数,跟第2n+2行第3个数、第2n+3行第5个数……连成一线,这些数的和是第2n个斐波那契数。
将第2n行第2个数,跟第2n+1行第4个数、第2n+2行第6个数……这些数之和是第2n-1个斐波那契数。
6、第n行的第1个数为1,第二个数为1×(n-1),第三个数为1×(n-1)×(n-2)/2,第四个数为1×(n-1)×(n-2)/2×(n-3)/3…依此类推。
7.两个未知数和的n次方运算后的各项系数依次为杨辉三角的第(n+1)行。
图1-2-1 杨辉三角图 1-2-2 杨辉三角数学公式第二章汇编语言简介2.1 汇编语言概况根据本次设计要求:通过汇编语言编写汇编程序要求能够在提示信息下,从计算机键盘任意输入一个数据,在输出提示信息后显示相应的杨辉三角。
下面对汇编语言作简单的介绍。
汇编语言(AssemblyLanguage)是面向机器的程序设计语言。
在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。
这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。
于是汇编语言亦称为符号语言。
使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。
汇编程序把汇编语言翻译成机器语言的过程称为汇编。
汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。
汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。
高级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。
在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。
现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。
汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。
2.2汇编语言优点及缺点汇编语言直接同计算机的底层软件甚至硬件进行交互,它具有如下一些优点:(1)能够直接访问与硬件相关的存储器或I/O端口;(2)能够不受编译器的限制,对生成的二进制代码进行完全的控制;(3)能够对关键代码进行更准确的控制,避免因线程共同访问或者硬件设备共享引起的死锁;(4)能够根据特定的应用对代码做最佳的优化,提高运行速度;(5)能够最大限度地发挥硬件的功能。
同时还应该认识到,汇编语言是一种层次非常低的语言,它仅仅高于直接手工编写二进制的机器指令码,因此不可避免地存在一些缺点:(1)编写的代码非常难懂,不好维护;(2)很容易产生bug,难于调试;(3)只能针对特定的体系结构和处理器进行优化;(4)开发效率很低,时间长且单调。
第三章程序设计流程图首先程序开始时在电脑上显示输入提示信息,提醒输入的操作数只能是1到10之间的正整数,超过这个范围或太小则显示提示信息输入的数过大。
得到杨辉三角的阶数之后即调用一个算法子程序来求相应阶数的每一个数值,每求出一个数值即将其数压入堆栈中保存起来,方便以后输出数字时直接调用。
算完之后,通过外层循环di计数输出每一行,与此同时又通过内层循环si计数输出一行中的每一个数,在输出数字时通过调用show子程序将数字均以十进制输出,在输出数值的时候通过showspace函数来控制数与数之间的空格及行前空格的输出,上半部分的数字输出之后将其所有数值及空格格式都存在一个预制的存储单元内,然后直接实现逆序输出,这样最终能在屏幕中打印出一个菱形的杨辉三角。
主程序流程图如图3.1示:图3.1 主程序流程图第四章子程序设计4.1 输入子程序输入用int 16 ah为0这一功能,从键盘读字符,字符存在al中,输入时用cmp判断令其只能输入字符’0’~‘9’每次输入的字符转化为十进制存并阔展为字存入ax中,再将ax 与初始为0的bp交换,再将ax乘以十后与bp相加,结果存在bp中,再返回输入,这样就能输入两位数。
shur procpush cxpush bxxor bp,bpmov bx,10mov cx,2input:mov ah,0 ;键盘输入数据存在al中int 16hcmp al,0dh ;以回车结束输入jz okcmp al,'0' ;只允许输入0~9jb inputcmp al,'9'ja inputmov ah,0eh ;显示有效输入int 10hsub al,30h ;化ASCII为十进制cbw ;字节扩展为字xchg ax,bpmul bx ;扩大10倍add bp,ax ;加一位loop inputok:nop ;数值结果在BP中pop bx ;恢复用到的寄存器pop cxretshur endp4.2杨辉三角算法子程序求某m行n列的数C(n, m)时采用递归的方法求出该数具体算法是:{ C(n, m) = 1 (n < m 或 m = 0){ C(n, m) = C(n-1, m-1) + C(n-1, m) (n > m)即某位置组合数等于上一行左右两数之和,先算出左肩上的数并压栈保存,再次调用C过程求出右肩上的数并压栈保存,左肩与右肩的数相加从而可以求出下一行的组合数吗,其间存在递归调用,直至求出最大的那个数才返回初始调用的call的下一个语句。
C procpush bpmov bp, spsub sp, 2 ; 预留一个存储位置mov bx, [bp+6] ; 保存m到bxcmp bx, [bp+4] ; 如果m > n 返回1jz L1cmp bx, 0 ; 如果m = 0 返回1jz L1mov ax, [bp+4] ; 保存n到axdec ax; ax = ax - 1dec bx; bx = bx - 1push bxpush axcall C ; 返回上一行左边的那个数mov [bp-2], ax ; 保存左肩膀上的数mov ax, [bp+4] ; 以下5句同理,返回上一行右肩膀上的数dec axpush [bp+6]push axcall Cadd ax, [bp-2] ; 和左肩膀上的数相加得出该组合数jmp L2L1:mov ax, 1L2:mov sp, bppop bpret 4 ; ax返回组合数C endp4.3计算输出数字长度子程序将此数不断除以十,每除一次计数加1,当al即商为0时停止返回计数值即长度。
例如:计算输出数字最大长度以便分配行间行前空格时,n阶的最大数应该是最后一行中间那个数即C(n, n/2),将此数不断除以十,每除一次计数加1,当al即商为0时停止返回计数值即最大长度。
getdigit procpush dxmov bx, 10xor dx, dxnext:cmp ax, 0jle ok2div bland ax, 0ffhinc dxjmp nextok2:mov ax, dxpop dxretgetdigit endp4.4计行前数字间空格子程序先定义一个可以接受输入ax个空格的子程序输出行前空格时,n阶杨辉三角的i行行前空格数=(n-i)*cl ,cl是最大长度,某数与下一个数字间空格数=数的最大长度cl+cl-该数的长度。
具体程序如下:call showspace ; 输出行前空格xor si, si ; 内存循环计数si,内层循环输出一行中的每个数jmp cp2up2:inc si ; 更新dicp2:cmp si, di ; 测试循环条件,循环di次jg done2push sipush dicall C ; 获取该行的位于si位置的组合数,调用C(di, si) push ax ; 保存该组合数push bxmov bx ,dxmov [bx], axinc dxinc dxpop bxcall show ; 输出该数mov ax, cxsub ax, 1push bxmov bx ,dxmov [bx], axinc dxinc dxpop bxcall showspacepop axcall getdigit ; 获取该组合数长度mov bx, axmov ax, cxsub ax, bx ;add ax, 1push bxmov bx ,dxmov [bx], axinc dxinc dxpop bxcall showspacejmp up2 ; 更新内层循环showspace:push dxmov bx, axmov ah, 2mov dl, ' 'nexts:cmp bx, 0jle donesint 21hdec bxjmp nextsdones:pop dx4.5输出子程序输出分为上半部分和下半部分,上半部分输出利用2号功能将每个数除以10将余数转化为字符倒序输出,下半部分是将算好的数以及行前行间空格数算好然后倒序输出。