什么是asm指令'ta'& '0xfffffffc'是什么意思?

时间:2014-09-17 06:48:17

标签: java assembly jvm

请参阅jdk8/openjdk/hotspot/src/os_cpu/linux_sparc/vm/linux_sparc.s中的以下代码:

_flush_reg_windows:
    ta 0x03
    retl
    mov     %fp, %o0

上面的代码是什么意思?

我无法理解ta的含义。

此外,为什么在retl之后存在代码。 ret之后不应该存在任何内容,对吧?

mov %fp, %o0说明中%o0是什么意思? %fp是否引用FramePointer FP寄存器?

另外,另一个小问题:

mov    %eax, 0xfffffffc(%ebp)

这里0xfffffffc是什么意思?

1 个答案:

答案 0 :(得分:1)

据我理解你的问题,你并不是真的意识到不同的处理器架构(如x86,ARM,Sparc,MIPS,PowerPC)使用完全不同的指令集。

因此,这些处理器的汇编程序代码(和指令)看起来完全不同。

代码的第一个版本显然是Sparc汇编代码。 Sparc处理器用于较大的Sun(现在的Oracle)工作站。这些处理器的工作方式与PC中使用的x86处理器非常不同。

在这些处理器上,寄存器被命名为%o0-%o7,%g0-%g7,%l0-%l7和%i0-%i7。 %fp是"特殊名称"其中一个寄存器(%i6 =%fp)。

就像MIPS处理器一样,这样的CPU有"延迟插槽"。这意味着跳转,调用或返回指令将在一个指令延迟时执行。这意味着跳转或返回指令之后的指令在实际跳转发生之前执行。

出于这个原因,在" retl"之后有一条指令。指令!

" ta"指令类似于" int"关于x86 CPU的指令:它执行操作系统中断。

"迈克尔"已设置0xFFFFFFFC是十六进制数;在这种情况下-4。

" mov%eax,0xfffffffc(%ebp)"是x86 CPU的代码。该指令将存储在地址ebp-4中的值加载到寄存器eax中。