我正在开发一个操作系统内核。我正面临一个问题,同时打印扩展的ASCII字符到屏幕上。当我试图在屏幕上打印字符时,一般的ascii字符很容易打印成白色。但当我试图打印扩展的ASCII字符,如区块,西格玛等,它打印黄色。相反,这些字符是用color's number - 1打印的。
WHITE -> YELLOW
YELLOW -> BRIGHT MAGENTA
BRIGHT MAGENTA -> BRIGHT RED
.
.
and so on有人能告诉我为什么会发生这种事并帮助我解决这个问题吗?
我的密码是-
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代码
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;
}发布于 2017-01-07 08:32:23
最有可能的问题是:
(attr<<8)+character在x86 gcc中,默认情况下类型为char。因此,当您传递代码为0x80 . 0xFF的字符时,这些字符被视为签名,并在加法之前得到扩展。所以,对于那些角色,你实际上得到了(attr<<8)+0xFFFFFF80 . (attr<<8)+0xFFFFFFFF。并将0xFF00添加到(attr<<8)中,有效地从attr中减去1。
https://stackoverflow.com/questions/41519336
复制相似问题