随笔分类 - 30天自制操作系统
摘要:获取按键编码 当中断程序处理完毕之后需要相8259A发送一个处理完毕的信号,这样8259A才知道中断已经处理完毕,可以接收下一个中断信号了,不然的话,我们的键盘中断一直阻塞在哪里没办法进行处理下一个按键操作。 io_out8(PIC0_OCW2, 0x61);就是为了满足这个操作的。键盘的中断是IR
阅读全文
摘要:GDT初始化 为了兼容前几代的CPU,所以GDT段描述符看起来有些不规整,让人难以理解,GDT段描述符中存储的内容和第五天讲的一样: 分为开始地址、段大小、段属性。我们实际处理是分割成以下几个部分: 段基址也就是段开始地址被拆成了三部分,段界限也就是段大小被拆成了三部分,剩下的几位就是段属性了。 在
阅读全文
摘要:结构体 获取启动信息 我们需要获取我们之前使用ashead.asm设置的启动信息,以便于我们之后的开发 这些启动信息我们利用指针,定义指针,根据指针地址就能获取到定义的值,如下所示: char *Scrnx = 0x0ff4; char *Scrny = 0xff6; char *vram = 0x
阅读全文
摘要:# 用c语言实现内存写入 只显示黑乎乎的窗口一点意义也没有,我们需要值写入到现存中,以此来让显示器显示一些图像,首先利用汇编语言来定义一个函数,函数名称为_write_mem8,函数接收两个四字节的变量esp+4获取第一个变量的地址,esp+8获取第二个变量的地址,因为每个传过来的变量大小都是四字节
阅读全文
摘要:# bochs 安装 1. 首先在bochs官网中找到bochs的最新版本的下载地址 https://bochs.sourceforge.io/getcurrent.html ![img](https://img2023.cnblogs.com/blog/1859679/202303/1859679
阅读全文
摘要:汇编 org origin 表示程序加载的开始地址,也就是将程序从什么位置进行加载 JMP 相当于c语言的goto语句,无条件跳转。 jmp entry表示跳转到entry语句块。 MOV 数据传送指令,需要注意的是,mov的操作数和源操作数不能全是内存地址,因为cpu只能对内存进行读操作或者写操作
阅读全文
摘要:# helloOS.img CPU只能识别二进制,也就是01,我们可以通过使用二进制编辑器来写二进制代码使得计算机识别这些代码并输出我们想要的字符。 ![image](https://img2022.cnblogs.com/blog/1859679/202210/1859679-2022100914
阅读全文