微机原理课程设计

时间:2024.4.30

课程设计任务书

学生姓名:              专业班级:                 

指导教师:              工作单位:   自动化学院   

题  目:  图形变换程序设计(要程序加扣扣二五九零其物流而肆意)

初始条件:

掌握8086汇编语言程序设计方法,设计一个图形变换显示程序。

要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

1. 程序运行后,键盘输入不同进行不同处理:

(1)输入‘Q’,显示‘Thank You !’并结束程序;

(2)输入‘E’,显示一个用不同颜色填充且带有边框的矩形图案;输入‘F’,显示一个用不同颜色填充的圆形图案。

2. 撰写课程设计说明书。内容包括:摘要、目录、正文、参考文献、附录(程序清单)。正文部分包括:设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。

时间安排:   

12月30日-----12月31日   查阅资料及方案设计

1月2日-----1月3日       编程

1月6日                    调试程序

1月7日-----1月8日       撰写课程设计报告

指导教师签名:                      年    月    日

系主任(或责任教师)签名:          年     月    日


目录

摘要................................................................................................................................................. I

图形变换程序设计......................................................................................................................... 1

1 设计意义..................................................................................................................................... 1

2 设计内容..................................................................................................................................... 1

2.1程序的内容与要求..................................................... 1

2.2 程序运行条件......................................................... 1

3 方案设计..................................................................................................................................... 1

3.1 设计思路............................................................. 1

3.1.1 显示字符程序................................................... 1

3.1.2 显示圆形....................................................... 2

3.1.3 显示矩形....................................................... 2

3.2 程序流程图........................................................... 3

4 程序分解..................................................................................................................................... 3

4.1 字符显示程序......................................................... 3

4.2 圆形显示程序......................................................... 3

4.3 矩形程序显示......................................................... 5

4.4 产生颜色的子程序..................................................... 6

4.5 屏幕初始化子程序..................................................... 6

5 运行结果显示............................................................................................................................. 6

5.1 矩形输出显示......................................................... 6

5.2 圆形输出显示......................................................... 7

5.3 字符串输出显示....................................................... 7

6 设计过程中的问题..................................................................................................................... 8

心得体会......................................................................................................................................... 9

致谢............................................................................................................................................... 10

参考文献....................................................................................................................................... 11

附录............................................................................................................................................... 12

成绩评定表................................................................................................................................... 17


摘要

  进入21世纪,信息社会发展的脚步越来越快,对人才的的需求也呈现新的变化趋势。计算机成为新世纪高素质人才必须熟练掌握的工具,大学计算机公共课程也面临着新的机遇和挑战。

   随着计算机硬件的发展,微机系统的功能越来越强,其价格也越来越便宜,因而拥有各行各业的用户。用户希望通过计算机方便地解决各自领域的问题。基于冯.诺依曼体系结构的计算机要求自动解决任务,必须事先将问题分解为计算机能够处理的各个步骤,用某种语言将这些步骤描述出来,然后让计算机按规定的步骤控制计算机工作。计算机的程序设计语言也是经历了这样的发展过程。

   汇编语言是计算机程序设计的语言之一,是在机器语言助记符的形式上完善而来。它改善了及其语言的可读性、可记性,能够利用计算机所有的硬件特征且能直接用来控制硬件,是计算机能够提供给用户的最快且最有效的汇编语言。

   本次设计即是在8086汇编语言的基础上,利用Masm for windows集成实验环境,通过应用微机原理中汇编的几个步骤——编辑、汇编、连接、运行或调试运行,使得在doc界面完成图形变换。

关键词:汇编语言 doc 控制 Masm

  


图形变换程序设计

1 设计意义

(1)  巩固和加深课堂所学知识。

(2) 将课本上的理论知识和实际应用有机的结合起来,培养同学们分析和解决实际问题的能力。

(3) 通过对汇编语言程序代码的阅读、修改、设计,理解和掌握复杂的汇编语言应用程序的编程,提高实践编程能力。

  本程序要求按不同的键显示不同的图形,按“q”键退出。实质上通过做这道题目可以检查学生对汇编语言这门课程的基本知识的掌握程度。能用汇编语言熟练地运用顺序、选择、循环三大结构,进一步掌握各个指令的功能,特别是转向指令,能够让我们熟悉并掌握DOS系统功能调方法;同时在程序设计过程中熟悉并掌握各种指令的应用,知道编程的具体流程。
  只有掌握汇编语言基本编程方法,掌握程序各部分功能及其相互联系、相互作用,才能把程序写出来,才能把程序写好。

