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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值