汇编语言光栅图形变换

更新时间:2023-10-13 00:53:01 阅读量: 综合文库 文档下载

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

摘 要

汇编语言是一门涉及硬件的程序语言,也是软件工程专业的一门重要的专业基础课。本次课程设计就是利用汇编语言直接操作硬件,实现画图,并且根据键盘字母输入从屏幕上输出不同颜色,不同形状的图形。该报告主要包括了涉及任务及要求分析,Bresenham画线和直接写入元素两种方法的对比说明,阐述了涉及原理和程序,其中程序主要分为两大部分,主程序和子程序,主程序中包含了清屏指令组,子程序调用指令和退出指令,子程序分别实现画圆,画三角形,画矩形的功能。

本绘图程序人机交互性好,可以方便的调节矩形,三角,圆的大小和形状。在采用Bresenham算法提高了运行速度同时,图形的显示方法是采用写像素的方法定位精确轨迹平滑。同时还增加了动态显示效果,可以直观的看到像素点的移动。程序在编译之后只有2KB大小占用内存小运算快速。 该课程设计中很多内容主要来自图书馆查阅资料和网络资源,整理后进行修改运行,设计任务。

关键字:绘图;动态显示;任意大小

Abstract

Assembly language is a programming language to the hardware, an important professional basic course is the software engineering. The course design is the use of assembly language to directly operate the hardware, the realization of drawing, and according to the keyboard input and output of different color from the screen, different shapes. The report includes relates to the task and requirement analysis, comparison shows the Bresenham line drawing and direct write elements, two kinds of methods, expounds the principles and procedures of the process involved, mainly divided into two parts, the main program and subroutine, the main program contains theinstruction set, subroutine call instruction and exit instruction, subroutines are implemented draw a circle, draw a triangle, rectangle drawing function.

The drawing program good human-computer interaction, can easily adjust the rectangle, triangle, circle size and shape. The Bresenham algorithm is used to improve the speed at the same time, method for displaying graphic method of positioning pixel accurate trajectory smoothing. At the same time also increased the effects of dynamic display, you can see the visual movingpixels. Program after compilation is only 2KB size small memory fast. thecurriculum design in many content mainly from the library and cyber source,after finishing the modify operation, design task.

Keywords: drawing; dynamic display; any size

目 录

摘 要............................................................................................................................ 1 1概述............................................................................................................................. 4

1.1字符构成图形................................................................................................... 4 1.2在图片模式下直接导入相关图形的图片....................................................... 4 1.3在图片模式下采用计算求点写像素的方法绘图........................................... 4 1.4在图片模式下采用鼠标绘图........................................................................... 4 2编程思想..................................................................................................................... 5 3程序设计..................................................................................................................... 6

3.1主程序设计....................................................................................................... 6 3.2矩形子程序设计............................................................................................... 7 3.3三角形子程序设计........................................................................................... 9 3.4圆形子程序设计............................................................................................... 9 3.5公共使用子程序设计....................................................................................... 9 4硬件原理................................................................................................................... 10 5调试结果................................................................................................................... 11 结束语.......................................................................................................................... 13 参考文献...................................................................................................................... 14 致 谢.......................................................................................................................... 15 附录1........................................................................................................................... 16 附录2........................................................................................................................... 36

1概述

1.1字符构成图形

在图形由字符构成时,屏幕的显示模式为为文字型。编程简单但是图像质量和交互性很差。

1.2在图片模式下直接导入相关图形的图片

程序较易实现,显示的效果非常好。但是图片在取模之后很大,在读取像素写像素时较慢。交互性也不好。

1.3在图片模式下采用计算求点写像素的方法绘图

程序编程复杂,算法复杂。绘图效果较好,程序很灵活可以显示各种形状大小的三角形,矩形和圆。交互性很好而且还可以改变颜色,添加动态显示,实现图像移动等效果。

1.4在图片模式下采用鼠标绘图

程序的交互性很好,可以很方便的确定图形绘制的位置和大小。但是编程太复杂,查阅了有关资料。是使用dos中断来调用鼠标,之后对鼠标跟踪控制。

在综合比较之下,程序的性能是首要考虑的指标。方案三和方案四比起来较易编写一些。所以最终采用的是方案三。

由于本程序要实现矩形、三角形、圆的绘制,所以将这个分为三个模块,每个人负责自己的模块,主程序由三个人共同完成,各模块分配如下: 主程序:三人共同完成 矩 形: 王芳梅 三角形: 颉国庆 圆 形: 黄飞

2编程思想

在程序设计时采用先整体再分块,模块化编程的思想。首先整体设计出程序的框架,写好主程序,再分模块写好各个子函数。调试好一个功能后再去编写下一个模块。主函数的主体是一个分支选择程序,包含了三个绘图模块圆,三角,矩形的数据定义和分支入口程序段。而三个绘图子模块中又各自包含了若干子函数。同时为了使程序紧凑,还编写了一些各个子模块公共使用的子函数。

程序概要框架图如下

图2.1 程序概要框架图

3程序设计

3.1主程序设计

初主程序主体是一个分支选择程序,包含了提示菜单,输入部分和选择部分。采用MOV AH,9/ INT 21H中断在屏幕上输出提示信息。MOV AH,1/ INT 21H从键盘输入一个字符将它的存在AL中再与1,2,3,q相比较跳转到响应的子函数入口程序段中。同时还设计了检验输入的程序段再输入不为1,2,3 ,q,时将自动跳转提示重新输入。

