0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CS和IP从哪里开始执行代码

FPGA之家 来源:FPGA之家 作者:FPGA之家 2022-07-25 08:58 次阅读

来到我所在的工作车间,提取指令的小A、分析指令的小胖和负责结果回写的老K都已经到了,就差执行指令的我了。

我们几个各就各位,做起了准备工作。

“小A,报告一下各个寄存器的值”,我嘱咐小A,这是我们每天开始工作前必做的检查项。

每次一通电,咱们的电路就会启动自检工作,把所有的寄存器全部重置,如果哪里有异常的话,就会把错误记录到EAX寄存器中,如果发现EAX的值不是0,那可就大事不好了。

“报告,寄存器已确认:”

EAX,EBX, ECX, ESI, EDI, EBP, ESP: 0x00000000

EFLAGS: 0x00000002

CS: 0xF000

EIP: 0xFFF0

······

看起来没什么问题,尤其是CS和IP这两个寄存器,决定着一会儿该从哪里开始执行代码呢。

我们是一个64位的CPU,平时都是工作在保护模式下,使用虚拟地址来访问内存,由厂里的内存管理单元MMU负责给转换成真实的物理地址。

不过在刚刚开机的这会儿功夫,虚拟地址翻译所需要的页目录、页表这些信息都还没准备好,MMU还没法工作,这时候我们只能使用16位的寄存器,工作在实地址模式下,使用段+基址的方式来跟内存打交道,最多只能使用1MB的内存空间,实在是有点局促。

开始执行“大家都准备好了吗,打起精神来,要准备开始今天的工作了哦!”

“Q哥,这刚刚通电,内存条那家伙应该还是一片空白吧,咱们要去执行哪里的指令啊?”,小A问到。

“这你不用担心,在主板上,咱们CPU隔壁不远处有个叫BIOS的伙计,是一个ROM芯片,咱们已经跟他约定好了,一通电他就映射到地址空间中,你尽管按照CS:IP(0xF000:0xFFF0)指向的地方开始取指令就对了,他会安排好的”

“原来是这样”,小A点了点头,似懂非懂的样子。

正式开始干活了,小A熟练的从F000:FFF0处,也就是0xFFFF0处取到了第一条指令:jmp xxxx

好家伙,上来就是一个大跳转,我们一下来到了BIOS那家伙地盘的中央,开始执行他准备的程序了。

接下来执行的这一堆指令我已经做过无数次了,对主板上各单位进行检测,看看有没有异常情况,还有初始化我们工作需要的中断向量表等等,我早已经轻车熟路了。

“哥几个忙着呐”,我们正忙的热火朝天,发现有人在门口围观,回头看去,原来是隔壁二号车间、五号车间、八号车间的几个家伙。

“你们几个这么闲,要不来帮我们干会儿活?”

“哎,你想得美,你们一号核是引导处理器(BSP),待遇比我们好,这开机启动的活儿我们怎么能抢呢?”,二号车间的虎子阴阳怪气的说到。

真是羡慕他们,比我们1号车间上班时间晚,每次都可以多睡会儿。

MBR我继续执行BIOS中的代码,一切检查完毕,没什么异常,要准备启动操作系统大佬了。

接下来,我检查了BIOS中配置的启动顺序,排在第一位的是硬盘兄弟。

a4d615c6-0bb3-11ed-ba43-dac502259ad0.png

于是我把硬盘老哥第0盘第0道第1扇区的内容读取到了内存中的0x7C00位置,他们把这玩意叫做主引导记录MBR,一共512个字节。

听硬盘那哥们说,这是操作系统老大在安装的时候,写到他那里的。

他还告诉我,这个位置很重要,曾经就有病毒占据了这个位置,最后没办法只好重装系统。

a4e4bd56-0bb3-11ed-ba43-dac502259ad0.png

MBR

读取到了MBR后,还得检查最后两个字节必须是0x55和0xAA,看起来没什么问题,是一个合法的MBR,我们又跳到了0x7C00的位置开始执行。

操作系统终于来到操作系统的地盘儿了,在操作系统的指示下,我们切换了工作模式,开始在保护模式下工作了!

刚刚切换到保护模式下,MMU仍然没法做地址翻译工作,我们还是只有直接使用物理地址跟内存联系,所以得赶紧把页目录和页表准备妥当才行。

忙活了一阵子之后,总算把需要的东西都弄好了,我激动的打开了内存分页的开关,通知MMU部门开始工作,现在我们可以使用虚拟地址访问内存了,这感觉棒多了!

a4fcc4d2-0bb3-11ed-ba43-dac502259ad0.png

这时,一旁围观的二号车间、五号车间、八号车间那几个家伙见状赶紧遛了回去,因为他们知道,马上就该他们工作了。

我们继续执行操作系统的代码,给咱们CPU其他所有核都准备好了数据和指令,创建了多个线程出来,把他们也叫起来一起工作,咱们这个八核CPU终于全面开动起来,一下子热闹了不少。