2 设计内容

2.1程序的内容与要求

   掌握8086汇编语言程序设计方法,设计一个图形变换显示程序。程序运行后,键盘输入不同进行不同处理:

(1)输入‘Q’,显示‘Thank You !’并结束程序;

(2)输入‘E’,显示一个用不同颜色填充且带有边框的矩形图案;输入‘F’,显示一个用不同颜色填充的圆形图案。

2.2 程序运行条件     

本程序可在DOS,windows 98或DOS模拟器上运行。所需要工具软件为MASM5.0及以上版本。

3 方案设计

3.1 设计思路

3.1.1 显示字符程序

   显示“Thank You”程序是最易于设计的一部分,只需要定义其字符串为字节型变量,并定义在当键盘输人为‘Q’时显示,并退出运行即

3.1.2 显示圆形

   首先,定义x为竖线的列值,Y1和Y2分别为竖线的两端点的行值,并将界面分成LEFT和RIGHT两部分。在LEFT部分,输入值为列数A,给圆的半径R赋具体值,通过算法完成下式求得A对应的行值,从而确定Y2,再利用中间变量实现Y1与Y2的等值,即可画出LEFT部分的一条弦。再用宏定义,使A值从0到R,完成弦在0到R上的积分,就形成左半部分的半圆,同理,可完成右半部分的半圆,两个半圆整合,便形成圆。

            图3-1 定义弦                         图3-2 计算圆上点的坐标 

3.1.3 显示矩形

   先确定一点,定义为矩形左上角的列号和行号,即确定了矩形的一个角点坐标,再定义其长度和宽度并赋值,知道左上角角点坐标及矩形长宽,即可画出矩形。边框的设计实际是大小两个矩形的重叠形成的,定义第二个矩形时,其角点及长宽比之前的尺寸少有增加,酌情而定,设置输出时,底层显示尺寸较大的矩形,上层显示尺寸较小的矩形,使得上层矩形显示完整,下层矩形显示多出来的部分,即形成边框,并在输出颜色是设置两个举行的色差,从而明显显示出边框。

3.2 程序流程图

   程序流程图如图3-3所示

                  

                                图3-3  程序流程图

4 程序分解

4.1 字符显示程序

   在设计思路中已经提到,显示字符的程序较为简单,只需用字节型变量定义字符串,并定义在接收‘Q’是显示,并退出运行即可。

    DB  0DH,0AH,'Q: display "Thank You !" and quit to DOS.',0DH,0AH

MSGQ    DB  0DH,0AH,'Thank You !','$'

4.2 圆形显示程序

(1)利用弦的积分方法,定义宏:

   LINE MACRO X,Y1,Y2              ;画列值为x,行值从Y1到Y2的直线

        LOCAL LL,FIRST

        MOV   AAAAA

        MOV   AAAAA

        MOV   AAAAA

        MOV   AAAAA

        JMP   AAAAA

LL:     INC   AAAAA             ;行值加1

FIRST:  MOV   AAAAA

        INT    10H                  

        CMP   DX,Y2

        JNZ    LL                   ;判断Y1和Y2是否相等,若相等则完成

        ENDM

2)定义坐标:

   CIRCLE  MACRO

        MOV   A,0                 ;初始化圆的横坐标

AGA:    CALL  AAA             ;计算纵坐标的值

        MOV   AAA

        MOV   CL,A

        ADD   CX,X0

        MOV   AAA         ;右平面弦的列值

        MOV   AAA

        MOV   CL,A

        NEG   CX

        ADD   CX,X0     

        MOV   AAA          

        MOV   AAA    

        ADD   AAA

        MOV   AAA             ;弦的上端点的行值

        MOV   AAA

        NEG   AAA

        ADD   AAA

        MOV   AAA         ;弦的下端点的行值

        LINE  AAA    

        LINE   RIGHT,DOWN,UP        ;在右平面画弦

        INC    A                 

        MOV   AL,R

