emu8086 汇编语言图形绘制Word文档下载推荐.docx

上传人:b****4 文档编号:16949238 上传时间:2022-11-27 格式:DOCX 页数:43 大小:1.13MB
下载 相关 举报
emu8086 汇编语言图形绘制Word文档下载推荐.docx_第1页
第1页 / 共43页
emu8086 汇编语言图形绘制Word文档下载推荐.docx_第2页
第2页 / 共43页
emu8086 汇编语言图形绘制Word文档下载推荐.docx_第3页
第3页 / 共43页
emu8086 汇编语言图形绘制Word文档下载推荐.docx_第4页
第4页 / 共43页
emu8086 汇编语言图形绘制Word文档下载推荐.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

emu8086 汇编语言图形绘制Word文档下载推荐.docx

《emu8086 汇编语言图形绘制Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《emu8086 汇编语言图形绘制Word文档下载推荐.docx(43页珍藏版)》请在冰豆网上搜索。

emu8086 汇编语言图形绘制Word文档下载推荐.docx

而此算法之目的,就是找出在

之间,第x行相对应的第y列,从而得出一像素点,使得该像素点的位置最接近原本的线。

对于由(x0,y0)及(x1,y1)两点所组成之直线,公式如下:

因此,对于每一点的x,其y的值是

因为x及y皆为整数,但并非每一点x所对应的y皆为整数,故此没有必要去计算每一点x所对应之y值。

反之由于此线之斜率介乎于1至0之间,故此我们只需要找出当x到达那一个数值时,会使y上升1,若x尚未到此值,则y不变。

至于如何找出相关的x值,则需依靠斜率。

斜率之计算方法为

由于此值不变,故可于运算前预先计算,减少运算次数。

二、信息显示和调用库函数例程的学习

老师所提供的例程主要实现的功能是显示提示信息,读取输入的选择,判断后执行相应的程序。

includeemu8086.inc

org100h

lableShowTip:

callShowTip;

callscan_num;

movax,cx;

cmpax,1

jelableDrawLine;

cmpax,2

jelableDrawRect;

print0ah,0dh

print"

pleaseenteryourchoiceagain"

;

print0ah,0dh

jmplableShowTip;

lableDrawLine:

callDrawLine;

lableDrawRect:

callDrawRect;

ret

DrawLineproc

print0ah,0dh

youwanttodrawline!

pleaseentercord:

"

print"

x0="

callscan_num

mov[bx+si+1],cx

y0="

mov[bx+si+2],cx

x1="

mov[bx+si+3],cx

y1="

mov[bx+si+4],cx

subcx,[bx+si+2]

ret

DrawLineendp

DrawRectproc

print0ah,0dh

youwanttodrawrect!

pleaseentercord(x0,y0,x1,y1):

callget_string

DrawRectendp

ShowTipproc

moval,13h

movah,0

int10h

jmpShowTipBeg

tip0db"

pleasechoosetheshapetodraw:

0ah,0dh,'

$'

tip1db"

1drawline"

0ah,0dh,'

tip2db"

2drawrect"

tip3db"

enteryourchoice(1,2):

'

ShowTipBeg:

movdx,offsettip0

movah,9

int21h

movdx,offsettip1

movdx,offsettip2

movdx,offsettip3

ShowTipendp

DEFINE_SCAN_NUM

DEFINE_GET_STRING

运行结果如下:

选择1后结果为:

选择2后结果为:

选择错误的结果

第三部分汇编语言图形绘制过程:

一、提示信息的显示:

includeemu8086.inc

org100h

start:

moval,03h

movah,0

int10h

;

显示msg0

GOTOXY10,0

movdx,offsetmsg0

movah,9

int21h

显示msg1

GOTOXY7,1

movdx,offsetmsg1

显示msg2

GOTOXY9,3

movdx,offsetmsg2

显示msg3

GOTOXY9,4

movdx,offsetmsg3

movah,9

显示msg4

GOTOXY9,5

movdx,offsetmsg4

显示msg5

GOTOXY8,6

movdx,offsetmsg5

CALLSCAN_NUM

MOVAX,CX

运行后的显示结果为

二、直线的绘制

在画横线和数线时,可以直接用循环操作

在斜线时,应当将斜率求出,在球斜率的过程中要逐一判断y1y2和x1x2的大小关系,从而保证所化直线的准确性。

(一)水平直线

(二)垂直直线

(三)倾斜的直线

运行结果:

示例一竖线

示例二:

水平横线

示例三斜线

三、矩形的绘制

举行可以分为两条水平直线和两条垂直直线

即可调用画横线和画竖线的函数

程序如下:

画两条竖线

画两条横线

运行结果

先画出两条竖线

再画出完整矩形

四、三角型的绘制

在画三角形的过程中,可以画出直角,等腰,等多种三角形

三角形

五、整体程序的实现

显示msg1:

显示msg2:

显示msg3:

GOTOXY9,4

显示msg4:

GOTOXY9,5

int21h

显示msg5:

GOTOXY8,6

MOVAX,CX

跳转到画直线

MOVAX,1

cmpal,cl

jeStraiht

跳转到画矩形

MOVAX,2

jerectangle

跳转到画三角形

MOVAX,3

jetriangle

Straiht:

GOTOXY8,10

movdx,offsetmsg6;

输入起始点坐标

CALLSCAN_NUM

将起始点坐标放入栈内保存

movax,cx

pushax

GOTOXY50,10

