《30天自制操作系统》读书笔记(3) 引入C语言

这一次的学习相当曲折, 主要是因为粗心, Makefile里面的错误导致了文件生成出现各种奇奇怪怪的问题, 弄得心力交瘁, 因此制作过程还是尽量按着作者的路子来吧.

作者提供的源码的注释在中文系统下是乱码, 而且代码的分隔用了两个Tab, 在这里要处理一下:

:%s/;.*//g 删除所有的注释;

:%s/\t\t/\t 把两个Tab替换为一个Tab;

要让作者的nas文件和asm文件拥有相同的语法规则, 在_vimrc文件的最后一行添加

au BufNewFile,BufRead *.nas set filetype=asm

  • 真正的IPL

    之前我们写的只是软盘启动区代码, 所有代码只能放在512字节里, 根本不够用,

所以我们要利用这一段代码读入软盘的其他内容, 并将控制权移交给它, 所以叫做IPL(Initial Program Loader).

  • 需要的知识点:

int 0x13 磁盘中断

AH = 0x02    ; 读盘

AH = 0x03    ; 写盘

AH = 0x04    ; 校验

AH = 0x0c    ; 寻道

AH = 0x00    ;大概是重置磁盘, 配合DH = 0x00 使用

AL = 连续处理的扇区数

CH = 柱面号

CL = 扇区号

DH = 磁头号

DL = 驱动器号

ES:BX = 缓冲地址, 寻道及校验不使用

C = 0 没有错误, AH = 0;

C = 1 错误号码存入AH.

这里只会用到0x02和0x00.

软盘的结构:

    用柱面(C)-磁头(H)-扇区(S) 来标识软盘上的扇区, 我们的启动扇区的标号是C0-H0-S1, 值得注意的是下一个扇区是C0-H0-S2, 这个例子里作者要读入10个柱面, 从C0-H0-S1 读到 C9-H1-S18, 这样算来应该是18*2*10 = 360 个扇区, 大小是360*512/1024 = 180 KB, 从我们现在小的可怜的需求看来, 180KB绝对够了.(按这样算的话不是一个柱面有36个扇区吗? 此处不解).

 

以下的代码能将软盘除启动区外开始的180KB的空间读入内存中, 起始地址是0x8200, 占用的空间是0x2d000.

  • 执行软盘中的内容

    编写Haribote.nas文件如下, 结构很简单:

    1 fin:
    2     HLT
    3     JMP    fin 

     

    问题是如何把编译好的程序和IPL结合在一起?

    我们可以先编译好IPL, 和之前一样做成一个img, 然后把程序写入img.

    最直观的方法是把img文件写入U盘, 把程序写入U盘, 再把U盘打包成img,

虽然有些迂回, 但是我们可以借助WinHex来直接写入, 用WinHex直接打开作者做好的Haribote.img ,可以发现它的内部格式如下:

发现Haribote.SYS处在0x4200的位置处 , 这是不是真的Haribote.sys?

也从Winhex里面打开Hraibote.sys:

只有一句, F4 EB FD, 和img文件0x4200处的完全一样, 和作者的总结一样:

向一个空软盘保存文件的时候,

1.文件名会写在0x2600以后的地方(这里我没有去验证);

2.文件的内容会写入到0x4200以后的地方.

非空软盘的情况没有考虑(这里开始我们就真正意义上使用了FAT12的文件系统了, 而不是自己设计一个文件系统).

知道了这个我们就可以知道怎么调用这个程序了, 使用作者提供的edimg.exe 可以方便地将程序写入到img中, 所以Makefile也要做相应的改动, 具体看Project文件夹day3里面的e文件夹.

这个Haribote.nas 所做的只是不断HLT, 我们并不知道这段代码是否真的执行, 作者这里使用了0x10来切换画面模式, 使得光标消失,

参数是AL = 0x13, AH = 0x00, 效果是屏幕全黑, 连光标也不能看到.

我这里采用的是0x10中断的另一个功能, 能够显示带颜色的字符串, 代码如下:

 1 ; Program
 2     ORG    0xc200    ; 加载到 0x8200 + 0x4200 – 0x200(启动区没有被读入)
 3     MOV    AX,0
 4     MOV    ES,AX
 5     MOV    AX,loaded
 6     MOV    BP,AX    ; ES:BP = 串地址
 7     MOV    CX,10        ; 串长度
 8     MOV    AX,0x1301    ;AH = 0x13,AL = 0x01
 9     MOV    BX,0x000b    ; 页号BH = 0 黑底蓝字 BL = 0x0b