(3)计算纵坐标的子程序:

    SQRT    PROC   NEAR             ;计算行坐标

        MOV   

        MUL

        MOV

        MOV  

        MUL   

        SUB   

        MOV    CX,0

LAST1:  MOV    DX

        INC    D

        SUB    AX

        JC     E

        INC    C

        JMP    L

EXIT1:  MOV    H,CX              ;计算结果保存在H单元内

        RET

SQRT    ENDP

4.3 矩形程序显示

   产生矩形的子程序:

   RECTANGLE   PROC  NEAR

        PUSH  ??

        PUSH  ??

        PUSH  ??

        PUSH  ??

        PUSH  ??

      

        MOV   D??         ;矩形左上角行号

        MOV   CX??    

        MOV   AL,??

        MOV   DI??    ;矩形的长

        ADD   DI,CX

        MOV   SI,??TWID     ;矩形的宽

        ADD   SI,DX

HLINE:

        MOV   C??MN

HAGAIN: 

        MOV    AHV     

        MOV   ??

        INT    ??

        INC    CX

        CMP   ??           ;是否达到矩形的长?   

        JL     HA??

        ADD    DX,1

        CMP    D??E

        POP    ??

        POP    ??

        POP  ??X

        POP    D??

        POP    AX

        RET

RECTANGLE ENDP

4.4 产生颜色的子程序

   RANDOMCOLOR ??OC  NEAR

        PUSH  ??

        PUSH  BX

        PUSH  ??X

RANDCOLOR:

        IN   AL,40H

        CMP  A??

        JA   ??OLOR

        MOV  V??,AL

        POP ??

        POP  BX

        POP  AX

        RET

RANDOMCOLOR ENDP

4.5 屏幕初始化子程序

   CLSMENU PROC   NEAR

        MOV ??               ;设置屏幕显示方式

        MOV  ??           ;定义成640*480 16色图形模式

        INT  10H              

        LEA  B??           ;显示菜单

        MOV  AH,13H

        MOV  AL,01

        MOV  C??

        MOV ??

        MOV  BH,0

        MOV ??

        INT ??

        RET

CLSMENU ENDP

5 运行结果显示

5.1 矩形输出显示

   输入‘E’,矩形输出显示如图5-1所示

    

     图5-1(a) 矩形输出显示程序                      图5-1(b) 矩形输出显示程序

5.2 圆形输出显示

   输入‘F’,圆形输出显示如图5-2所示

  

        图5-2(a)圆形输出显示                          图5-2(b)圆形输出显示

5.3 字符串输出显示

   输入‘Q’,字符串输出显示如图5-3所示

5-3 字符串输出显示

6 设计过程中的问题

   在设计过程中出现的最大问题,就是开始按‘E’后正常显示矩形,再按‘F’后,在显示圆的同时,还会显示矩形,矩形在底层,再按‘E’,在显示矩形的同时还会显示圆形,且圆形在底层,运行结果如图6-1所示。

  

       图6-1(a) 错误运行结果                       图6-1(b) 错误运行结果    

   经分析,出现该问题的原因是没有清屏,导致按下一个键,显示下一个图形的时候,上一个图形依旧不会消失,找到了问题所在,之前是由于在设置输出时,仅在第一次输出矩形之前屏幕初始化。修改后,定义屏幕初始化的子程序,在输出矩形和圆形事,都先有调用清屏的子程序这一步,是的错误得以纠正,屏幕初始化子程序的调用如下:

   CALL CLSMENU               ;屏幕初始化并显示菜单

        CALL RAN??????       ;随机产生颜色

        CALL ??              ;画外框矩形

    CALL CLSMENU             ;屏幕初始化并显示菜单

        CALL RANDOMCOLOR    ;随机产生颜色

        MOV ??

        CIRCLE                ;在屏幕上画出半径为R的圆