等于 1 等于2 等于3 等于q 从键盘输入一个字符 初始化 开始 显示提示字符 矩形 图3.1 主程序流程图

三角形 圆 退出程序 结束

3.2矩形子程序设计

在矩形子程序中采用写像素点的方法,点动成线将四条线一条一条的画出来。首先提示输入信息输入矩形的长和宽,调用一个输入函数将输入数据以16进制的方式存入AX中,再转存到L_S ,W_S 中,然后将屏幕的模式设为图像模式640*480*16色,将长和宽一次存入CX中采用循环LOOP指令,保持X不变Y依次增加,或者Y不变X依次增加将四条直线一一画出,同时为了使显示效果更好一些对线条进行了加粗,宽度为两个像素,为了使程序结构清晰编写了WRITE_PIXEL宏指令,每调用一次就画出一个点,而且可以认为的设定点的位置颜色等。在函数中还加入了延时子程序,每画完一个点之后就调用一个延时子程序,这样就可以在屏幕上实现动态显示。

这部分的程序设计中也是采用模块化的思想,先画出一条直线。改变参数就可以画出另外的三条直线。同时在屏幕模式设定时也编写宏指令SETMODE。

调用的宏指令如下

WRITE_PIXEL MACRO PAGE1,ROW,COLUMN,COLOR

MOV AH,0CH MOV AL,COLOR MOV BH,PAGE1 MOV DX,ROW MOV CX,COLUMN INT 10H ENDM

SETMODE MACRO MODE1

MOV AH,0 MOV AL,MODE1 INT 10H ENDM

矩形子程序流程图如下

图3.2 矩形子程序流程图

3.3三角形子程序设计

在三角形绘制中程序也分为几个部分,首先是三个顶点的输入子程序。然后将三个顶点压栈,再调用Bresenham画线子程序。在Bresenham画线子程序中依次调用写像素子程序和延时子程序实现三条线段的动态显示。

Bresenham算法是计算机图形学中为了“显示器(屏幕或打印机)系由像素构成”的这个特性而设计出来的算法,使得在求直线各点的过程中全部以整数来运算,因而大幅度提升计算速度;Bresenham算法是计算机图形学领域使用最广泛的直线扫描转换方法。其原理是过各行、各列像素中心构造一组虚拟网格线,按直线从起点到终点顺序计算直线各垂直网格线的交点,然后确定该列像素中与此交点最近的像素。 该算法的优点在于可以采用增量计算,使得对于每一列,只要检查一个误差项 的符号,就可以确定该列所求的像素。

3.4圆形子程序设计

在圆绘制模块中同样是采用Bresenham画线算法。先由键盘输入圆半径,再设置成图形模式。在调用圆Bresenham子程序将相关点堆栈,然后再调用圆画点子程序在屏幕上下左右四个点上向两边同时开始画点。每画一个点就调用一下延时子程序实现绘图的动态显示。

3.5公共使用子程序设计

为了使程序结构较清晰,将三个子模块和主函数共同使用的子函数统一编写。它们是数据输入子函数READ可以讲键盘输入的数据转化为16进制存在AX中。在各个子函数的数据输入模块都是调用的这个子函数。还有写像素子函数PIXEL。它的作用是把经过Bresenham算法堆栈的数据用写像素的方法写在屏幕上。延时子函数DELAY它的作用是延时使图像动态显示。清屏CLEAR它的作用是调背景色清屏。便于在图形模式和文字模式之间进行转换。

在其中的延时子程序采用了双层循环的方法,因为各个子程序运行用时不同为了便于调试和取得更好的效果。不同的子模块对应不同的延时子程序。

4硬件原理

显示器有字符显示模式和图形显示两种工作方式,在图形方式下的屏幕由一个一个的像素做成。通过读写屏幕上的各个像素就可以显示出各种各样的图形。 在汇编语言中提供了多种图形显示模式。设置模式的方法是:AL=模式号,AH=00H,然后通过BIOS功能调用INT10H来实现。

表4.1 常见的图形显示模式

显示模式号

0DH OEH 0FH 10H 11H 12H 13H

分辨率 色彩数 320*200 16 640*200 16 640*350 2 640*350 16 640*480 2 640*480 16 320*200 256

适用显卡 EGA VGA EGA VGA EGA VGA EGA VGA MCGA VGA VGA MCGA VGA

VGA显卡上256KB显存,被划分为4个64KB的位平面。比如屏幕上像素的位置是(X,Y),则改像素在显存位平面中字节地址的计算公式为:

字节地址=A0000H+Y*(640/8)+X MOD 8(屏幕中有640列,每字节8位)

附录2

宏文件

WRITE_PIXEL MACRO PAGE1,ROW,COLUMN,COLOR MOV AH,0CH MOV AL,COLOR MOV BH,PAGE1 MOV DX,ROW MOV CX,COLUMN INT 10H ENDM

READ_PIXEL MACRO PAGE1,ROW,COLUMN MOV AH,0DH MOV BH,PAGE1 MOV DX,ROW MOV CX,COLUMN INT 10H ENDM

SETMODE MACRO MODE1 MOV AH,0 MOV AL,MODE1 INT 10H ENDM

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

Top