浏览 2127 次
锁定老帖子 主题:请教一个Class文件操作码的意思
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-01-25
一个简单的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没有查到是什么意思 望老手赐教,谢过了先!
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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了 大概好像是这样 |
|
返回顶楼 | |
发表时间:2008-01-26
非常感谢,还是自己看得不认真。
|
|
返回顶楼 | |