心得体会

   本次课程设计题目是图形变换程序设计。初次看到题目,没有任何的思路,情急之下,心神不定地查了一整天的资料,也没有太大的收获。自己完全局限于课本上所学的简单的语言,但那远不足以完成本次课设的任务。最后,我决定通过查阅参考资料,并上网查询各种代码的含义,自己设计画图的算法,实现图形的显示。

   在整个过程中,圆的画法是最不易的。开始参考了别人画圆轨迹线,从中得到了启示,做圆上弦的积分由线及面,形成圆面。

   这次课程设计对我而言,其难度是之前从未有过的。然而,我还是靠自己的毅力挺了过来。在查阅了大量资料后,掌握了简单图形显示的程序,熟悉了子程序的调用和doc功能的实现,并初步学会了中断在程序中的应用。

   两周的汇编语言课程设计结束了,我的收获是很大的。通过课程设计的编程和对编程过程中遇到的问题的思考,有效的提高了我对汇编的认识和理解,切实提高了我的编程能力,补全了我的不足。

   值得庆幸的是,这次课程设计,自己是独立完成的,并未参考他人方案。虽然并未有很多设计上创新的地方,但对我来说,这是一种突破,自己独立解决问题的能力进一步提高。

   在今后的课程设计中,我依旧要保持这种独立思考的习惯,将自己的短处变为长处。

     

  

致谢

   我本次的课程设计是在??老师老师亲切关怀与细心指导下完成的。从题目的选择到设计的最终完成,??老师始终都给予了我细心的指导和不懈的支持,并且在耐心指导之余,?????老师仍不忘关心我们的生活,冷冷寒冬的关怀让我们倍感温暖。值得一提的是,????老师宅心仁厚,闲静少言,不慕荣利,对学生认真负责,在他身上,我们可以感受到一个学者的严谨和务实,这些都让我们获益菲浅,并且将终生受用无穷。毕竟“经师易得,人师难求”,希望借此机会向???老师表示最衷心的感谢!

参考文献

【1】彭虎 周佩玲 付忠谦.《微机原理与接口技术》(第二版) 电子工业出版社 2008.3

【2】张凡.《微机原理与接口技术》(第二版) 清华大学出版社 2010.9

【3】朱定华. 《微机原理、汇编与接口技术》清华大学出版社 1010.1

【4】牟琦 聂建萍. 《微机原理与接口技术》清华大学出版社 1007.12

【5】吴叶兰. 《微机原理与接口技术》机械工业出版社 2009.8

附录

;----------------------------------------------------------------------

;宏功能:画一条竖线

;哑元意义:x为竖线的列值

;          Y1和Y2分别为竖线的两端点的行值

;----------------------------------------------------------------------

LINE    MACRO X,Y1,Y2                  ;画列值为x,行值从Y1到Y2的直线

        LOCAL LL,FIRST

        MOV   ??

        MOV  ?/???

        MOV   /???

        MOV   D/???

        JMP   /???

LL:     INC   /???                            ;行值加1

FIRST:  MOV   /???

        INT   10H                           ;写一个像素点

        CMP /???

        JNZ   LL                    ;判断Y1和Y2是否相等,若相等则完成

        ENDM

;----------------------------------------------------------------------

;宏功能:通过分别在左右平面画垂直于x轴的弦来画一个实心圆

;----------------------------------------------------------------------

CIRCLE  MACRO

        MOV  /???                    ;初始化圆的横坐标

AGA:    CALL/???                            ;计算纵坐标的值

        MOV   /???

        MOV  /???

        ADD /???          ;右平面弦的列值

        MOV   CH,0

        MOV   /???

        NEG   V

        ADD   C/??? 

        MOV /???                ;左平面弦的列值

        MOV   DX,H       

        ADD  /???

        MOV   V/???

        NEG   DX

        ADD   /???           

        MOV   /???           ;弦的下端点的行值

        LINE  LEFT,V/???              ;在左平面画弦

        LINE  /???             ;在右平面画弦

        INC   A                               ;继续画其他弦至画出圆

        MOV   AL,R

        CMP  /???

        JNZ   /???

        ENDM

;**********************************************************************

DATA  SEGMENT                   

    MENU    DB  0DH,0AH,'Please press a key:',0DH,0AH

            DB  0DH,0AH,'E: show a rectangle.'

            DB  0DH,0AH,'F: show a circle.'

            DB  0DH,0AH,'Q: display "Thank You !" and quit to DOS.',0DH,0AH

    MENULEN EQU  $-MENU

    MSGQ    DB  0DH,0AH,'Thank You !','$'

    ROW     /???

    COLUMN /???

    RECTLEN DW  /???

    RECTWID DW  V

    COLOR   DB/???

    R       DB    ?  /??? DB    ?                     ;存放圆的横坐标

    A2      DW    /???

    H       DW    /???                    ;存放圆的纵坐标

    Y0      EQU  /???                ;纵坐标的行值

    X0      EQU /???                     ;横坐标的列值

    RIGHT   DW    ?                       ;存放右平面的列值

    LEFT    DW    ?                       ;存放左平面的列值

    UP      DW    ?                         ;存放上半平面的行值

    DOWN    DW    ?                   ;存放下半平面的行值

DATA  ENDS

;**********************************************************************

CODE  SEGMENT

    ASSUME DS:DATA,CS:CODE,ES:DATA

;----------------------------------------------------------------------

START:  MOV  A/???

        MOV/???

        MOV  /???

;----------------------------------------------------------------------

        CALL CLSMENU         ;屏幕初始化并显示菜单

WAITPRESS:                                 ;等待按键

        MOV /???         ;接受命令

        INT  1/???

        OR   A/???     ;转换成小写字母

        CMP  AL,'e'           

        JZ   DRAWRECT

        CMP  AL/???

        CMP  A/???

        JZ   QuitProc

        JMP  W/???

DRAWRECT:

        CALL CLSMENU         ;屏幕初始化并显示菜单

        CALL R/???      ;随机产生颜色

        CALL RECTANGLE            ;画外框矩形

        PUSH V/???/???

        PUS/???

        PUSH RECTLEN

        DD  ROW,8

        ADD/???

        SUB  /???

        S/???

        ADD  COLOR,8

        CALL R/???             ;画内部矩形

        POP  REC/???

        POP  R/???

        POP  ROW

        JMPV/???S

DRAWCIRC:

        CALL CLV/???        ;屏幕初始化并显示菜单

        CALL/???  ;随机产生颜色

        MOV  /???

        CIRCLE                         ;在屏幕上画出半径为R的圆

        JMP  /???

QuitProc:

        MOV  AL,03

        MOV  AH,0

        INT  /???

        MOV  DX,OFFSET MSGQ      ;显示信息

        MOV /???

        INT  21H

        MOV  /???             ;返回DOS

        INT  21H

;----------------------------------------------------------------------

;产生矩形 子程序

RECTANGLE   PROC/???

        PUSH  AX

        PUSH  /???

        PUSH  CX

        PUSH  /???

        PUSH  /???

      

        MOV   DX,ROW         ;矩形左上角行号

        MOV  /???     ;矩形左上角列号

        MOV  /???

        MOV   /???    ;矩形的长

        ADD   DI,CX

        MOV  /???  ;矩形的宽

        ADD   SI/???

HLINE:

        MOV  /???

HAGAIN: 

        MOV    AH/???        ;写像素

        MOV /???        INT   /???

        INC    /???

        CMP    /???        ;是否达到矩形的长?   

        JL     /???

        ADD  /???

        CMP /???        ;是否达到矩形的宽?

        JL    /???E

        POP    SI/???  DI

        POP   /???

        POP /???

        RET

RECTANGLE ENDP

;----------------------------------------------------------------------

; 计算纵坐标的值辅助画圆子程序

SQRT    PROC  /???  ;计算行坐标

        MOV    A/???

        MUL    /???

        MOV  /???

        MOV    /???

        MUL    /???

        SUB    A/???

        MOV    CX,0

LAST1:  MOV    /???

        ADD   /???

        INC    DX

        SUB   /???

        JC     EXIT1

        INC    CX

        JMP    /???

EXIT1:  MOV   /???                         ;计算结果保存在H单元内

        RET

SQRT    ENDP

;---------------------------------------------------------------------------------------------------------------------

; 随机产生颜色 子程序

RANDOMCOLOR  PROC  NEAR

        PUSH  /???

        PUSH  BX

        PUSH /???

RANDCOLOR:

        IN   /???

        CMP/???

        JA   RANDCOLOR

        MOV  /???

        POP  DX

        POP /???

        POP  AX

        RET

RANDOMCOL/???

;---------------------------------------------------------------------------------------------------------------------

;屏幕初始化并显示菜单 子程序

;---------------------------------------------------------------------------------------------------------------------

