了解Motorola 68k中的堆栈

TTE*_*TEd 2 assembly 68000 motorola

我试图理解汇编语言中的Stacks的使用和实现(Motorola 68k).

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

我们有两个状态用户状态和主管状态.哪里:

user state- 

certain system resources are blocked and A7 accesses the user stack pointer.
Run Code Online (Sandbox Code Playgroud)

supervisor state-

 all system resources are available and A7 accesses the supervisor stack pointer
Run Code Online (Sandbox Code Playgroud)

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

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

写代码

这是正确的吗?

在这里,我不确定所谓的"运行时堆栈",我不确定(SP)和(A7)的真正区别.任何帮助将非常感激.

sup*_*cat 6

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

68000通过具有两个独立的堆栈指针寄存器来处理这个问题,并且说当系统处于用户模式时将使用一个,而当它处于管理员模式时则使用另一个.有一种方法可以让管理员模式代码读取或设置用户模式代码中使用的堆栈指针,但不需要反向能力(让用户模式看到管理程序堆栈)和主管模式代码通常不会非常严重地操纵用户模式堆栈指针,因此68000要求通过一些特殊的操作来完成对所有访问的操作,而不是将八个编号的地址寄存器中的一个用于用户模式堆栈指针.说明.