-(sp)
的含义是什么?
我正在阅读旧操作系统PDP-11上的Unix V6代码。
我已经知道sp
的含义,这是堆栈指针。这与-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
将弹出该值并再次恢复寄存器。