gpt4 book ai didi

java - asm指令 'ta'和 '0xfffffffc'是什么意思?

转载 作者:行者123 更新时间:2023-12-01 12:31:40 24 4
gpt4 key购买 nike

请参阅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是什么意思?

最佳答案

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

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

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

在此类处理器上,寄存器被命名为 %o0-%o7、%g0-%g7、%l0-%l7 和 %i0-%i7。 %fp 是这些寄存器之一的“特殊名称”(%i6 = %fp)。

就像 MIPS 处理器一样,此类 CPU 也有“延迟槽”。这意味着跳转、调用或返回指令将在一个指令延迟后执行。这意味着跳转或ret指令后面的指令在实际跳转发生之前执行。

因此,在“retl”指令之后有一条指令!

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

由于“Michael”已经设置了0xFFFFFFFC是一个十六进制数;在本例中为-4。

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

关于java - asm指令 'ta'和 '0xfffffffc'是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25884028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com