论坛首页 Java企业应用论坛

请教一个Class文件操作码的意思

浏览 2127 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-01-25  
最近在看JVM(深入java虚拟机)
一个简单的java程序
int i = 0; 
for (;;) { 
i += 1; 
i *= 2; 
}
 
对应的byteCode以及助记操作码如下
// Bytecode stream: 03 3b 84 00 01 1a 05 68 3b a7 ff f9
// Disassembly:
mnemonic bytecode offset
iconst_0   // 03        0
istore_0   // 3b        1
iinc 0, 1    // 84        2
                // 00        3
                // 01        4
iload_0    // 1a         5
iconst_2   // 05        6
imul          // 68        7
istore_0   // 3b        8
goto -7    // a7        9
               // ff        10
               // f9       11

从sun的jvm spec上得知 ff 是保留操作码,不过这个f9没有查到是什么意思
望老手赐教,谢过了先!

 

   发表时间:2008-01-25  
http://java.sun.com/docs/books/jvms/second_edition/html/Instructions2.doc5.html

Format
goto
branchbyte1
branchbyte2


a7是goto
ff是branchbyte1
f9是branchbyte2

The unsigned bytes branchbyte1 and branchbyte2 are used to construct a signed 16-bit branchoffset, where branchoffset is (branchbyte1 <<8) | branchbyte2. Execution proceeds at that offset from the address of the opcode of this goto instruction. The target address must be that of an opcode of an instruction within the method that contains this goto instruction.

所以(ff<<8)|f9=f9 转换为有符号的十进制数是-7
也就是goto -7了

大概好像是这样
0 请登录后投票
   发表时间:2008-01-26  
非常感谢,还是自己看得不认真。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics