如何用汇编语言实现有颜色字符串的显示

如果我要汇编语言,在屏幕上显示一个固定字符串,分别为蓝色和绿色,应该如何实现?我是新手,请各位指教,分数不多,各位帮帮忙~!... 如果我要汇编语言,在屏幕上显示一个固定字符串,分别为蓝色和绿色,应该如何实现?

我是新手,请各位指教,分数不多,各位帮帮忙~!
展开
 我来答
phajp97
推荐于2018-04-12 · TA获得超过3590个赞
知道小有建树答主
回答量:1962
采纳率:83%
帮助的人:518万
展开全部
直接写显存把,把ASCII写到显存里之后显卡就会帮你把字符显示出来了
比如在80×25,16色文本显示模式(默认的显示模式)下,往B800:0000写30H的话,在第一行第一列就会显示一个"0"
不过这种方法需要比较复杂的软件支持
你可以通过10号中断的03H子功能读取光标位置,然后计算显存地址,然后把AL中的ASCII MOV到显存里
80×25,16色文本显示模式的显存格式是:
ASCII(字节型数据)|前景及背景颜色(字节型数据,白字黑背景是07H)
两个字节为一个单位,表示一个字符,然后就是这样循环,来映射屏幕
==========================================================
对了,你是不是没有设置好字符的属性啊?
(9)、功能09H
功能描述:在当前光标处按指定属性显示字符
入口参数:AH=09H
AL=字符
BH=显示页码
BL=属性(文本模式)或颜色(图形模式)
CX=重复输出字符的次数
出口参数:无
要在BL里填07H才能显示白字黑背景的字呢
================================================
通过写显存的方式显示字符的例子,这个是在DOS下运行的,不过改一下的话估计就能在裸机上运行了,那个显示字符的子过程没保存用到的寄存器,注意一下

assume cs:code,ds:data
data segment
db 'Love WenDaoSheYu Forever!','#'
data ends
code segment
start:mov ax,000EH
int 10H
mov ax,0002H
int 10H
;-------全屏一下,不用按Alt+Enter了
mov ax,data
mov ds,ax
mov al,11001010B
xor bx,bx
mov dx,0604H
;-------"实参表"
call print

exit:mov ah,0
int 16H
mov ax,4C00H
int 21H

print:;(AL=字符属性 DS=待显示字符段地址)
;(BX=待显示字符偏移地址 DH=行 DL=列)
;80×25字符显示模式
;功能简介:显示以"#"结尾的一串字符
push ax
mov cx,0
mov cl,dh
dec cl
mov ax,cx
mov cl,160
mul cl
mov bp,ax
pop ax
;-------处理行信息
mov cl,dl
mov si,cx
dec si
shl si,1
;-------处理列信息
mov cx,0B800H
mov es,cx
;-------初始化显存段寄存器
mov ah,[bx]
mov cl,'#'
pris:mov es:[bp+si],ah
inc si
mov es:[bp+si],al
inc si
inc bx
mov ah,[bx]
cmp ah,cl
jnz pris
;-------显示字符串
ret

code ends
end start
NJGQZF
推荐于2017-09-17 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3165
采纳率:0%
帮助的人:1240万
展开全部
用汇编语言实现有颜色字符串的显示,,可以调用BIOS中断INT 10h设置颜色,输出显示可以调用DOS功能INT 21H。程序示例如下:
data segment
Total db 'Made in China$'
data ends

code segment
assume cs:code,ds:data
main proc far
start:
mov ax,data
mov ds,ax
mov ah,0bh
mov bx,000ah;设定颜色为绿色
int 10h

mov dx,offset Total
mov ah,09h;显示字符串
int 21h
mov ah,4ch
int 21h
ret
main endp
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
三月消毒水
推荐于2016-08-07
知道答主
回答量:21
采纳率:0%
帮助的人:28.4万
展开全部
MOV AH,02H ;设置光标位置 的中断
MOV BH,M ;BH表示页
MOV DH,X ; X表示行
MOV DL,Y ;Y表示列
INT 10H

MOV AH,09H;在当前光标位置显示字符,不改变光标位置
MOV AL,‘***’ ;‘***’表示你要显示的固定字符串
MOV BH,0H
MOV BL,Z ;Z表示颜色。
MOV CX,1 ;CX表示重复次数
INT 10H

蓝色,Z=01H或者19H
绿色,Z=02 或者2AH 这两个之间是有没有背景色的区别。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2022-06-18 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部

可以参考下图所示的显示:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式