首页
社区
课程
招聘
[旧帖] [求助]关于dos窗口显示有颜色的字符串 0.00雪花
发表于: 2009-5-14 21:44 5390

[旧帖] [求助]关于dos窗口显示有颜色的字符串 0.00雪花

2009-5-14 21:44
5390
编程:在屏幕中间分别显示绿色,绿底红色,白底蓝色的字符串“welcome to masm!”

但是我的代码修修改改,调试了一天了,能显示,但是颜色和显示的字符出错,只能来请教下论坛的朋友,我去百度找不到答案;

assume cs:code,ds:data,ss:stack

data segment
db 'welcome to masm!'
db 02h,24h,71h
data ends

stack segment
dw 8 dup(0)
stack ends

code segment
start:      mov ax,0B800H
            mov es,ax
            mov ax,data
            mov ds,ax
            mov bx,720H
            mov ax,stack
            mov ss,ax
            mov sp,10H
            
            mov cx,3
row:        push cx
            mov si,0
            mov bp,0
            mov di,0
            
            mov cx,16
column:     mov al,ds:[si]
            mov ah,ds:[bp+16h]
            mov es:[bx+di],ax
          
            inc si
            inc di
            loop column
            add bp,2
            
            add bx,0A0H
            pop cx
            loop row
            mov ax,4c00h
            int 21h
code ends
end start
            
这是执行后的图片:


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 285
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
mov ah,ds:[bp+16h]  不知道你这个16h是哪来的应该<=7

inc di     =>  add di,2
2009-5-14 23:00
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
16H是为了循环是取到02H 24H和71H
2009-5-14 23:16
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
终于找到错误的错误的原因了,还是太大意了,谢谢论坛的‘阿贵’的指点
下面我贴上错误原因和阿贵的另外一种方法方便遇到跟我一样问题的朋友观看:

第一个:mov bp,0应该放大循环外面,不然读取的颜色都是从0开始,难怪没颜色
第二个:mov ah,ds:[bp+16h] 应该改成mov ah,ds:[bp+10h]

正确程序:
assume cs:code,ds:data,ss:stack

data segment
db 'welcome to masm!'
db 02h,24h,71h
data ends

stack segment
dw 8 dup(0)
stack ends

code segment
start:      mov ax,0B800H
            mov es,ax
            mov ax,data
            mov ds,ax
            mov bx,720H
            mov ax,stack
            mov ss,ax
            mov sp,10H
            mov bp,0
            
            mov cx,3
row:        push cx
            mov si,0
            mov di,0
            
            mov cx,16
column:     mov al,ds:[si]
            mov ah,ds:[bp+10h]
            mov es:[bx+di],ax
          
            inc si
            add di,2
            loop column
            add bp,2
            
            add bx,0A0H
            pop cx
            loop row
            mov ax,4c00h
            int 21h
code ends
end start
2009-5-15 00:06
0
雪    币: 141
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
db 'welcome to masm!'0
2009-5-17 12:27
0
游客
登录 | 注册 方可回帖
返回
//