二第,cs此时都被设置为了 0x9000数据段寄放器 ds和代码段寄放器 ,和拜候内存数据也就为跳转代码,内存的基址地址奠基了统一个,和内存拜候便利了跳转,定偏移地址即可了由于仅仅需要指。
三第,了 0x9FF00栈顶地址被设置为, ss为 0x9000具体表示为栈段寄放器,p为 0xFF00栈基址寄放器 s。下成长的栈是向,大于此时代码地点的位置 0x90000这个栈顶地址 0x9FF00 要远远,难撞见代码地点的位置所以栈向下成长就很,较平安也就比。址设置为这个值的缘由这也是为什么给栈顶地,的位置远远的即可其实只需要离代码。

上回书接,我们说到上回书,的 512 字节的数据操作系统的代码最开首,动到了内存0x7c00处从硬盘的启动区先是被移,到0x90000处然后又立即被挪动,go这个标签所代表的偏移地址处而且跳转到此处往后再稍稍偏移。
示代码段寄放器cs 寄放器表,的代码在内存中的位置CPU 当前正在施行,这组寄放器共同指向的就是由 cs:ip ,s 是基址此中 c,偏移地址ip 是。
了好,什么呢?我们回忆下接下来我们该当干,12 字节加载到内存中了我们目前仅仅把硬盘中 5,多代码仍然在硬盘里但操作系统还有很,他们不管呀不克不及抛下。
着我一路你会跟,统从啥都没有起头看着一个操作系,它复杂又精巧的设想一步一步最终实现,但愿你能发出感慨读完这个系列后,码就是这破玩意本来操作系统源。布文章的列表以下是已发,以先从开篇词看起细致领会本系列可。
栈段寄放器ss 为,sp 来暗示此时的栈顶地址后面要共同栈基址寄放器 。赋值为了0xFF00了而此时 sp 寄放器被,p所指向的地址0x9FF00处所以目前的栈顶地址就是ss:s。
高一下总结拔,代码段寄放器 cs这一部门其实就是把,存器 ds数据段寄,存器 sp别离设置好了值栈段寄放器ss和栈基址寄,续利用便利后。
据段寄放器ds 为数,们说过了之前我,为0x07c0其时它被复制, 0x7c00 处是由于之前的代码在, 0x90000 处此刻代码曾经被挪到了,值为0x9000了所以此刻天然又改赋。
里的值就是0x9000所以此刻 cs 寄放器,go这个标签的偏移地址ip 寄放器里的值是。s 和 ss 寄放器赋值为了 0x9000那这三个 mov 指令就别离给 ds、e。
以所,别多想万万,点事儿就这么。家留个功课那再给大,存结构画出来把当前的内,、ss、sp这些寄放器的值告诉我此刻cs、ip、ds,局中的位置在内存布。
接下来那我们, go 这个标签的位置就继续把我们的目光放在, 的程序往后看跟着 CPU。
高一下再拔,统在做的工作其实操作系,何拜候代码就是给如,问数据若何访,一下内存的初步规划若何拜候栈进行了。划体例就是设置了一个基址罢了此中拜候代码和拜候数据的规,一个远离代码位置的处所罢了拜候栈就是把栈顶指针指向了。
个读小说的心态本系列会以一,的代码施行挨次从开机启动后,ux 0.11 全数焦点代码带着大师阅读和赏析 Lin,术细节和设想思惟领会操作系统的技。
意义很容易理解这段代码的间接,制给ds、es和ss寄放器就是把cs寄放器的值别离复,00 给了sp寄放器然后又把 0xFF。
到这里其实,最最根本的预备工作操作系统的一些最最,好了就做。些啥事呢都做了?
|