首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展的ASCII字符用黄色而不是白色OSDev打印。

扩展的ASCII字符用黄色而不是白色OSDev打印。
EN

Stack Overflow用户
提问于 2017-01-07 08:12:33
回答 1查看 272关注 0票数 0

我正在开发一个操作系统内核。我正面临一个问题,同时打印扩展的ASCII字符到屏幕上。当我试图在屏幕上打印字符时,一般的ascii字符很容易打印成白色。但当我试图打印扩展的ASCII字符,如区块,西格玛等,它打印黄色。相反,这些字符是用color's number - 1打印的。

代码语言:javascript
复制
WHITE -> YELLOW
YELLOW -> BRIGHT MAGENTA
BRIGHT MAGENTA -> BRIGHT RED
.
.
and so on

有人能告诉我为什么会发生这种事并帮助我解决这个问题吗?

我的密码是-

代码语言:javascript
复制
putChar(0xdb,0,3,color(BLACK,BLACK));
putChar('A',2,3,color(WHITE,BLACK));

putChar(228,0,4,color(B_GREEN,BLUE));
putChar('A',2,4,color(B_GREEN,BLUE));

putChar(228,0,5,color(B_MAGENTA,BLUE));
putChar('A',2,5,color(B_MAGENTA,BLUE));

输出是-

我本可以使用color+1代码,但没有比白色更高的东西。我怎么能把它们打印成白色?

编辑- putChar代码

代码语言:javascript
复制
void putChar(char character, short col, short row, unsigned char attr) {
    volatile unsigned char* vid_mem = (unsigned char *) VIDEO_MEM;
    int offset = (row*80 + col)*2;
    vid_mem += offset;
    if(!attr) {
        attr = default_color;
    }
    *(unsigned short int *)vid_mem = (attr<<8)+character;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-07 08:32:23

最有可能的问题是:

代码语言:javascript
复制
(attr<<8)+character

在x86 gcc中,默认情况下类型为char。因此,当您传递代码为0x80 . 0xFF的字符时,这些字符被视为签名,并在加法之前得到扩展。所以,对于那些角色,你实际上得到了(attr<<8)+0xFFFFFF80 . (attr<<8)+0xFFFFFFFF。并将0xFF00添加到(attr<<8)中,有效地从attr中减去1。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41519336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档