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
将弹出值并再次恢复寄存器。
-(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
将弹出值并再次恢复寄存器。