自制操作系统——c语言与画面显示的练习

如何在显示器显示不同颜色

1.bootpack.c

  1. 前边在进入32位系统前,编写了haribote.nas小程序,有保存各种信息。
mov dword [VRAM],0x000a0000

将显示器的信息保存在了0xa0000那里,显示器保存的信息是色度,有些显示器需要在内存中保存多个不连续的区域,用于保存不同的显示器信息,比如说1920x1080就是一种,色度多少等等。

  1. 运行效果不要再黑屏
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中也没有这种写法。

  1. 指针的效果其实就是一次间接寻址
    char i=0xa0000;
    *i=[0xa0000];//*i=[i];
    **i=[[0xa0000]];
    tip:指针被认为是内存地址的数值,在c语言中认为普通数值与地址数值是两类东西,地址数值叫做指针,互相赋值要进行类型转换
  2. 色号设定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值