CLSMENU PROC/???

        MOV  AH,0               ;设置屏幕显示方式

        MOV  AL,12H                           ;定义成640*480 16色图形模式

        INT /???                  ;调用BIOS显示中断

        LEA  BP,MENU /???

        MOV  AL,01

        MOV  CX,MENULEN

        MOV /???

        MOV/???

        MOV  DX,0/???H

        RET

CLSMENU ENDP

;**********************************************************************

CODE    ENDS

        END  START

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

指导教师签字:                

        

更多相关推荐:
微机原理课程设计报告

微机原理课程设计设计报告姓名朱文斋班级学号30905020xx教师张荣标20xx年1月5日微机原理课程设计一目的结合微型计算机原理课程的学习进一步巩固已学的知识同时针对计算机原理知识的具体应用学会对系统中DOS...

微机原理课程设计实验报告

河北科技大学课程设计报告学生姓名学号专业班级课程名称学年学期指导教师年月课程设计成绩评定表目录一课程设计的目的1二设计题目1三设计内容要求2四设计成员及分工2五课程设计的主要步骤2六课程设计原理及方案3七实现方...

数字钟_接口课设报告_8086微机原理与接口技术课程设计

接口技术基础实验报告学院计算机科学与技术学院班级计091学号09130220xx姓名曹恒楼指导老师顾晖时间20xx616接口技术课程设计目录数字钟的设计31设计需求分析与解决方案311设计需求分析3111题目要...

微机原理课程设计报告

微机原理课程设计报告设计名称:LED七段数码管数字钟学院:电子信息学院班级:电科091提交时间:20##年6月15日一:设计内容设计的电路功能是实现时钟的24进制计时并显示在数码管上,通过按键可对时钟的时、分、…

微机原理课程设计总结

南京航空航天大学微机原理课程设计数据采集系统中断法微机原理课程设计数据采集系统中断法南京航空航天大学微机原理课程设计数据采集系统中断法一课设目的进一步掌握微机原理知识了解微机在实时采集数据的应用学习掌握编程和程...

微机原理课程设计报告

课程设计报告纸数据采集系统三中断法一实验目的进一步掌握微机原理知识了解微机在实时采集过程中的应用学习掌握编程和程序调试方法二实验内容1用中断法将ADC0809通道0外接05V电压转换成数字量后在七段LED数码管...

微机原理课程设计报告(电子时钟)

微机原理课程设计报告1设计目的培养和锻炼在学习完本门课后综合应用所学理论知识解决实际工程设计和应用问题的能力通过课程设计要求熟悉和掌握微机系统的软件硬件设计的方法设计步骤得到微机开发应用方面的初步训练掌握825...

西电微机原理课程设计报告(11级)

基于8088的微机最小系统设计与应用一引言微机发展概述1微型计算机的发展历史第一台微型计算机19xx年罗伯茨用8080微处理器装配了一种专供业余爱好者试验用的计算机牛郎星Altair第一台真正的微型计算机19x...

江苏大学 《微机原理》课程设计报告

《微机原理》课程设计报告班级:姓名:学号:一、目的结合微机原理课程的学习,进一步巩固所学只是,掌握汇编语言的编程要领,熟悉汇编程序上机过程以及进行程序调试。二、设计任务,程序清单,流程图任务1(具体题目要求):…

微机原理跑马灯课设报告

微机原理课程设计说明书设计题目跑马灯学院计算机科学与工程学院专业班级学生学号同组者指导教师年学期目录一实验简介21基本要求22设计提示23进一步设计要求2二实验原理21实验原理描述228254芯片3218254...

微机原理课程设计报告(电子秒表)

电子与控制工程学院计算机原理与接口技术课程设计姓名学号专业建筑设施智能技术设计题目可任意启动停止的电子秒表指导老师目录1电子秒表课程设计要求12关键字13摘要14综合实验目的15引言15.1.1使用各个芯片的作…

微机原理课程设计报告

并行接口芯片8255A的应用键盘与数码管一设计内容8255A是通用的可编程并行接口芯片可以直接与8066CPU连接使用在微机系统中应用较为广泛它有三个并行输入输出端口可通过编程为端口设置多种工作方式以及规定端口...

微机原理课程设计报告(35篇)