movbx,cx

pushbx

GOTOXY8,11

movdx,offsetmsg7;

输入终点坐标

int21h

将终点坐标放入栈内

GOTOXY50,11

popdx

popcx;

调出栈供使用

cmpax,cx

jeshuxian;

若横坐标相等,则跳转到画竖线

cmpbx,dx

jehengxian;

若纵坐标相等,则跳转到画横线

jmpxiexian;

其他情况跳转到画斜线

xiexian:

画斜线代码

movx1,cx

movy1,dx

movx2,axmovy2,bx

moval,13h

calloblique

按1返回到start

GOTOXY10,1

movdx,offsetmsg10

movah,9

jestart

shuxian:

画竖线代码

movah,0

int10h

pshu:

moval,1100b

movah,0ch

incdx

cmpdx,bx

jnelooppshu

按1返回到start

hengxian:

画横线代码

pushbx

pushax

moval,13h

int10h

popbx

pheng:

moval,1100b

movah,0ch

inccx

cmpcx,bx

jnelooppheng

GOTOXY10,1

movdx,

offsetmsg10

rectangle:

输入左上角坐标

movdx,

offsetmsg8

将坐标放栈内保存

pushax

GOTOXY65,10

movbx,cx

输入矩形的长和宽

GOTOXY8,11

movdx,offsetmsg9

movbx,cx

GOTOXY65,11CALLSCAN_NUM

坐标出栈供调用

popdx

popcx

pushcx

addbx,dx

rshu:

画矩形的两条平行竖线

movah,0ch

incdx

cmpdx,bx

jnelooprshu

subdx,bx

popax

addcx,ax

pushbx

addbx,dx

rshu2:

jnelooprshu2

subcx,ax

popbx

subdx,bx

addax,cx

movbx,ax

rheng:

画矩形的两条平行横线

inccx

cmpcx,bx

jnelooprheng

popbx

adddx,bx

pushyx

movbx,ax

rheng2:

jnelooprheng2

Movdx,offsetmsg10

triangle:

输入三角形顶点A坐标

movdx,offsetmsg11

movpointax,cx

CALLscan_num

movpointay,cx

输入三角形顶点B坐标

movdx,offsetmsg12

CALLSCAN_NUM

movpointbx,cx

GOTOXY65,11

movpointby,cx

输入三角形顶点C坐标

GOTOXY8,12

movdx,offsetmsg13

movpointcx,cx

GOTOXY65,12

movpointcy,cx

movax,pointax

movx1,ax

movax,pointay

movy1,ax

movbx,pointbx

movx2,bx

movbx,pointby

movy2,bx

movax,cx

movax,dx

movbx,pointcx

movbx,pointcy

movbx,pointax

movbx,pointay

返回到start

movdx,offsetmsg10

oblique是由各输入值求斜率、近视画直线的函数

obliqueproc

movax,x2

movbx,x1

cmpax,bx;

比较两点的横坐标

jgex2po

jlx2ne

x2>

=x1时的代码

x2po:

movs1,1

subax,bx

movxd,ax

jmpy

x2<

x1时的代码

x2ne:

movs1,-1

subbx,ax

movxd,bx

jmpy

y:

movax,y2

movbx,y1

cmpax,bx;

比较两点的纵坐标

jgey2po

jly2ne

y2>

=y1时的代码

y2po:

movs2,1

movyd,ax

jmpsubyx

y2<

y1时的代码

y2ne:

movs2,-1

movyd,bx

jmpsubyx

xdyd比较

subyx:

movax,xd

movbx,yd

geinterchange;

yd>

=xd

jlnointerchange;

yd<

xd

=xd时的代码

(其中yd和xd分别代表纵、横坐标之差)

interchange:

movxd,bx

movinterflag,1

jmpcal

nointerchange:

movinterflag,0

jmpcal

cal:

movax,yd

movbx,xd

subax,bx;

2*yd-xd

movp,ax

movdx,y1

movcx,x1

paint:

moval,1100b;

设置颜色

movah,0ch;

changecolorforasinglepixel

cmpp,0

jgeppos;

2*yd-xd>

=0

jlpneg;

2*yd-xd<

ppos:

cmpinterflag,0

jeinterflagpos;

xd

jneinterflagneg;

interflagpos:

movax,s2

addbx,ax

movy1,bx

movax,p

addbx,bx

movp,ax

jmpplot

interflagneg:

movax,s1

movx1,bx

movax,p

jmpplot

pneg:

jeinterflagpos2;

<

yd

jneinterflagneg2;

>

interflagneg2:

addax,bx

interflagpos2:

plot:

cmpcx,x2

jnelooppaint

RET

obliqueENDP

msg0DB

***********Welcome!

*************$"

msg1DB

pleasemakesureyourtypewritingisEnglish$"

确定用英文输入法输入数字

msg2DB

1.Paintthestraight$"

画出直线

msg3DB

2.Painttherectangle$"

画出矩形

msg4DB

3.Paintthetriangle$"

画出三角形

msg5DB

Enteryourchoise:

$"

选择(按数字+回车)

msg6DB

EntertheStartingpointcoordinate:

直线起点坐标

msg7DB

EntertheEndingpointcoordinate:

$"

直线终点坐标

msg8DB

Entertheupper-leftcornercoordinate:

左上角坐标

msg9DB

Enterthewidthandlength:

宽和长

msg10DB

Enter1toexit:

msg11DB

Enterthe

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1