gpt4 book ai didi

cpu-registers - 英特尔 8086 : Why 4 memory segments

转载 作者:行者123 更新时间:2023-12-02 21:01:40 24 4
gpt4 key购买 nike

据我了解,8086处理器有4个内存段:Stack Segment、Code Segment、Data Segment和Extra Segment,有相应的段寄存器(SS,CS,DS,ES)

问题是:“为什么?”
为什么不合并数据段和代码段?
为什么我们需要 Extra Segment?
为什么是 4?

我知道这个问题听起来可能很乏味,但我是在我大学去年举办的“微处理器架构”考试之一中发现这个问题的。

提前致谢。

最佳答案

首先,让我们假设我们同意使用分段架构的决定(首先是分段的事实)。该决定的“原因”超出范围。

您拥有的段寄存器越多,电路就越复杂,占用的芯片空间就越大,成本也越高;因此,如果它们大部分时间都处于闲置状态,您不一定要投入数十个1。你需要多少?

代码需要一个,那就是 CS。

您可以对代码和数据使用相同的段寄存器,但这严重阻碍了您拥有超过 64kb 的代码 + 数据的能力。您不能暂时“更改 CS”以访问内存另一部分上的数据,因为 CS 是您的代码运行的地方。只有一个寄存器,任何程序都无法访问距离代码超过 64kb 的内存(实际上要少得多)。你肯定至少需要一个数据段(DS)

您可以将这两个中的一个用于堆栈吗?是的,但又要付出高昂的代价。使用 DS 会严重限制程序使用超过 64kb 数据的能力。堆栈段(通常)对程序来说是全局的,所以如果它位于 DS 上,你就不能在不丢失堆栈的情况下更改 DS,并且在你回到“主”之前你将无法进行调用“DS。使用 CS 也有类似的问题。你不能做 FAR CALLs,那不仅仅是代码段,因为它们会破坏堆栈。所以,你需要一个专用的SS。请注意,您还可以决定将堆栈固定在某个硬编码的内存位置,并且您不需要显式 SS。这是有效的,而且我相信某些架构确实这样做了,但是当分配一个较小的堆栈会造成浪费时,您会失去分配较小堆栈的灵 active ,或者甚至失去使用多个堆栈等更高级的技术。

仅靠这三个,您就可以完成很多事情。然而,在某些时候,您将不得不在两个段之间复制或比较数据,并且您需要一种方便的方法来完成它,而不需要将一个字加载到通用寄存器、更改段、加载另一个字、更改segments back... 有一个额外的数据段使代码更紧凑和高效。所以我们有 ES,这是我们的四个段寄存器。

更多的段寄存器是可能的,它们可以更方便地同时处理两个以上的数据段,但它们是一种奢侈,不再是必需品。从 80386 开始,x86 架构确实获得了一对额外的补充寄存器(FS 和 GS),这些寄存器旨在与 ES 具有相同的用途。


1段寄存器不是通用寄存器,因此通常的 RISC 参数不一定适用;此外,RISC 是在 x86 架构设计之后出现的。

关于cpu-registers - 英特尔 8086 : Why 4 memory segments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37954812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com