【问题标题】:Memory allocation from heap or stack?从堆或堆栈分配内存?
【发布时间】:2012-02-15 13:29:15
【问题描述】:

我读到了, 在8085 中,处理器的起始地址是00000H。 然而, 在8086 中,处理器的起始地址是FFFF0H

现在我还了解到内存的顶部是heap,而下面是stack。我现在感到困惑的是是否在 8085 中,内存是从堆栈分配的,而在 8086 中是从堆分配的?

请帮我弄清楚这个概念。谢谢

【问题讨论】:

    标签: memory-management heap-memory x86-16 stack-memory 8085


    【解决方案1】:

    堆分配是比汇编语言更高级的(C、java 等)概念,在 808x 汇编中你没有这样的东西。您不会“分配”内存。

    另一方面,堆栈是 808x 的原生概念,还有无数的微处理器(和虚拟机),例如每次使用“CALL”时都会用到它(PC 被压入堆栈) .当你 RET 时,返回的 PC 地址从堆栈中弹出。您也可以将寄存器/数据推送到堆栈上。

    【讨论】:

    • 许多其他 CPU 也支持堆栈概念,甚至从那个时代开始,例如 1974 年的 Motorola 6800
    • 是的,对不起,我不够清楚。更正了它。我只想说 808x 微处理器知道堆栈是什么,它们可以直接或间接地操作它。这不是堆的情况。
    【解决方案2】:

    关于为什么 8085 的起始地址是 0000H(这是四个零,而不是五个,因为处理器只支持 16 位地址)的讨论,请参阅this thread

    关于堆栈的位置:通过修改SP,您可以将堆栈移动到您想要的任何位置,但是由于它向下增长,因此将其移动到地址空间的最末端是有意义的。

    【讨论】:

    • 您的部分正确。应该有 4 个零,但生成的物理地址为 20 位,因此 I 位增加。谢谢。
    猜你喜欢
    • 2011-05-28
    • 2018-07-24
    • 1970-01-01
    • 2019-05-17
    • 2011-10-09
    • 2014-10-26
    • 2017-01-04
    • 2023-03-03
    相关资源
    最近更新 更多