10     MOV    DL,0
11     INT    0x10
12     JMP fin
13 loaded:
14     DB    0x0a, 0x0a    
15     DB    "Loaded."
16     DB    0x0a        
17     DB    0
18  
19 fin:    
20     HLT
21     JMP fin 

 

 

效果如下, 可以确定我们Haribote.sys里面的代码已经被执行.

 

  • 进入32位模式&导入C语言*

这里作者开始用我们看不懂的东西了, 给出了一个长长的asmhead.nas, 并且表示"先跳过这一部分", 让我有点不爽, 但是毕竟不能半途而废不是? 这里的Makefile变得越来越复杂, 在这里我第一次碰到了困难, 由于粗心Makefile写少了几行, 导致编译莫名其妙地出错, 纠结了两天才发现, 抄代码都能抄错 = =, 废话略过, 作者还增加了一个Bootpack.c 大概就是我们以后的主战场了, 这里编译过程异常繁琐(作者啊你可不可以不要用你自己写的工具!? (╯‵□′)╯︵┻━┻),

以上所有的工具都是川和先生写的或者改写的(╯‵□′)╯︵┻━┻.

需要强调的是HariMain这个Main函数的函数名已经写死了, 不能够更换, 为了在C

语言里面使用HLT, (事实上现在C语言里面根本就没有函数可用), 增加naskfunc.nas.

所有文件均如下:

 

IPL.nas:

; hello-os
; TAB=4
; const

CYLS    EQU    10
    
    ORG    0x7c00    

    JMP    entry
    DB    0x90
    DB    "OS 0.01 "    
    DW    512    
    DB    1
    DW    1    
    DB    2
    DW    224    
    DW    2880    
    DB    0xf0    
    DW    9
    DW    18        
    DW    2        
    DD    0    
    DD    2880    
    DB    0,0,0x29    
    DD    0xffffffff    
    DB    "OS ver 0.01"    
    DB    "FAT12 "    
    RESB    18        

    
entry:
    MOV    AX,0
    MOV    SS,AX
    MOV    SP,0x7c00
    MOV    DS,AX

   
    MOV    AX,0x0820    ; 缓存位置 = ES:BX
    MOV    ES,AX
    MOV    CH,0    ; 柱面0
    MOV    DH,0    ; 磁头0
    MOV    CL,2    ; 扇区2

readloop:
    MOV    SI,0    ; 记录失败次数

retry:
    MOV    AH,0x02 ; 读盘
    MOV    AL,1    ; 一个扇区
    MOV    BX,0
    MOV    DL,0x00 ; 驱动器A:
    INT    0x13    ; 调用磁盘中断
    JNC    next    
    ADD    SI,1
    CMP    SI,5    ; 失败5次跳出
    JAE    error
    MOV    AH,0x00
    MOV    DL,0x00    ; 指定驱动器A:
    INT    0x13    ; 重置并重试
    JMP    retry   
next: MOV AX,ES ADD AX,0x0020 MOV ES,AX ; 段寄存器往后移0x0020 实际偏移 0x0020*0x0010 = 0x0200 = 512d ADD CL,1 CMP CL,18 ; 读到18扇区 JBE readloop; <= 则跳 MOV CL,1 ADD DH,1 ; 换一个磁头 CMP DH,2 JB readloop; <则跳 MOV DH,0 ADD CH,1 ; 柱面+1 CMP CH,CYLS JB readloop MOV [0x0ff0],CH JMP 0xc200 error: ; 错误提示 MOV AX,0 MOV ES,AX MOV AX,msg MOV BP,AX ; ES:BP = 串地址 MOV CX,14 ; 串长度 MOV AX,0x1301 ;AH = 0x13,AL = 0x01 MOV BX,0x000c ; 页号BH = 0 黑底红字 BL = 0x0c MOV DL,0 INT 0x10 fin: HLT JMP fin msg: DB 0x0a, 0x0a DB "Load error." DB 0x0a DB 0 RESB 0x7dfe-$ DB 0x55, 0xaa

 

 

Asmhead.nas:

BOTPAK    EQU    0x00280000    
DSKCAC    EQU    0x00100000    
DSKCAC0    EQU    0x00008000    

 

CYLS    EQU    0x0ff0    ; 设定启动区    
LEDS    EQU    0x0ff1    
VMODE    EQU    0x0ff2    ; 关于颜色数目的信息,颜色的位数    
SCRNX    EQU    0x0ff4    ; 分辨率 X(Screen X)    
SCRNY    EQU    0x0ff6    ; 分辨率 Y(Screen Y)    
VRAM    EQU    0x0ff8    ; 图像缓冲区的起始地址    

    ORG    0xc200       

    MOV    AL,0x13    ; VGA 显卡    
    MOV    AH,0x00
    INT    0x10
MOV BYTE [VMODE],8 ; 记录画面模式 MOV WORD [SCRNX],320 MOV WORD [SCRNY],200 MOV DWORD [VRAM],0x000a0000 ; 取得键盘上的LED灯的状态 MOV AH,0x02 INT 0x16 MOV [LEDS],AL MOV AL,0xff OUT 0x21,AL NOP OUT 0xa1,AL CLI CALL waitkbdout MOV AL,0xd1 OUT 0x64,AL CALL waitkbdout MOV AL,0xdf OUT 0x60,AL CALL waitkbdout [INSTRSET "i486p"] LGDT [GDTR0] MOV EAX,CR0 AND EAX,0x7fffffff OR EAX,0x00000001 MOV CR0,EAX JMP pipelineflush pipelineflush: MOV AX,1*8 MOV DS,AX MOV ES,AX MOV FS,AX MOV GS,AX MOV SS,AX MOV ESI,bootpack MOV EDI,BOTPAK MOV ECX,512*1024/4 CALL memcpy MOV ESI,0x7c00 MOV EDI,DSKCAC MOV ECX,512/4 CALL memcpy MOV ESI,DSKCAC0+512 MOV EDI,DSKCAC+512 MOV ECX,0 MOV CL,BYTE [CYLS] IMUL ECX,512*18*2/4 SUB ECX,512/4 CALL memcpy MOV EBX,BOTPAK MOV ECX,[EBX+16] ADD ECX,3 SHR ECX,2 JZ skip MOV ESI,[EBX+20] ADD ESI,EBX MOV EDI,[EBX+12] CALL memcpy skip: MOV ESP,[EBX+12] JMP DWORD 2*8:0x0000001b waitkbdout: IN AL,0x64 AND AL,0x02 JNZ waitkbdout RET memcpy: MOV EAX,[ESI] ADD ESI,4 MOV [EDI],EAX ADD EDI,4 SUB ECX,1 JNZ memcpy RET ALIGNB 16 GDT0: RESB 8 DW 0xffff,0x0000,0x9200,0x00cf DW 0xffff,0x0000,0x9a28,0x0047 DW 0 GDTR0: DW 8*3-1 DD GDT0 ALIGNB 16

 

bootpack.c:

 

void io_hlt(void);

void HariMain(void)
{

fin:
    io_hlt();
    goto fin;
}

 

 

 

Naskkfunc.nas:

;naskfunc
[FORMAT "WCOFF"]        ; 制作目标文件的模式
[BITS 32]            ; 制作32位模式用的机械语言

; 制作目标文件的信息

[FILE "naskfunc.nas"]        ; 源文件名信息
    GLOBAL    _io_hlt        ; 程序中包含的函数名

; 实际的函数
[SECTION .text]    ;
_io_hlt:    
    HLT
    RET
void io_hlt(void); void HariMain(void) { fin: io_hlt(); goto fin; }

 

 

万恶的Makefile:

TOOLPATH = ../z_tools/
INCPATH = ../z_tools/haribote/

MAKE = $(TOOLPATH)make.exe -r
NASK = $(TOOLPATH)nask.exe
CC1 = $(TOOLPATH)cc1.exe -I$(INCPATH) -Os -Wall -quiet
GAS2NASK = $(TOOLPATH)gas2nask.exe -a
OBJ2BIM = $(TOOLPATH)obj2bim.exe
BIM2HRB = $(TOOLPATH)bim2hrb.exe
RULEFILE = $(TOOLPATH)haribote/haribote.rul
EDIMG = $(TOOLPATH)edimg.exe
DEL = del
SHORTCUT = "D:\Program Files\Oracle\VirtualBox\VirtualBox.exe" --comment "OS1" --startvm "a5c4b0e6-e142-4720-98ee-056911204b29"

default :
    $(MAKE) install
    $(MAKE) run
    $(MAKE) clean


ipl10.bin : ipl10.nas Makefile
    $(NASK) ipl10.nas ipl10.bin ipl10.lst


asmhead.bin : asmhead.nas Makefile
    $(NASK) asmhead.nas asmhead.bin asmhead.lst

bootpack.gas : bootpack.c Makefile
    $(CC1) -o bootpack.gas bootpack.c

bootpack.nas : bootpack.gas Makefile
    $(GAS2NASK) bootpack.gas bootpack.nas

bootpack.obj : bootpack.nas Makefile
    $(NASK) bootpack.nas bootpack.obj bootpack.lst

naskfunc.obj : naskfunc.nas Makefile
    $(NASK) naskfunc.nas naskfunc.obj naskfucn.lst

bootpack.bim : bootpack.obj naskfunc.obj Makefile
    $(OBJ2BIM) @$(RULEFILE) out:bootpack.bim stack:3136k map:bootpack.map \
        bootpack.obj naskfunc.obj
    echo error

# 3MB+64KB=3136KB


bootpack.hrb : bootpack.bim Makefile
    $(BIM2HRB) bootpack.bim bootpack.hrb 0


haribote.sys :asmhead.bin bootpack.hrb Makefile
    copy /B asmhead.bin+bootpack.hrb haribote.sys

haribote.img : ipl10.bin haribote.sys Makefile
    $(EDIMG) imgin:../z_tools/fdimg0at.tek \
        wbinimg src:ipl10.bin len:512 from:0 to:0 \
        copy from:haribote.sys to:@: \
        imgout:haribote.img

install:
    $(MAKE) haribote.img

run :
    echo Running...
    $(SHORTCUT)
    echo Finished

clean :
    -$(DEL) *.bin
    -$(DEL) *.lst
    -$(DEL) *.gas
    -$(DEL) *.obj
    -$(DEL) bootpack.nas
    -$(DEL) bootpack.map
    -$(DEL) bootpack.bim
    -$(DEL) bootpack.hrb
    -$(DEL) haribote.sys
    -$(DEL) *.*~
    -$(DEL) *~
    echo Finished. 

 

 

 

这次更新慢了, 下次争取早一点…

 

 

 

转载于:https://www.cnblogs.com/lastavengers/p/3833456.html

RK3568平台(USB篇)USB基础知识 现象:把USB设备比如Android手机接到PC答1:是USB控制器,是USB控制器内嵌的root hub.答2. windows里已经有了USB的总线驱动程序,接入USB设备后,是"总线驱动程序"知道你是"android phone"提示你安装的是"设备驱动程序"。USB总线驱动程序负责:识别USB设备, 给USB设备找到对应的驱动程序。答3. PC的USB口内部,D-和D+接有15K的下拉电阻,未接USB设备时为低电平USB设备的USB口内部,D-或D+接有1.5K的上拉电阻; 阅读详情

相关推荐

S905L3B机顶盒刷Armbian:从安卓Root到eMMC全攻略

在嵌入式开发与轻量级服务器搭建中,ARM架构设备因其低功耗和高性价比备受关注。晶晨S905L3B作为运营商机顶盒的主流芯片,通过刷写Armbian系统可将其改造为ARM小服务器。其原理是利用Amlogic芯片的uboot引导机制,将Linux系统写入eMMC存储,从而脱离原厂安卓限制。这一方案的技术价值在于以极低成本实现Docker容器、下载机、轻量数据库等服务的部署,应用场景涵盖家庭网络广告过滤、智能家居控制、复古游戏机等。本文以CM311-1S为例,详细拆解从安卓9 Root到Armbian写入eMMC

weixin_31476015的博客 340

signature=111f58ddc27ff0fab1746b92b27414e9,DDCTF2019官方Write Up——MISC篇

作者:**** 哈尔滨工业大学 /研一/DDCTF2019 Misc方向 Top1第三届DDCTF高校闯关赛鸣锣开战,DDCTF是滴滴针对国内高校学生举办的网络安全技术竞技赛,由滴滴出行安全产品与技术部顶级安全专家出题,已成功举办两届。在过去两年,共有一万余名高校同学参加了挑战,其中部分优胜选手选择加入滴滴,参与到了解决出行领域安全问题的挑战中。通过这样的比赛,我们希望挖掘并培养更多的国际化创新型...

weixin_39612720的博客 3494

《统计学习方法》——李航 学习大纲

最近在学习李航写的统计学习方法概论, 每一章都用xmind理清了思路,括号里是书里的公式,第一次写博文,敬请指教~~~~ 第一章 统计学习方法论 第二章 感知机 每个方法其实只需要着重掌握三要素和输入输出就可以了,主要看模型、策略和算法。 感知机主要是二类分类的线性分类模型。 看到后面会注意感知机和支持向量机的区别。 第三章 k近

wjy619251334的博客 1万+

【操作系统】30天自制操作系统--(2)导入C语言

一 汇编语言入门 8位系统中主要包含以下几个寄存器: 简写 原文 解释 AX accumulator 累加寄存器 CX counter 计数寄存器 DX data 数据寄存器 BX base 基址寄存器 SP stack pointer 栈指针寄存器 BP base pointer 基址指针寄存器 SI source index 源变址寄存器 DI d...

sinat_33408502的博客 1885

Python学习24:中国古代数学问题——物不知数(Python123)

意思是说有一些物品,不知道有多少个,3个3个数的话,还多出2个;5个5个数则多出3个;7个7个数也会多出2个。题目为‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?现假设物品总数不超过n (n

weixin_60530224的博客 2万+

AI量化学习入门指南:从零开始掌握人工智能投资策略

量化投资:利用数学模型和计算机算法进行投资决策的方法算法交易:自动执行预定义交易规则的系统机器学习:让计算机从数据中学习并改进的技术回测:用历史数据检验交易策略表现的过程特征工程:将原始数据转化为模型可理解的输入过拟合:模型过度适应历史数据,导致未来表现不佳夏普比率:衡量单位风险所获得的超额收益AI量化投资不仅仅是技术的应用,更是一种理性、系统化的投资哲学。它不追求预测市场的每一个拐点,而是通过概率思维和风险管理,在不确定性的市场中寻找统计优势。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1128

30天自制操作系统学习-第3天

第三天的开发依旧基于汇编和分区方面的知识,以及调用BIOS中断,写入显存部分内容。 asmhead.nas: ; haribote-os boot asm ; TAB=4 BOTPAK EQU 0x00280000 ; bootpackのロード先 DSKCAC EQU 0x00100000 ; ディスクキャッシュの場所 DSKCAC0 EQU 0x00008000 ; ディスク...

qq511714326的博客 1930

SIMULINK开发项目实例 1000 例专栏之第960例--基于电力系统稳定性的建模与仿真场景:-含分布式电源的配电网电压稳定性研究

间歇性与随机性:例如,太阳能依赖于日照强度,风能依赖于风速,这使得它们的输出功率具有不确定性。逆变器接口:大多数分布式电源通过逆变器接入电网,这对电网的动态响应特性产生了影响。位置分散:通常分布在用户侧或靠近负荷中心的位置。本文详细介绍了如何使用Simulink结合Simscape Electrical 构建一个用于研究含分布式电源配电网电压稳定性的模型,并提供了详细的仿真流程说明。

xiaoheshang_123的博客 153

c语言自制驱动程序,自制操作系统10-自已搭建制作工具

在第三篇文章我想用nasm与c来开发我们的操作系统,但当时最终还是用了作者现成的工具做的镜像文件。在学完汇编语言后,再来尝试。1.汇编语言的引导程序。第二天虽然已经实现了用汇编语言编写hello word,但这个显示只是引导区(0扇区),软盘启动都会读取。第三天我们把引导文件拆成了ipl10.nas与haribote.nas。同样今天我们今天还用这两个文件,不过我们编译工具换成nasm,生成映像文...

weixin_31233537的博客 1098

013:无人机航线规划的概念

航线规划是无人机任务规划的核心环节,它决定了无人机在整个任务执行过程中的飞行路径。航线规划需要考虑多种因素,包括飞行时间、飞行距离、能源消耗、飞行安全等。

qq_31762031的博客 2443

在windows安装程序时出现 系统无法打开指定的设备或文件的解决方案

本文主要介绍了在windows安装程序时出现 系统无法打开指定的设备或文件的解决方案,希望能对使用windows的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

《30天自制操作系统》笔记(02)——导入C语言

《30天自制操作系统》笔记(02)——导入C语言 进度回顾 在上一篇,记录了计算机开机时加载IPL程序(initial program loader,一个nas汇编程序)的情况,包括IPL代码(helloos.nas)、编译生成helloos.img文件、用虚拟机QEMU加载helloos.img、制作U盘启动盘和用物理机加载helloos.img。 计算机启动时会自动加载和执行IPL程序...

weixin_34365417的博客 340

彻底解决Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource

Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource

renkai721的专栏 24万+

进入32位模式并导入c语言教程,《30天自制操作系统》读书笔记(3) 引入C语言

这一次的学习相当曲折, 主要是因为粗心, Makefile里面的错误导致了文件生成出现各种奇奇怪怪的问题, 弄得心力交瘁, 因此制作过程还是尽量按着作者的路子来吧.作者提供的源码的注释在中文系统下是乱码, 而且代码的分隔用了两个Tab, 在这里要处理一下::%s/;.*//g 删除所有的注释;:%s// 把两个Tab替换为一个Tab;要让作者的nas文件和asm文件拥有相同的语法规则, 在_vim...

weixin_36450592的博客 294

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【读书笔记-《30天自制操作系统》-4】Day5

本篇的内容继续以显示为主,将实现文字的显示并描绘鼠标箭头,以及为了之后实现鼠标的移动,初步引入GDT与IDT。

Ocean1994的博客 1397

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【读书笔记-《30天自制操作系统》-3】Day4

本篇主要实现了画面显示部分,同时从汇编语言的角度引入了指针的概念。

Ocean1994的博客 1290

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【读书笔记-《30天自制操作系统》-1】Day1~Day2

30天自制操作系统Day1-Day2读书笔记,主要讲解汇编语言,寄存器与Makefile基础内容

Ocean1994的博客 1269

【读书笔记-《30天自制操作系统》-30】Day31

本篇为《30天自制操作系统》后记与自己学习的心得体会。

Ocean1994的博客 468

【读书笔记-《30天自制操作系统》-2】Day3

本篇内容主要整理IPL启动区的代码实现,与切换到32位模式导入C语言之前的准备工作。

Ocean1994的博客 1254

【读书笔记-《30天自制操作系统》-27】Day28

本片内容围绕着文件操作与文字显示展开,开发了文件操作的API,并实现了日文文字的显示。

Ocean1994的博客 1226

《30天自制操作系统》(【日】川合秀实)读书笔记(第0天)

作为一个立志从事底层安全开发的底层狗,决定先从自己编写一个简单的OS开始,参考书籍《30天自制操作系统》(【日】川合秀实)。 按照这本书做完简单的OS后,预计会观看其它的书籍补充知识,以后慢慢完善我的OS,哈哈哈哈哈!!! ==============================闲扯结束,以下是今天学习的笔记================================== 5 如何开发操...

shimly123456的博客 273

【读书笔记-《30天自制操作系统》-28】Day29

本篇首先完善文件压缩的功能,完成操作系统功能的开发,然后进行应用程序的开发。首先完成了C语言的几个标准函数,然后完成了bball程序与外星人游戏程序的开发。

Ocean1994的博客 1161

【读书笔记-《30天自制操作系统》-21】Day22

本篇内容首先介绍了CPU对于操作系统的保护功能,然后在上一篇API的基础上实现C语言编写的显示字符串与窗口画面的应用程序。

Ocean1994的博客 1585

读书笔记《30天自制操作系统》day03

原文地址:http://blog.youkuaiyun.com/ltbylc/article/details/8292922 0. 自己试着在win7下用NASM和minGW改写汇编和C混合编程,结果受挫了。还是先使用作者提供的工具构建吧。 1. 通过前2天的工作已经能使用NASM制作一个映像了,并且编写的汇编代码可以成为引导扇区代码。 2. 引导扇区代码中可以调用BIOS中断,读取软盘上其它扇区到内存

修真专栏 1552

【读书笔记-《30天自制操作系统》-19】Day20

本篇的内容围绕系统调用展开。为了让应用程序能够调用操作系统功能,引入了系统调用以及API的概念。首先实现了显示单个字符的API,让应用程序通过传递地址的方式进行调用;接下来又改进为通过中断的方式进行调用。在此基础上继续实现了显示字符串的API。

Ocean1994的博客 1405

【读书笔记-《30天自制操作系统》-14】Day15

本篇内容开始讲解多任务。本篇内容结构很简单,先讲解任务切换的原理,再讲解任务切换的代码实践。但是涉及到的知识不少,理解上也有些难度。

Ocean1994的博客 2111
上一篇: 《30天自制操作系统》读书笔记(2)hello, world
下一篇: [转]高精度乘法计算
dingjin9321
博客等级 码龄11年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值