汇编实验9Word文档格式.docx
- 文档编号:19883369
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:18
- 大小:52.73KB
汇编实验9Word文档格式.docx
《汇编实验9Word文档格式.docx》由会员分享,可在线阅读,更多相关《汇编实验9Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
movrow,1
movcol,24
movbx,26
l0:
callreset
moval,7ch
movbh,0
movcx,1
movah,0ah
int10h
incrow
decbx
jnzl0
movrow,2
movcol,0
movdi,0
leadx,array3
movrow,3
movcol,0
l1:
movax,di
addal,30h
int10h
inccol
moval,array1[di]
incdi
cmpdi,9
jal2
addcol,6
cmpcol,22
jbl1
addrow,2
JMPl1
l2:
addrow,4
leadx,array4
movdi,1
l3:
movbx,di
addbl,60h
moval,bl
subbl,60h
moval,0dbh
jal4
addcol,6
cmpcol,22
jbl3
JMPl3
l4:
movcol,26
draw:
movah,0
int16h
cmpah,48h
jeup
cmpah,50h
jedown
cmpah,4dh
jeright
cmpah,4bh
jeleft
cmpah,53h
jel5
cmpah,01h
jnznum
ret
l5:
callclear
jmpdraw
num:
cmpal,30h
jnbl6
l6:
cmpal,39h
jal7
andax,00ffh
subax,30h
movdi,ax
moval,array1[di]
movbl,color
movah,09h
l7:
cmpal,61h
jbl8
cmpal,69h
jal8
subal,60h
movcolor,al
l8:
up:
decrow
jzup1
jmpl9
up1:
jmpl9
down:
cmprow,25
jadown1
down1:
left:
deccol
cmpcol,26
jbleft1
left1:
right:
cmpcol,78
jaright1
right1:
l9:
jmpdraw
mainendp
resetprocnear
movah,2
movbh,0
movdh,row
movdl,col
resetendp
clearprocnear
pushbx
pushcx
pushdx
movah,6
moval,0
movch,1
movcl,26
movdh,25
movdl,79
movbh,7
popdx
popcx
popbx
popax
clearendp
prognamends
endstart
运行结果:
屏幕窗口程序:
;
****************************************************************
datassegment
curydb15;
光标初始位置
curxdb50
lxdb10;
记录左窗口当前光标位置,初始化为左窗口初始位置
lydb15
rxdb50;
记录右窗口当前光标位置,初始化为右窗口初始位置
rydb15
dwxdb15;
记录下窗口当前光标位置,初始化为下窗口初始位置
dwydb22
ulrowdb0
ulcoldb0
lrrowdb0
lrcoldb0
windownumdb1
datasends
-----------------------------------------------------------------宏指令clear清屏
clearmacroa,b,c,d
moval,0;
初始化窗口
movbh,7;
卷入行属性
movch,a;
左上角行号
movcl,b;
左上角列号
movdh,c;
右下角行号
movdl,d;
右下角列号
int10h;
BIOS调用,屏幕初始化
endm
-------------------------------------------------------------宏指令scroll向上卷动一行
scrollmacrocont,ulrow,ulcol,lrrow,lrcol
moval,cont;
上卷行数
movbh,70h;
卷入行属性
movch,ulrow;
movcl,ulcol;
movdh,lrrow;
movdl,lrcol;
BIOS调用,上卷
--------------------------------------------------------------宏指令postc光标定位
postcmacroy,x
movbh,0;
页号
movdh,y;
行
movdl,x;
列
BIOS调用,置光标位置
---------------------------------------------------------------在当前窗口和下窗口显示
displaymacro
movah,0ah;
在当前的窗口打印字符
postcdwy,dwx
在下窗口输出
----------------------------------------------------------------接收字符并判断
getcharmacro
input:
;
输入键盘上的字符
int16h;
BIOS调用,从键盘读字符
cmpah,4bh;
判断输入字符是否为左向键
jnzno_left
postcly,lx
movwindownum,2
jmpinput
no_left:
jnzno_right;
判断输入字符是否为右向键
postcry,rx
movwindownum,1
jmpinput
no_right:
cmpah,01;
判断输入字符是否为ESC
jzexit
display;
嵌套调用
incdwx
cmpdwx,65;
判断下窗口是否上卷
jleisright
scroll1,19,15,22,65
movdwx,15
isright:
cmpwindownum,1;
判断是否在右窗口
jnzdispleft
dispright:
判断右窗口是否上卷
incrx
cmprx,70
jlerightexit
scroll1,6,50,15,70
movrx,50
rightexit:
右窗口输出
displeft:
判断左窗口是否上卷
inclx
cmplx,30
jleleftexit
scroll1,6,10,15,30
movlx,10
leftexit:
左窗口输出
exit:
---------------------------------------------------------------
codessegment
codes,ds:
datas
mainprocfar
subax,ax
pushax
movax,datas
clear0,0,24,79
scroll10,5,10,15,30
scroll10,5,50,15,70
scroll4,18,15,22,65
postccury,curx
getchar
ret
mainendp
-----------------------------------------------------------------
codesends
画栅栏程序:
esc_keyequ1bh
stack_segsegmentstack
db32dup(?
)
stack_segends
DATA_SEGSEGMENT
msg0db'
Afterdrawingthelines,pressESCtoexitorotherkeystocontinue'
0ah,0dh,'
msg1db'
Enterstartingpointx:
msg2db'
Enterstartingpointy:
msg3db'
Enterendingpointx:
msg4db'
Enterendingpointy:
msg5db'
Entercolumndistance:
msg6db'
Enterrowdistance:
buffdb4,?
4dup(?
start_xdw?
start_ydw?
end_xdw?
end_ydw?
coldw?
rowdw?
DATA_SEGENDS
displaymacromsg
movah,09h
movdx,offsetmsg
int21h
endm
get_argmacroarg
movdx,offsetbuff
dec2bin
movarg,ax
draw_linemacrosx,sy,ex,ey,col,row
movdx,start_x
_dl0:
movcx,start_y
moval,3
movah,0ch
_dl1:
inccx
cmpcx,end_y
jbe_dl1
adddx,row
cmpdx,end_x
jbe_dl0
_dl2:
_dl3:
incdx
jbe_dl3
addcx,col
jbe_dl2
set_mode_color_textmacro
set_mode_color_graphicsmacro
moval,4
get_keymacro
movah,0h
int16h
crlfmacro
movah,02h
movdl,0ah
movdl,0dh
dec2binmacro
local_d2b
movcl,buff[1]
movch,0
movsi,offsetbuff+2
movdh,10d
_d2b:
movbl,[si]
andbl,0fh
muldh
addax,bx
incsi
loop_d2b
CODE_SEGSEGMENT
ASSUMECS:
CODE_SEG,DS:
DATA_SEG
xorax,ax
movax,data_seg
again:
set_mode_color_text
displaymsg0
displaymsg1
get_argstart_x
crlf
displaymsg2
get_argstart_y
displaymsg3
get_argend_x
displaymsg4
get_argend_y
displaymsg5
get_argcol
displaymsg6
get_argrow
set_mode_color_graphics
draw_linestart_x,start_y,end_x,end_y,col,row
get_key
cmpal,esc_key
jeexit
jmpagain
mainendp
CODE_SEGENDS
ENDmain
问题及收获
本次实验在设计中也遇到了一些问题,像在进行界面设计的时候,设计区域边界和区域内布局比较难确定,设计不好就影响界面的美观;
编码过程中光标位置的重置容易忘记,是在调试过程中才发现出来的;
编码过长,内存占用比较多。
掌握了屏幕窗口程序的基本设计方法,领略了宏的设计和使用方法,实验的整体思路比较简单,但如若想编出复杂的屏幕程序,需要对BIOS调用有一个大致的了解,只有这样才能灵活的去运用,这也就启迪我多去阅读和积累相关的知识,只有知识积累到一定程度才能编出好的程序。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 实验