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



-(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

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

相关内容

  • 没有找到相关文章

最新更新