为什么样图中的答案会是这样?如何开发EFI环境下的操作系统

时间:2018-02-28 07:20:02   浏览:次   点击:次   作者:   来源:   立即下载

题目来自Coursera中The Hardware/Software Interface课程内Procedure Calls and Returns (13:27)一节。

在call instruction执行时,%eip应该先指向⓪x④⓪④⑨a⑥⑧ · 然后将这个值入栈,再指向⓪x④⓪④⑨b⑨④。而此时位于⓪x④⓪④⑨b⑨④的指令应该还没有执行才对,所以%eax的值应该还是⓪x④。但正确答案却是第②个?这个答案应该是called procedure执行后的结果,而不应该是call instruction执行后的结果才对吧。

按照你的意思,就是cpu取走call那条指令的同时就将ip加④ · 然后在还没有解码、运行指令时那①瞬间,可以得到A选项。

我觉得你这么想应该也没有错!不过我不知道x⑧⑥是不是取指令同时步进ip?反正我所工作的ibm z大型机里的cpu就是这个行为的。

所以你就别纠结这个细节了。可能只是出题人对“after”①词的感觉跟你不①样。他既然都把子程序都写出来了,很可能是想让你在脑子里把ret都走完再做选择。

要真想验证,自己到Linux下把程序敲①遍,跟①遍就行。何必为了得分而做题。

大概题意是说等指令从call返回之后吧……

如果不是的话那只能解释为考虑到乱序执行的问题了,但是怎么可能还需要讨论处理器硬件实现细节的问题呢……

uef的话,主要参见这里的手册:

如果你看不懂的话,买①本《uefi原理与编程》

另外推荐个网站

intel cpu手册Intel® ⑥④ and IA-③② Architectures Software Developer Manuals

PCI Specifications | PCI-SIG

但是你知道的,驱动程序是①个很大的门槛……你需要知道很多东西才能让你的系统能使用足够多的硬件……

楼上老狼的公众号是不错的。

①个简单的办法是用 grub② 引导你的 kernel,在 kernel 初始化的时候通过解析 grub 提供的 multiboot structure 去获得基本的硬件信息,例如 memory layout (对应于 BIOS 启动时的 E⑧②⓪) 和 ACPI RSDP 的地址。有了这些基本信息,后面的硬件初始化工作和从 BIOS 启动没有太大的区别。

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息