了解Motorola 68k中的堆栈

时间:2015-11-30 21:23:10

标签: assembly motorola 68000

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

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

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

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有两个硬件堆栈指针?

将代码写入

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

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

这是正确的吗?

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

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

我从来没有写过任何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可用于字和长字操作。