emu8086 汇编语言图形绘制Word文档下载推荐.docx
- 文档编号:16949238
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:43
- 大小:1.13MB
emu8086 汇编语言图形绘制Word文档下载推荐.docx
《emu8086 汇编语言图形绘制Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《emu8086 汇编语言图形绘制Word文档下载推荐.docx(43页珍藏版)》请在冰豆网上搜索。
而此算法之目的,就是找出在
与
之间,第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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- emu8086 汇编语言图形绘制 汇编语言 图形 绘制
![提示](https://static.bdocx.com/images/bang_tan.gif)