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

题目名称 综合性实验-将自己的姓名用多种颜色动态显示
题目关键字 综合性实验

华南农业大学综合性、设计性实验报告
实验项目名称: 汇编语言综合设计
实验项目性质: 综合性、设计性实验
所属课程名称: 汇编语言
授 课 人 数: 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号

!!属于本人原创,引用请标明出处!

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
要用汇编语言将自己的姓名多种颜色动态显示,需要涉及到以下几个步骤: 1. 设置文本模式 首先需要设置屏幕模式为文本模式,这可以通过BIOS中断0x10来实现。在文本模式下,每个字符都由ASCII码表示,并且可以使用颜色寄存器来设置字符的前景色和背景色。 2. 写入字符和颜色 然后需要使用BIOS中断0x10的功能来写入字符和颜色。在写入字符时,需要指定字符的ASCII码和字符的颜色颜色可以使用颜色寄存器来设置,每个颜色寄存器都包含一个字节,其中高4位表示背景色,低4位表示前景色。比如,0x0c表示红色的字符在黑色的背景上。 3. 动态改变颜色 最后需要动态改变字符的颜色,这可以通过不断修改颜色寄存器来实现。比如可以使用计数器来改变颜色的值,然后将颜色寄存器设置为计数器的值,这样就可以实现动态改变颜色。 下面是一个简单的汇编程序,可以实现将自己的姓名多种颜色动态显示: ``` section .data name db 'Your Name',0 color db 0x0c,0x0e,0x0a,0x0b,0x0d ;设置五种颜色 count db 0 section .text global _start _start: ;设置文本模式 mov ah, 0x00 mov al, 0x03 int 0x10 ;循环写入姓名 mov si, name mov cx, 9 mov bh, 0 loop1: ;设置颜色 mov bl, [color+count] mov ah, 0x09 mov bh, 0 mov bl, [color+count] int 0x10 ;写入字符 mov ah, 0x0e mov bh, 0 mov bl, [color+count] mov al, [si] cmp al, 0 je exit int 0x10 inc si ;动态改变颜色 inc count cmp count, 5 jne loop1 mov count, 0 jmp loop1 exit: ;退出程序 mov ah, 0x4c xor al, al int 0x21 ``` 这个程序将循环写入姓名,每次使用不同的颜色颜色会循环改变,直到所有字符都被写入。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐邂逅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值