unix v6 程序集中 -(sp) 的含义是什么?

What is the meaning of -(sp) in unix v6 Assembly?

-(sp)是什么意思?

我正在阅读旧的 PDP-11 上的 Unix V6 代码 OS。

我已经知道sp的意思了,这是栈指针。 这和-1(sp)一样吗?

这个答案是在向 PDP-11 澄清问题之前写的。我猜它看起来像一个m68k预减寻址模式。

Michael Petch 确认 PDP-11 的 -(SP) 语法根据操作数的大小递减 1 或 2 个字节,因此几乎可以肯定它是摩托罗拉语法的灵感来源。


This page 解释说 -(A0) 语法意味着将指针预先递减操作数的宽度。

  • MOVE.L中,它减4。(像C*(sp-=4)
  • MOVE.W中,它减2。
  • MOVE.B中,它减1。(除非地址寄存器是A7,又名SP,在这种情况下它仍然减2,所以它保持对齐!)

类似地,+(A0) 的工作方式与 post 递增运算符相同。

它们的工作方式类似于 x86 的 PUSH(预递减堆栈指针)和 POP(post-递增堆栈指针)

-(sp) 表示寄存器 sp 在使用之前递减。

因为sp是堆栈指针,这是写入堆栈的通常方式

mov r0,-(sp)

例如将寄存器 r0 保存(或压入)堆栈,并且

mov (sp)+,r0

将弹出值并再次恢复寄存器。