30天自制操作系统笔记(第四天)

Posted kkdf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了30天自制操作系统笔记(第四天)相关的知识,希望对你有一定的参考价值。

这一节讲的最出彩的地方是c语言的地址。

而要理清c语言地址,又必须追根溯源,看看汇编里内存地址的使用。

MOV AL,0X15
MOV [1024],AL

MOV BYTE[1024],0X15

这两种指令效果相同,都是在这个内存地址里存入一个数据,而学过汇编的我们知道,直接往内存某地址存入数据时,要说明填入的数据大小,或者说数据类型,不然机器不知道怎么填入该数据,到底是按照8位填入,还是十六位填入。因此,这个byte必不可少,而前面的指令,由于AL已经明确了是八位,因此不用说明。

好了,接下来说c语言中的地址。

c语言中,char是八位,short是16位,int是32位,如果要实现上面的功能,则先要确定地址中内容的数据类型。

char *p;
int i=1024;
p = (char *) i;
*p = 0x15;

要注意的是,c语言的指针是无法直接赋值地址的,必须在定义其值前将地址单独赋值。

知道了这点,c语言中的数组也不再神秘,如同城里人变村姑。

写过一些算法题的同学都知道,定义一个数组后,数组名相当于指向该数组首地址的指针,而如今就算不定义数组,同样可以进行数组的基本操作。

int *p;
p=(char *) 0xa000;
for(int =0;i<5;i++)
{
    p[i]=3;
}

这竟然是可以运行的(当然,大家不要乱试,这个地址我是瞎写的)!其实这也不是什么奇技淫巧,反而不太安全,毕竟,内存里的地址你不能拿来就用,因此,数组一般是调用数组构造函数,由系统给你分配。

 

以上是关于30天自制操作系统笔记(第四天)的主要内容,如果未能解决你的问题,请参考以下文章

《30天自制操作系统》第9天

《30天自制操作系统》15_day_学习笔记

《30天自制操作系统》17_day_学习笔记

《30天自制操作系统》13_day_学习笔记

《30天自制操作系统》14_day_学习笔记

30天自制OS笔记:2 汇编语言学习与Makefile入门