如何在显示器显示不同颜色
1.bootpack.c
- 前边在进入32位系统前,编写了haribote.nas小程序,有保存各种信息。
mov dword [VRAM],0x000a0000
将显示器的信息保存在了0xa0000那里,显示器保存的信息是色度,有些显示器需要在内存中保存多个不连续的区域,用于保存不同的显示器信息,比如说1920x1080就是一种,色度多少等等。
- 运行效果不要再黑屏
void HariMain(){
int i;
for( i=0xa0000;i<0xaffff;i++){
write_mem8(i,i&0x0f);
}
}
这个代码是可以实现条纹状显示屏幕的,在c语言部分这样写,然后c语言调用了汇编部分后,相当于 mov dword ptr[0xaXXXX],0XaXXXX;
倘若把write_mem8(i&0x0f) 换成 *i=i&0x0f 呢,本质上说是一样的,但是指针一定要声明大小,又不可以重名,事实上也没必要重名,一个名字地址,一个名字放数值,更加灵活,c语言中指针和变量不能重名,所以也要分别声明大小。
/*存放数值的变量大小可变*/
char i;说明是8位(Byte)大小
short i;说明是16位(Word)大小
int i;说明是32位(DWord)大小
/存放地址的变量都是4字节,声明的是i,而不是*i,只不过声明的i是个地址数值类型了*/
char *i;说明是指针i地址指定的数值是Byte大小,指定的大小会影响电脑要压入多少位的数值
short *i;说明是指针i地址指定的数值是Word大小
int *i;说明是指针i地址指定的数值是DWord大小
倘若没有声明大小,那么当c语言把参数发给汇编后,相当于MOV [0xa0000],0xa0001; 程序并不知道这个数据传输的类型大小,不知道要传输几位,MOV中也没有这种写法。
- 指针的效果其实就是一次间接寻址
char i=0xa0000;
*i=[0xa0000];//*i=[i];
**i=[[0xa0000]];
tip:指针被认为是内存地址的数值,在c语言中认为普通数值与地址数值是两类东西,地址数值叫做指针,互相赋值要进行类型转换 - 色号设定