鱼C论坛

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

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

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

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

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

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

  6.     mov     bx, 4 * 160 + 1
  7.     mov     dx, 24 * 160 + 1
  8.     mov     ax, 0b800h
  9.     mov     ds, ax
  10. n:  mov     al, 70h
  11.     mov     [bx], al
  12.     add     bx, 2
  13.     cmp     bx, dx
  14.     jne     n
  15.     ; getchar
  16.     mov     ah, 1
  17.     int     21h
  18.     ; exit
  19.     mov     ax, 4c00h
  20.     int     21h
  21.     ret
  22. code ends
  23. end start
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

这段代码使用了ctypes来调用Windows的控制台API函数,通过设置文本颜色和背景颜色来改变屏幕的字体颜色。在示例中,使用了黑底白字的格式(0x70),你可以根据需要调整颜色参数。

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

使用道具 举报

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

  6.     mov     bx, 4 * 160 + 1
  7.     mov     dx, 24 * 160 + 1
  8.     mov     ax, 0b800h
  9.     mov     ds, ax
  10. n:  mov     al, 70h
  11.     mov     [bx], al
  12.     add     bx, 2
  13.     cmp     bx, dx
  14.     jne     n
  15.     ; getchar
  16.     mov     ah, 1
  17.     int     21h
  18.     ; exit
  19.     mov     ax, 4c00h
  20.     int     21h
  21.     ret
  22. code ends
  23. 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)。
  1. .model small
  2. .stack 100h
  3. .data
  4.     startRow dw 5      ; 起始行
  5.     endRow dw 24       ; 结束行
  6.     textAttribute db 70H   ; 文本属性
  7.    
  8. .code
  9.     main proc
  10.         mov ax, @data
  11.         mov ds, ax
  12.         
  13.         mov ah, 0        ; 初始化AH寄存器为0,表示设置文本模式
  14.         int 10h          ; 调用INT 10H中断,设置文本模式
  15.         
  16.         mov bh, 0        ; 设置页面号为0
  17.         mov dl, 0        ; 设置列号为0(从左上角开始)
  18.         
  19.         mov bl, textAttribute   ; 设置文本属性
  20.         mov cx, 0        ; 保存光标位置
  21.         
  22.     setTextColor:
  23.         mov ch, byte ptr [startRow] ; 加载起始行
  24.         mov cl, 0                   ; 加载起始列
  25.         
  26.     nextRow:
  27.         cmp ch, byte ptr [endRow]   ; 比较当前行和结束行
  28.         jg done                     ; 如果大于结束行,跳转到done
  29.         
  30.         mov ah, 2       ; 设置光标位置的功能
  31.         mov dh, ch      ; 设置行号
  32.         mov dl, 0       ; 设置列号
  33.         int 10h         ; 调用INT 10H中断,设置光标位置
  34.         
  35.         mov ah, 9       ; 设置文本属性的功能
  36.         mov al, ' '     ; 设置输出字符为空格
  37.         mov cx, 80      ; 设置输出字符串的长度为80(一行字符的个数)
  38.         int 10h         ; 调用INT 10H中断,设置文本属性和输出字符
  39.         
  40.         inc ch          ; 增加当前行号
  41.         jmp nextRow     ; 跳转到nextRow继续设置下一行的文本属性
  42.         
  43.     done:
  44.         mov ah, 4Ch     ; 退出程序的功能
  45.         mov al, 0       ; 设置返回代码为0
  46.         int 21h         ; 调用INT 21H中断,退出程序
  47.    
  48.     main endp
  49. end main
复制代码

编译和运行这段代码可以使用一些汇编语言的开发环境,如DOSBox、MASM等。这段代码使用INT 10H中断来设置文本模式、光标位置和文本属性,并通过循环遍历需要改变颜色的行进行设置。最后,通过INT 21H中断退出程序。请注意,不同的汇编语言开发环境可能有不同的编译和运行方法,请根据你所使用的环境进行适当的调整。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 01:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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