INT 10H ;置光标位置为(0,0) POP DX
POP CX ;取出寄存器的原内容 POP BX POP AX RET
CLEAR_SCREEN ENDP
PROGNAM ENDS
END START ;程序结束 3.典型程序模块和典型编程技巧分析:
在这个程序里,显示字符主要涉及的就是卷行操作,INT 10h,AH=6时有AL为上卷行数,BH为卷入行属性,CH/CL表示左上角行/列号,DH/DL=右上角行/列。此处用ST1,ST2,ST3分别做3个窗口显示字符数的计数器,以在正确的时候进行卷行操作。
在这个程序中控制光标的位置和窗口顶点位置的部分也是图形控制和在适当位置显示字符等操作中很有用的编程技巧。
4.程序框图:
第4题:
1. 设计思想和实施方案:
在这个程序中要实现按键控制一个窗口的颜色变化,同时还要使窗口的背景自下到上颜色由浅到深变化,设置显示方式为320x200 256色图形,也就是说满屏是320列200行,在输出背景图时,就用到这组数据,每13行颜色值加1,就可以实现由浅到深的变化。 在实现象素显示的时候,用了write子程序,知道了对角线的坐标(x1,y1),(x2,y2),就可以把这个方形窗口区域逐个象素的上色。
另外,在实现窗口颜色变化的时候,通过键盘输入一个字符,检测如果字符为回车则跳出,结束程序,如果是其他任意字符,则颜色值加1,也就是说除去回车键以外,其他任意键按一次,窗口的颜色就变化1次。 2.程序清单和程序注释: data segment
buff dw 20 dup(?) x1 dw ?
y1 dw ? ;定义存储单元 x2 dw ? y2 dw ? data ends
;---------------------------- code segment
;---------------------------- main proc far
assume cs:code,ds:data
start: push ds
sub ax,ax ;ax置0 push ax mov ax,data mov ds,ax
;---------------------------- mov ah,0 mov al,13h
int 10h call bj
mov x1,0 mov y1,0 mov x2,70 mov y2,70 mov al,01h
call write loop1:
push ax mov ah,0
int 16h cmp al,0dh
je exit pop ax inc al call write jmp loop1 mov ah,0 exit:
mov aX,0003
int 10h ret
main endp
;--------------------------- bj proc near mov dx,0
mov al,0 push bx mov bx,0 mov al, 1fh
case1:
;设置显示方式为320x200 256色图形(VGA) ;设置变色窗口的顶点坐标 ;输出变色窗口的颜色 ;存储原来的ax ;从键盘输入任意字符 ;如果输入的是回车则跳出 ;调出原来的ax ;颜色值加1 ;读光标位置 ;把dx,al置0
;存储bx原来的值
cmp bx,13 ;每13行改变一次颜色 jl case2
dec al ;颜色值减1 mov bx,0
case2:
mov cx,0
rotate:
mov ah,0ch ;显示渐变背景的部分 int 10h inc cx
cmp cx,320 ;0到320列写像素 jl rotate add dx,1 inc bx
cmp dx,200 ;0到200行写像素 jl case1
pop bx ;读取bx原来的值 ret
bj endp
;----------------------------
write proc near ;在方形区域显示像素的子程序 mov dx,y1 line:
mov cx,x1 point:
mov ah,0ch
int 10h ;在(x1,y1)点上写像素 inc cx ;向左移动一列
cmp cx,x2 ;cx小于x2的时候继续写像素 jl point
inc dx ;向下移动一行
cmp dx,y2 ;dx小于y2的时候继续写像素 jl line ret
write endp
;--------------------------- code ends
end start ;结束程序
3.典型程序模块和典型编程技巧分析:
在这个程序里,在实现背景颜色渐变的时候,需要设置每多少行使颜色变化一次,这里本人的程序中用的值13是多次实验得出的最好显示效果的,如果更多或更少行,则可能会显示出彩色的条纹,不符合题目的要求。
另外,利用(x1,y1)和(x2,y2)来限定一个窗口,以对其进行上色等操作,也是图形编程中经常用到的一种手法。 4.程序框图:
五.课程设计中遇到的问题及解决方法:
在第二题中,设置中断类型和驻留区大小的install部分比较难于实现,其
实本人是第一次接触驻留这个概念,在以往的编程中,基本所有程序都是即时运行,即时结束的,并没有驻留到内存中,以时刻调用的例子。因而,一开始很不知该如何下手,后来在网上查阅了一些信息,了解了驻留的实现其实就是一个中断控制的过程,实际上install这部分程序也是原版引用的一份资料中的内容。可以说这部分是实现驻留必不可少的。
在第四题中,要求背景的颜色是渐变的,而一开始设置多少行颜色变化一次就成了一个问题,本人实验了许多组数值,最后发现只有当13行变化一次的时候背景显示的效果最好,完全是灰度色彩变化。如果大一些或这小一些,都会使屏幕上出现彩色的条纹,也就不再是严格定义上的色彩由浅到深变化了。
还有,在第三题和第四题中,其实都涉及到了在窗口显示字符或像素点的问题,起初这对于我来说也是很陌生的,对于如何开设窗口,如何控制卷行,如何逐行逐列的显示像素点又控制在所要求的窗口中,这些问题起初都很让我为难,后来对这部分进行了相对进一步的学习和研究,也就有了一点浅显的认识,又经过多次实验调试,终于实现了这些窗口中的操作。其实,这种课程设计的过程也就是一种学习的过程,如果真的认真的去完成每一步程序,每一条指令,一定会颇为受益的。
六.收获与体会:
这次汇编语言的课程设计虽然说内容并不是很多,只是从四道题目中任选
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说医药卫生汇编语言程序设计报告(3)在线全文阅读。
相关推荐: