华南农业大学汇编语言综合性实验-将自己的姓名用多种颜色动态显示

题目名称 综合性实验-将自己的姓名用多种颜色动态显示
题目关键字 综合性实验
指导老师&题目创建人-王琴
编写人-黄任华

华南农业大学综合性、设计性实验报告
实验项目名称: 汇编语言综合设计
实验项目性质: 综合性、设计性实验
所属课程名称: 汇编语言
授 课 人 数: 108人
指 导 教 师: 王琴

实验报告
一、实验目的
《汇编语言程序设计》是计算机专业重要的专业基础课,通过本综合性、设计性实验使学生进一步巩固课堂所学,全面熟悉、掌握8088宏汇编语言程序设计的基本方法和技巧,进一步提高编写程序、阅读分析程序及上机操作、调试程序的能力。
二、实验要求
基本要求是能调用相关的中断,能在动态的显示自己的名字,在Masm For windows软件下能运行。进一步要求是能调用相关的颜色显示table,进一步理解汇编程序中断的工作过程,体会汇编语言的简洁性、高效性,并将实验报告(严格按照模版编写)、源程序代码(包括注释)、可执行文件一起压缩后提交。

三、实验原理分析
本次综合性实验程序是输入输出程序的设计。中断的调用源属于软件的调用-显示器I/O型。显示器屏幕上的字符通常划分为行和列的一个二维系统,适配器就在行列组成的网格位置上显示字符。如下图:屏幕以25行80列的格式来显示字符。图片来源-----【1】(后面参考文献有描述)
在这里插入图片描述
字符的属性有显示特性。有单色显示,如字符是否闪烁、是否加强亮度,是否反相显示等。单色显示属性字节如下图表示(图片来源—【1】):
在这里插入图片描述
有彩色字符显示,属性字节能够选择背景颜色和前景颜色(字体颜色)。每个字符可以选择16种颜色的一种,而背景颜色的显示仅有8种,比字体颜色少8种。16种颜色的组合如下图:(图片来源——【1】)
在这里插入图片描述
显示字体的彩色显示及单色显示都要用到的中断类型是10H。下面是类型10H的显示操作功能表:(图片来源–【1】)
在这里插入图片描述
本程序的字体显示,我采用的是字符串的彩色显示。它要求在bx寄存器的低位bl设置前景和背景的属性值。属性值的典型组合如下表:(图片来源–【1】)
在这里插入图片描述
利用上诉的汇编原理,我完成了本次的实验。

四、流程图
在这里插入图片描述
其中,clear_s为清屏子程序;proc1为调用中断10H子程序,也是显示子程序;waitt子程序是延时子程序,主要功能是实现名字的动态显示;子程序wait1主要是产生一个时间为15.08微秒延时。
五、源程序(必要注释及程序运行的截图)
在Masm for Windows的运行截图如下:

在这里插入图片描述在这里插入图片描述
代码及注释如下:
;实验题目:
;三、将自己的姓名用多种颜色动态显示;

;------------------数据段--------------------------
DATAS SEGMENT
;此处输入数据段代码
str1 db ‘RenHua Huang!$’ ;我的英文名字字符串
count db $-str1-1 ;长度
N dw ?
color db 0DAH,41H,0A8H,14H,0FCH,01H
;颜色顺序:闪烁品红低浅绿字 ;红底蓝字,
;闪烁绿底灰字,蓝底红字,闪烁灰白低红字,黑底蓝字

DATAS ENDS
;--------------------------------------------------

;------------------堆栈段---------------------
STACKS SEGMENT stack
;此处输入堆栈段代码
db 100H dup(?)
STACKS ENDS
;---------------------------------------------

;-------------------代码段-------------------------
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
;-------------------主程序-------------------
main proc far
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码

call clear_s ;清屏
mov cx,63333 ;循环次数,无限大

lop1:
mov N,cx

mov cx,6  ;六种颜色
lea si,color ;颜色指针

lop2:
call proc1
call waitt ;延时
call waitt
inc si
loop lop2

mov cx,N  ;恢复cx
loop lop1
   
MOV AH,4CH  
INT 21H

main endp
;--------------------------------------------

;------------------此代码子程序产生名字的彩色字符串显示----------------
proc1 proc near

push ax
push bx
push cx
push dx

mov al,3 ;选择80*25的颜色文本
mov ah,0 ;功能号,改变模式
int 10H

;-----ES:bp=窜地址
mov bp,seg datas
mov es,bp
mov bp,offset str1
mov cl,count ;长度
mov bh,0 ;页号
mov dh,10 ;行号
mov dl,30 ;列号
mov bl,[si] ;bl=属性,即颜色选择
mov al,1 ;属性
mov ah,13H ;功能号
int 10H ;中断

pop dx
pop cx ;恢复现场
pop bx
pop ax

ret

proc1 endp
;-----------------------------------------------------------------------

;---------------------------------------------------------------
waitt proc near ;产生4秒延时

push cx; 报存现场

mov cx,33144 ;33144*15.08us=0.5秒
call wait1

mov cx,33144 ;33144*15.08us=0.5秒
call wait1

mov cx,33144 ;33144*15.08us=0.5秒
call wait1

mov cx,33144 ;33144*15.08us=0.5秒
call wait1

mov cx,33144 ;33144*15.08us=0.5秒
call wait1

mov cx,33144 ;33144*15.08us=0.5秒
call wait1

mov cx,33144 ;33144*15.08us=0.5秒
call wait1

mov cx,33144 ;33144*15.08us=0.5秒
call wait1

pop cx
ret
waitt endp
;------------------------------------------------------------------

;-----------------------产生15.08us的延时------------------------------------------------
wait1 proc near ;
push ax

lop:
in al,61H
and al,10H ;PB4端口
cmp al,ah
je lop ;等待变化
mov ah,al ;保存新的pb4状态
loop lop

pop ax
ret

wait1 endp
;-----------------------------------------------------------------------------------------

clear_s proc near ;清除屏幕
push ax
push bx
push cx
push dx

mov ah,6 ;滚动屏幕
mov al,0 ;全屏清除
mov bh,7 ;空白行
mov ch,0
mov cl,0 ;左上角位置
mov dh,24
mov dl,79 ;右下角位置
int 10H

mov dx,0
mov ah,2
mov bh,0 
int 10H  ;置光标位置

pop dx
pop cx
pop bx
pop ax

ret

clear_s endp

CODES ENDS
END main

六、体会
中断程序的实现才是汇编语言程序的精髓。但是要实现中断程序功能的多种多样性(像用java、C#、python等语言实现一样),是非常困难的一件事情,汇编语言它不像java、python一样能调用相关的库函数来实现一些复杂的功能,它要实现相关的功能就只能自己来编写子程序。通过本次综合实验,说实话,我才发现汇编语言的特点,原来汇编语言也能像其他的高级语言一样,是能实现复杂的精美的功能的!且汇编语言比其他语言执行效率更加高效!我还要继续不断的学习,无论是在本课程,还是在在其他的课程上。因为我发现,在课堂上学习到的都是一些非常皮毛和基础的东西,想要了解一些高深的知识,还得靠自己课后不断的学习。

参考文献
【1】 IBM PC汇编语言程序设计/沈美明,温冬婵编著.一2版,一北京:清华大学出版社,2001 (2020. 1重印)
ISBN 978-7-302 04664-6
1… I.①:沈.②温- .汇编语言程序设计一高等学校一教材iv. TP313
中国版本图书馆CIP数据核字(2007)第046511号

!!属于本人原创,引用请标明出处!–黄任华的博客–

猜你喜欢

转载自blog.csdn.net/Hrenhua/article/details/106992396