再后来,不知执行了多少指令,创建了多少线程,才把操作系统老大完整的运行了起来,成功完成了这一次的启动。

这就是通电后,我们CPU开始工作的日常,我已经记不清这是第多少次启动了,也不知道,我们还能启动多少次···

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    456

    文章

    50947

    浏览量

    424709
  • 寄存器
    +关注

    关注

    31

    文章

    5357

    浏览量

    120655
  • 代码
    +关注

    关注

    30

    文章

    4802

    浏览量

    68738

原文标题:按下电源后的几秒钟,CPU在干嘛?

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    用于课题的无线转速霍尔传感器,新人应该哪里开始学习

    完全没电路的基础,但是课题上导师要求设计一款无线的霍尔转速传感器,电池供电然后通过无线技术去读取传感器上的转速。想请教下各位大佬应该哪里开始学习比较好,或者是有现成的产品可以去模仿学习可以吗
    发表于 01-08 10:36

    Java代码之美,遵循样式规范开始

    作者:京东零售 刘仲伟 在软件开发的世界里,代码不仅是程序的基石,更是程序员交流的通用语言。而Java,作为一门广泛应用于企业级应用的编程语言,其代码的可读性和一致性对于项目的长期维护和团队协作
    的头像 发表于 11-27 11:42 222次阅读
    Java<b class='flag-5'>代码</b>之美,<b class='flag-5'>从</b>遵循样式规范<b class='flag-5'>开始</b>

    EtherCAT站转EtherNet/IP站协议网关(JM-EIP-ECAT)

    EtherNet/IP设备连接到EtherCAT网络。 广泛应用:在工业自动化领域,不同设备和系统可能采用不同的通信协议。EtherCAT站转EtherNet/IP站协议网关可以将
    的头像 发表于 08-15 17:30 457次阅读
    EtherCAT<b class='flag-5'>从</b>站转EtherNet/<b class='flag-5'>IP</b><b class='flag-5'>从</b>站协议网关(JM-EIP-ECAT)

    CS1237 / CS1238应用原理图及STC的示例代码

    CS1237 / CS1238应用原理图及STC的示例代码。 邮箱381005883@QQ.COM
    发表于 07-23 16:05

    如何服务器角度对ESP设备执行ping操作?

    如何服务器角度对 ESP 设备执行 ping 操作?我有 IP 为 192.168.0.1 的服务器和 IP 为 192.168.0.2 的根节点,其余非根节点的
    发表于 07-12 14:03

    请求一份CS1237 的应用应用原理图和软件代码

    芯海老师好,我是小家电公司的工程师,准备做一个电子称在产品中。我初次应用CS1237,有问题赐教。第1,请提供一份CS1237 的应用原理图和软件代码。第2,我们的主控单片是8位的,请问与CS
    发表于 06-23 09:39

    MATLAB GUI的暂停执行与继续执行问题

    MATLAB小白发问,各位大神,我想在GUI界面放一个或者两个按钮,实现程序的暂停和继续执行,比如:1到100计数,计到45,按暂停键暂停,再按或者按另一个按钮,继续计数,46开始
    发表于 06-21 12:34

    espidf以太网驱动一直卡在\"Waiting for IP\"的原因?

    调函数为on_got_ip。 目前代码调试卡在此处,没有找到哪里触发了IP_EVENT_ETH_GOT_IP事件,无法分析问题出在哪里
    发表于 06-21 06:08

    你好,麻烦提供一下cs1237及cs1238的参考电路及stm32的示例代码,使用spi接口的

    你好,麻烦提供一下cs1237及cs1238的参考电路及stm32的示例代码,使用spi接口的
    发表于 05-26 19:48

    请问STM8 IAR环境下如何看FLASH的执行地址?

    我看到公司的程序把掉电保存的数据存在了内部FLASH中,而且地址是从零开始存的,这是怎么确定是这个的?这么说来烧录程序的地址也就是执行首地址是最后开始
    发表于 04-30 07:44

    PGX-MINI 4K 入门哪里开始

    20PIN 扩展 IO、数码管、按键、led 灯等硬件资源,为用户提供基本的开发环境。 上个月打卡应该是有这开发板了,请问入门得如里开始
    发表于 04-14 07:02

    STM32F103是如何知道要从启动文件开始执行的?

    STM32F103芯片是如何知道要从startup_stm32f10x_hd.s启动文件开始执行的?为什么不是其他的文件开始执行的?如果我
    发表于 04-08 07:56

    STM32G0B1RE SPI+DMA返回数据时开始3个字节错误的原因?怎么解决?

    3返回给SPI-Master的数据的前3个字节总是上次的数据的结尾3个字节。我的实现逻辑是SPI-Slave端通过CS引脚判断数据传输开始与结束,数据传输的长度不定: /** * @brief
    发表于 04-07 06:20

    CS32G020烧录配置代码选项?

    CS32G020软件上修改代码选项值后,烧录如何配置代码选项一样进行烧录
    发表于 02-02 02:37