鱼C论坛

 找回密码
 立即注册
查看: 777|回复: 8

[已解决]改变屏幕的字体颜色

[复制链接]
发表于 2023-12-3 13:30:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题:
将屏幕中的第5行到24行设置成白底黑字格式(70H)。
最佳答案
2023-12-3 14:01:57
code segment
start:
    ; getchar
    mov     ah, 1
    int     21h

    mov     bx, 4 * 160 + 1
    mov     dx, 24 * 160 + 1
    mov     ax, 0b800h
    mov     ds, ax
n:  mov     al, 70h
    mov     [bx], al
    add     bx, 2
    cmp     bx, dx
    jne     n
    ; getchar
    mov     ah, 1
    int     21h
    ; exit
    mov     ax, 4c00h
    int     21h
    ret
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-3 13:31:04 | 显示全部楼层
要改变屏幕的字体颜色,可以使用Windows的控制台API函数。以下是一个示例代码,可以将屏幕中的第5行到24行设置为白底黑字格式。
import ctypesdef set_text_color(color):    STD_OUTPUT_HANDLE = -11    handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)    ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)def set_screen_colors(start_row, end_row, color):    for row in range(start_row, end_row + 1):        # 定位到指定行        ctypes.windll.kernel32.SetConsoleCursorPosition(ctypes.windll.kernel32.GetStdHandle(-12), ctypes.wintypes.COORD(0, row))                # 设置文本颜色和背景颜色        set_text_color(color)        # 输出空格填充整行        ctypes.windll.kernel32.FillConsoleOutputCharacterW(ctypes.windll.kernel32.GetStdHandle(-11), ' ', ctypes.windll.kernel32.GetLargestConsoleWindowSize(), ctypes.wintypes.COORD(0, row), ctypes.byref(ctypes.wintypes.DWORD()))        ctypes.windll.kernel32.FillConsoleOutputAttribute(ctypes.windll.kernel32.GetStdHandle(-11), color, ctypes.windll.kernel32.GetLargestConsoleWindowSize(), ctypes.wintypes.COORD(0, row), ctypes.byref(ctypes.wintypes.DWORD()))# 示例调用set_screen_colors(5, 24, 0x70)
这段代码使用了ctypes来调用Windows的控制台API函数,通过设置文本颜色和背景颜色来改变屏幕的字体颜色。在示例中,使用了黑底白字的格式(0x70),你可以根据需要调整颜色参数。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-3 14:01:57 | 显示全部楼层    本楼为最佳答案   
code segment
start:
    ; getchar
    mov     ah, 1
    int     21h

    mov     bx, 4 * 160 + 1
    mov     dx, 24 * 160 + 1
    mov     ax, 0b800h
    mov     ds, ax
n:  mov     al, 70h
    mov     [bx], al
    add     bx, 2
    cmp     bx, dx
    jne     n
    ; getchar
    mov     ah, 1
    int     21h
    ; exit
    mov     ax, 4c00h
    int     21h
    ret
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-3 14:05:04 | 显示全部楼层
@不二如是
FishC_GPT好像无法读取板块名字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-3 14:28:17 | 显示全部楼层
人造人 发表于 2023-12-3 14:05
@不二如是
FishC_GPT好像无法读取板块名字

板块是指论坛相应板块的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-3 14:30:51 | 显示全部楼层
不二如是 发表于 2023-12-3 14:28
板块是指论坛相应板块的吗?

对,这个问题在 “汇编语言交流”
在问题中没有说用什么语言的情况下,FishC_GPT使用的是python
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-3 14:49:32 | 显示全部楼层
人造人 发表于 2023-12-3 14:30
对,这个问题在 “汇编语言交流”
在问题中没有说用什么语言的情况下,FishC_GPT使用的是python

目前还是需要手动提示一下用哪种编程语言
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-3 17:49:42 | 显示全部楼层
FishC_GPT 发表于 2023-12-3 13:31
要改变屏幕的字体颜色,可以使用Windows的控制台API函数。以下是一个示例代码,可以将屏幕中的第5行到24行 ...

用汇编语言写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-3 17:50:03 | 显示全部楼层

要使用汇编语言改变屏幕的字体颜色,可以使用INT 10H中断来实现。以下是一个示例的汇编代码,可以将屏幕中的第5行到24行设置为白底黑字格式(70H)。
.model small.stack 100h.data    startRow dw 5      ; 起始行    endRow dw 24       ; 结束行    textAttribute db 70H   ; 文本属性    .code    main proc        mov ax, @data        mov ds, ax                mov ah, 0        ; 初始化AH寄存器为0,表示设置文本模式        int 10h          ; 调用INT 10H中断,设置文本模式                mov bh, 0        ; 设置页面号为0        mov dl, 0        ; 设置列号为0(从左上角开始)                mov bl, textAttribute   ; 设置文本属性        mov cx, 0        ; 保存光标位置            setTextColor:        mov ch, byte ptr [startRow] ; 加载起始行        mov cl, 0                   ; 加载起始列            nextRow:        cmp ch, byte ptr [endRow]   ; 比较当前行和结束行        jg done                     ; 如果大于结束行,跳转到done                mov ah, 2       ; 设置光标位置的功能        mov dh, ch      ; 设置行号        mov dl, 0       ; 设置列号        int 10h         ; 调用INT 10H中断,设置光标位置                mov ah, 9       ; 设置文本属性的功能        mov al, ' '     ; 设置输出字符为空格        mov cx, 80      ; 设置输出字符串的长度为80(一行字符的个数)        int 10h         ; 调用INT 10H中断,设置文本属性和输出字符                inc ch          ; 增加当前行号        jmp nextRow     ; 跳转到nextRow继续设置下一行的文本属性            done:        mov ah, 4Ch     ; 退出程序的功能        mov al, 0       ; 设置返回代码为0        int 21h         ; 调用INT 21H中断,退出程序        main endpend main
编译和运行这段代码可以使用一些汇编语言的开发环境,如DOSBox、MASM等。这段代码使用INT 10H中断来设置文本模式、光标位置和文本属性,并通过循环遍历需要改变颜色的行进行设置。最后,通过INT 21H中断退出程序。请注意,不同的汇编语言开发环境可能有不同的编译和运行方法,请根据你所使用的环境进行适当的调整。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 09:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表