gpt4 book ai didi

assembly - 了解 Motorola 68k 中的用户堆栈指针与系统堆栈指针

转载 作者:行者123 更新时间:2023-12-03 06:41:32 26 4
gpt4 key购买 nike

我正在尝试了解汇编语言(Motorola 68k)中堆栈的使用和实现。

我知道MC 68k有8个地址寄存器,A7是特殊的。由于它是两个堆栈指针,因此共享“系统堆栈指针”的名称。

我们有两种状态:用户状态和主管状态。地点:

user state- 

certain system resources are blocked and A7 accesses the user stack pointer.

主管状态-

 all system resources are available and A7 accesses the supervisor stack pointer

现在我不确定如何回答这两个问题:

为什么68000有两个硬件堆栈指针?

写入代码

  • 将寄存器 D1、D3、A2-A6 的长字值保存在运行时堆栈上。

    MOVEM D1-D3/A2-A6, -(A7)

这是正确的吗?

这里我不确定什么是“runtimestack”,我也不确定(SP)和(A7)的真正区别是什么。任何帮助将不胜感激。

最佳答案

操作系统的一个常见要求是用户程序破坏整个系统的能力必须非常有限。许多程序需要能够以相对任意的方式更改自己的堆栈指针的值,但是任何可以更改用于处理中断的堆栈指针的程序都可以通过将该堆栈指针设置为该堆栈指针的地址来破坏任意管理程序内存。内存;因此,下一个中断将丢弃由用于中断的堆栈指针标识的任何内存。由于用户程序不应该能够做到这一点,因此它们必须不能修改用于处理中断的堆栈指针。

68000 通过两个独立的堆栈指针寄存器来处理这个问题,并表示一个将在系统处于用户模式时使用,另一个将在系统处于管理员模式时使用。有一种方法可以让管理程序模式代码读取或设置用户模式代码中使用的堆栈指针是非常有帮助的,但不需要反向功能(让用户模式查看管理程序堆栈),并且管理程序- 模式代码通常不会大量操作用户模式堆栈指针,因此 68000 要求对它的所有访问都通过一些特殊的地址来完成,而不是使用八个编号地址寄存器之一来访问用户模式堆栈指针。说明。

关于assembly - 了解 Motorola 68k 中的用户堆栈指针与系统堆栈指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34008247/

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