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

Understanding user vs. system stack pointers in Motorola 68k

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

我知道MC 68k,有8个地址寄存器,A7是特殊的。因为它是两个堆栈指针,共享 "System stack pointer".

的名称

我们有两种状态用户状态和主管状态。 其中:

user state- 

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

supervisor state-

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

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

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

将代码写入

这是否正确?

这里我不太清楚所谓的"runtimestack",也不太清楚(SP)和(A7)到底有什么区别。任何帮助将不胜感激。

我从来没有写过任何 68000 汇编程序,但从我从你的问题中读到的内容来看,这似乎是关于用户模式与管理员模式的。也许你应该从头开始阅读手册?

来自M68000 FAMILY Programmer’s Reference Manual

1.3.1 地址寄存器 7 (A7) 在管理员编程模型寄存器中,A7 指的是中断堆栈指针 A7'(ISP) 和主堆栈指针 A7" (MSP)。管理员堆栈指针是活动堆栈指针(ISP 或 MSP)。对于处理器不支持ISP或MSP,系统栈是系统栈指针(SSP)。ISP和MSP是管理员模式的通用地址寄存器。它们可以用作软件栈指针、变址寄存器或基地址寄存器.ISP和MSP可用于字和长字运算

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

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