注册 登录
编程论坛 汇编论坛

文本模式下如何设置 背景和字体颜色???

zdoublehang 发布于 2011-06-14 17:39, 2444 次点击
就是这样一个问题,想把黑白配 换掉~~~~
3 回复
#2
ansic2011-06-14 18:14
省事的话参考BIOS 10H里的各个中断,复杂点的话,直接写屏也可。

程序代码:

assume  cs:code,ds:data
data    segment
msg     db      'Hello,world!$'
data    ends
code    segment
start:
        mov ax,data
        mov ds,ax
;窗口
        mov ax,0600h ;滚动窗口
        mov bh,24h   ;视屏属性是绿底红字
        mov cx,050ah ;窗口左上角行列值
        mov dx,0a30h ;窗口右下角行列值
        int 10h      ;调用bios
;置光标位置
        mov ah,2     ;设置光标位置
        mov dx,0714h ;行列坐标
        mov bh,0     ;页号
        int 10h      ;调用bios
;显示文本
        mov dx,offset msg
        mov ah,9
        int 21h

        mov ah,4ch
        int 21h
code    ends
end     start
只有本站会员才能查看附件,请 登录


[ 本帖最后由 ansic 于 2011-6-14 18:32 编辑 ]
#3
Alar302011-06-16 13:06
写屏吧
俺觉得。。。
#4
obstratiker2011-06-17 00:09
这是在控制台下实现键盘输出,有一点好处就是,普通的控制台打印出的字符有限,这个可打印任意多的字符,当然也存在一些缺陷
……重点是可以在程序中设置 cx 的值,让输出的字符成不同的颜色
以前我改过,比如按下 f1 键,输出的字符就会全部变色, 按下 f2 ,字符又变回原来的颜色
楼主可以把功能加上去,用写彩色显存的方法,下面的代码是原始的

assume cs:code


code segment
    top db 0

start:
    mov bx,0b800h
    mov es,bx
    mov ds,bx
    mov bx,24*160

 s:                    ; s 用于判断输入的是否是数字键,字母键或删除返回键和回车键,回车键结束输入
    mov ah,0            
    int 16h
    cmp al,08h
    je back
    cmp al,0dh
    je enter
    cmp al,20h
    jnb char
 char:    cmp al,'z'
    jna charpush

 charpush:   

    mov cx,2
    mov es:[bx],al
    mov es:[bx+1],cl
    inc top
    add bx,2
    cmp bx,25*160
    je copy
    jmp short s

 back:    cmp top,0
    je s
    dec top
    sub bx,2
    mov byte ptr es:[bx],' '
    jmp short s

 copy:    mov di,0
    mov si,160
    mov cx,24
 copys:    push cx
    mov cx,160
    rep movsb
    pop cx
    loop copys
    mov si,24*160
     mov cx,80
 empty:    mov byte ptr es:[si],' '
    add si,2
    loop empty

    mov bx,24*160
    jmp short s

 enter:    mov ax,4c00h
    int 21h
   

code ends

end start


不过我想,要是希望改变黑白配,不如……打开控制台,右键点击属性,这样来得一劳永逸
1