【JVM】模板解释器--如何根据字节码生成汇编码?

这篇博客详细介绍了JVM的模板解释器如何将字节码转换为汇编码,重点讨论了寻址模式、64位合法值、Mod R/M和SIB在32位寻址中的作用,并通过实例展示了具体的计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、背景

仅针对JVM的模板解释器:

如何根据opcode和寻址模式,将bytecode生成汇编码。

本文的示例中所使用的字节码和汇编码,请参见上篇博文:按值传递还是按引用?

2、寻址模式

本文不打算深入展开寻址模式的阐述,我们聚焦Intel的IA32-64架构的指令格式:
这里写图片描述

简要说明下,更多的请参考intel的手册:

Prefixes : 用于修饰操作码Opcode,赋予其lock、repeat等的语义.
REX Prefix
—- Specify GPRs and SSE registers.
—- Specify 64-bit operand size.
—- Specify extended control registers.
Opcode:操作码,如mov、push.
Mod R/M:寻址相关,具体见手册。
SIB:和Mod R/M结合起来指定寻址。
Displacement:配合Mod R/M和SIB指定寻址。
Immediate:立即数。

对上面的Opcode、Mod R/W、SIB、disp、imm如果不明白,看句汇编有个概念:

%mov %eax , %rax,-0x18(%rcx,%rbx,4)

如果这句汇编也不太明白,那么配合下面的:

Base + (Index ∗ Scale) + Displacement – Using all the addressing components together allows efficient
indexing of a two-dimensional array when the elements of the array are 2, 4, or 8 bytes in size.

3、合法的值(64位)

关注下这4个参数的合法取值:

• Displacement — An 8-bit, 16-bit, or 32-bit value.
• Base — The value in a 64-bit general-purpose register.
• Index — The value

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值