编辑“︁
Java字节码
”︁(章节)
跳转到导航
跳转到搜索
脚本错误:没有“Mainspace editnotice”这个模块。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
==指令== 指令码为一个[[字节]],有256个可能的代码值(2<sup>8</sup>=256),因此一个字节的指令码最多可能有256种不同的操作。其中,0x00、0xFE、0xCA、0xFF被指定保留。例如0xCA作为一个Java调试器的中断指令而从未被语言使用。相似地,0xFE和0xFF也未被语言使用<ref>{{Cite web |url=http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.2 |title=存档副本 |accessdate=2014-01-28 |archive-date=2013-02-21 |archive-url=https://web.archive.org/web/20130221063029/http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.2 |dead-url=no }}</ref>。 指令可以基本分为以下几类: *存储指令 (例如:aload_0,istore) *算术与逻辑指令 (例如: ladd,fcmpl) *类型转换指令 (例如:i2b,d2i) *对象创建与操作指令 (例如:new,putfield) *堆栈操作指令 (例如:swap,dup2) *控制转移指令 (例如:ifeq,goto) *方法调用与返回指令 (例如:invokespecial,areturn) 除此之外,还有一些更特殊的指令,作为异常抛出或同步等作用。 大多数的指令有前缀和(或)后缀来表明其操作数的类型。如下表 {| class="wikitable" |- ! 前/后缀 !! 操作数类型 |- | <code>i</code> || [[整数 (计算机科学)|整数]] |- | <code>l</code> || [[长整型|长整数]] |- | <code>s</code> || [[整数 (计算机科学)|短整数]] |- | <code>b</code> || [[字节]] |- | <code>c</code> || [[字符 (计算机科学)|字符]] |- | <code>f</code> || [[單精度浮點數|单精度浮点数]] |- | <code>d</code> || [[雙精度浮點數|双精度浮点数]] |- | <code>z</code> || [[布尔值]] |- | <code>a</code> || [[引用 (程序设计)|引用]] |} 例如,"iadd"指令将两个整数相加;而"dadd"指令将两个double浮点数相加。 "const"、 "load"、 "store"等涉及存储命令还会使用"_n"后缀,其中 "load"和"store"命令中的''n''可以为0到3之间的整数;而"const"命令中的n由类型指定。"const"指令把一个指定类型的值放入堆栈。例如"iconst_5"指令将一个整数5放入堆栈;而"dconst_1"将一个双精度浮点数1放入堆栈。"aconst_null"指令是放入一个null进堆栈。而对于"load" "store"指令中的n,指定了变量表中的存储位置。"aload_0"指令把在变量0中的对象(通常是"this"对象)放入堆栈,"istore_1"指令把栈顶的一个整数放入变量1。对于更高的变量,后缀将被去除,而这条指令将需要操作数。
摘要:
请注意,所有对Local Chinese Wikipedia的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Project:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
大陆简体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息