What's the meaning of -(sp)
?
I am reading code of Unix V6, on PDP-11 the old OS.
I already know the meaning of sp
, this is stack pointer.
Is this same as -1(sp)
?
此答案是在向 PDP-11 澄清问题之前编写的。我猜它看起来像一个 m68k 预递减寻址模式。
Michael Petch 证实 PDP-11 的-(SP)
语法根据操作数大小减少 1 或 2 个字节,因此几乎可以肯定它是摩托罗拉语法的灵感来源。
本页解释了-(A0)
语法意味着将指针预减操作数的宽度。
MOVE.L
中,它递减 4。(如 C *(sp-=4)
)MOVE.W
中,它递减 2。MOVE.B
中,它递减 1。(除非地址寄存器是 A7,也就是 SP,在这种情况下它仍然递减 2,因此它保持对齐!)同样,+(A0)
它的工作方式与后增量运算符相同。
它们的工作方式类似于 x86 的 PUSH(预先递减堆栈指针)和 POP(后递增堆栈指针)。
-(sp)
表示在使用之前减少寄存器sp
。
因为sp
是堆栈指针,这是写入堆栈的常用方法
mov r0,-(sp)
例如将寄存器 r0 保存(或推送)到堆栈上,并且
mov (sp)+,r0
将弹出该值并再次恢复寄存器。