中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-22 02:01
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创][批处理单行显示多种颜色字符] 查看 8,677 回复 41
16 发表于 2006-12-19 06:41 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线

  我的问题和 ccwan 兄的一样。
17 发表于 2006-12-19 06:47 ·  中国 北京 朝阳区 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
19年会员
UID 63324
性别 男
状态 离线
原理,下面的汇编代码使用prompt原理通过管道给Debug运行~:)
下面的代码中加入了注解~:)



0B03:0100 MOV,AH,09 ; 09H号功能调用
0B03:0102 MOV,AL,2A ; 把字符2AH(就是*号的16进制ASCII码)装入AL寄存器
0B03:0104 MOV,BH,00 ; 彩色显示卡支持0~7页,把0页装入BH寄存器
0B03:0106 MOV,BL,0E ; 把颜色值送入BL寄存器。(黄颜色:1110二进制,转16进制为:0EH
0B03:0108 MOV,CX,0020 ; 这个符号的显示次数20H送入CX.
0B03:010B INT,10 ; 显示器中断调用10H
0B03:010D MOV,BL,0A ; 换一种颜色 (1010绿色,转16进制是AH)
0B03:010F MOV,CX,000A ; 和上面一样,显示次数
0B03:0112 INT,10
0B03:0114 INT,20 ; 结束返回


初学汇编,原理没什么神秘的,用批处理“包装”了一下~:)
等以后再做更多更好玩的东东~:)

[ Last edited by redtek on 2006-12-18 at 05:57 PM ]
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
18 发表于 2006-12-19 06:49 ·  中国 北京 联通
银牌会员
★★★
努力做坏人
积分 1,185
发帖 438
注册 2006-08-28 12:00
19年会员
UID 61449
来自 北京
状态 离线
真诱人啊,我也想学汇编...............
我今后在论坛的目标就是做个超级坏人!!!
19 发表于 2006-12-19 07:30 ·  中国 四川 成都 教育网
铂金会员
★★★★
积分 7,493
发帖 2,672
注册 2005-09-02 00:00
20年会员
UID 42173
性别 男
状态 离线
顶呀,加分~~~牛xxxxx贴

C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
20 发表于 2006-12-19 07:31 ·  中国 四川 成都 教育网
铂金会员
★★★★
积分 7,493
发帖 2,672
注册 2005-09-02 00:00
20年会员
UID 42173
性别 男
状态 离线
我最多就只能+23了,明天继续给你加~~

C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
21 发表于 2006-12-19 07:47
中级用户
★★
DOS之日
积分 337
发帖 161
注册 2006-11-04 05:27
19年会员
UID 69523
性别 男
状态 离线
我运行的结果如下:



删除"echo exit|"代码后可以看到如下结果:



要再输入exit来退出.如下:



不知是什么原因,好像那一串星号一闪而过的感觉.
请高手指教

[ Last edited by hxuan999 on 2006-12-18 at 07:54 PM ]
for /f %%h in (`echo hxuan`) do for /f %%x in (`echo hxuan`) do if %%h==%%x nul
22 发表于 2006-12-19 10:10 ·  中国 浙江 杭州 电信
中级用户
★★
积分 305
发帖 85
注册 2005-05-23 00:00
21年会员
UID 39004
性别 男
状态 离线
呵呵,我可以了啊。不错。效果挺好的。
23 发表于 2006-12-19 12:00 ·  中国 北京 朝阳区 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
19年会员
UID 63324
性别 男
状态 离线
Originally posted by electronixtar at 2006-12-18 18:31:
我最多就只能+23了,明天继续给你加~~


@#$@#%#$@%狂晕!
被electronixtar兄这么高的加分和大家的加分感动死了!!!
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
24 发表于 2006-12-19 12:05 ·  中国 北京 朝阳区 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
19年会员
UID 63324
性别 男
状态 离线
看hxuan999兄的截图是日文版CMD~:)
看到那个 echo exit| …… 好象 exit 没有 “走” 管道,
如果猜的没错的话日文CMD环境中所用的管道符号不是 "|" ,而是另一个。

(等等……或是 "|" 这个管道符号的ASCII码在日文里是另一个编码--反正就是编码不一样导制了不识别,兄试一下看看)

(或是,兄在日文界面内执行 CHCP 437 切到英文状态,看看是不是可以运行这个代码了?)
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
25 发表于 2006-12-19 12:18 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  真是奇怪了,在我的电脑上始终没有彩色效果。另外,右侧的下拉条有时候还是会出现。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
26 发表于 2006-12-19 12:25 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
我的电脑上也没有效果,只显示暂停-_-|||
27 发表于 2006-12-20 01:22 ·  中国 山西 运城 联通
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
程序使用了debug的汇编脚本,应该算不上“纯批处理”

当然,过多纠缠于概念是没有什么意义的,这里着重讨论技术

使用 %comspec% 来传递脚本虽有创新意义,但是缺乏实用意义

从可读性上来讲,可以将汇编脚本分行下载批处理前段,这样的形式可以更好的注释

从简洁性上来讲,可以将汇编代码的16进制值保存在变量中,然后使用for+echo传递

另外——

汇编脚本虽然很通用且有效,但因为过于底层,所以需要穿越的障碍较多

比如在我的主机上测试时,它被KAV6拦截了,允许后方可正常显示效果
28 发表于 2006-12-20 01:26 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
我这也没有什么效果
29 发表于 2006-12-20 01:31 ·  中国 北京 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
19年会员
UID 63324
性别 男
状态 离线
多谢qzwqzw兄指点~:)))
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
30 发表于 2006-12-20 01:47 ·  中国 北京 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
19年会员
UID 63324
性别 男
状态 离线
vkill兄行进入 CMD ,再输入这个批处理代码的文件名运行就可以了:)
如果直接鼠标双击在桌面上的这个批处理,则一闪而过,不会有效果~:)

%comspec% 在 Windows环境内是调用 CMD.EXE
       为了在纯 MS-DOS 环境内也兼容,在纯DOS内, %comspec% 就自动调用 Command.com 。
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
论坛跳转: