⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jcvm03structvm.html

📁 JAVA CARD 开发包规格说明,版本为2.2.2
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"><HTML LANG="en"><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1"><META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css"><META NAME="GENERATOR" CONTENT="Adobe FrameMaker 7.0/HTML Export Filter"><LINK REL="STYLESHEET" HREF="unx_unstr_styles.css" CHARSET="ISO-8859-1" TYPE="text/css"><META name="DC.TITLE" content="Virtual Machine Specification, Java Card Platform, v2.2.2"><TITLE>C H A P T E R    3 - Structure of the Java Card Virtual  Machine </TITLE></HEAD><BODY BGCOLOR="#ffffff"><DIV><div class="navbar" align="center"><table dir="LTR" summary="Navigation bar, includes the book title and navigation buttons" width=100% cellpadding="0" cellspacing="0" border="0"><colgroup span="2" width="100%"><col id="1" span="1" width="50%"><col id="2" span="1" width="50%"><tr bgcolor="#cccccc"><td class="navbartitle" align=left rowspan="1" colspan="1" abbr="ChapTitle">&nbsp;&nbsp;Virtual Machine Specification, Java Card Platform, v2.2.2</td><td valign="top" align="right" rowspan="1" colspan="1" abbr="NavButtons"><a href="index.html"><img src="shared/toc01.gif" title="Table Of Contents" alt="Table Of Contents" width="30" height="26" border="0"></a><a href="JCVM02lang.html"><img src="shared/prev01.gif" title="Previous Chapter" alt="Previous Chapter" width="30" height="26" border="0"></a><a href="JCVM04naming.html"><img src="shared/next01.gif" title="Next Chapter" alt="Next Chapter" width="30" height="26" border="0"></a><a href="ix.html"><img src="shared/index01.gif" title="Book Index" alt="Book Index" width="30" height="26" border="0"></a></td></tr></table><br><br></div></DIV><TABLE DIR="LTR" SUMMARY="Chapter Number" ABBR="ChapNum" WIDTH="100%" BORDER="0"><COLGROUP SPAN="1" WIDTH="100%"><COL ID="1" SPAN="1"><TR><TD ALIGN="right" CLASS="ChapNumber"><SPAN CLASS="ChapNumPrefix"><A NAME="pgfId-641"></A>C H A P T E R    </SPAN>&nbsp;<SPAN CLASS="ChapNumNum">3</SPAN><A NAME="57124"></A></TD></TR></TABLE><TABLE DIR="LTR" SUMMARY="Chapter Title" ABBR="ChapTitle" WIDTH="100%" BORDER="0"><COLGROUP SPAN="1" WIDTH="100%"><COL ID="1" SPAN="1" WIDTH="100%"><TR><TD ALIGN="right" CLASS="ChapTitle"><HR SIZE=7 NOSHADE><A NAME="pgfId-3034"></A><A NAME="74138"></A>Structure of the Java Card Virtual Machine</TD></TR></TABLE><P CLASS="Paragraph"><A NAME="pgfId-643"></A>The specification of the Java Card virtual machine is in many ways quite similar to that of the Java virtual machine. This similarity is of course intentional, as the design of the Java Card virtual machine was based on that of the Java virtual machine. Rather than reiterate all the details of this specification which are shared with that of the Java virtual machine, this chapter will mainly refer to its counterpart in <I CLASS="Title">The Java Virtual Machine Specification, 2nd Edition</I>, providing new information only where the Java Card virtual machine differs.</P><H2 CLASS="Head1"><A NAME="pgfId-645"></A><DIV><HR ALIGN=left SIZE=6 WIDTH=15% noshade></DIV>3.1	<A NAME="marker-6891"></A><A NAME="91374"></A>Data Types and Values</H2><P CLASS="Paragraph"><A NAME="pgfId-647"></A>The Java Card virtual machine supports the same two kinds of data types as the Java virtual machine: <EM CLASS="Emphasis">primitive types</EM><A NAME="marker-6892"></A> and <EM CLASS="Emphasis">reference types</EM><A NAME="marker-6893"></A>. Likewise, the same two kinds of values are used: <EM CLASS="Emphasis">primitive values</EM><A NAME="marker-6894"></A> and <EM CLASS="Emphasis">reference values</EM><A NAME="marker-6895"></A>.</P><P CLASS="Paragraph"><A NAME="pgfId-7296"></A>The primitive data types supported by the Java Card virtual machine are the <EM CLASS="Emphasis">numeric types</EM><A NAME="marker-7295"></A>, the <EM CLASS="Emphasis">boolean type</EM>, and the <KBD CLASS="Filename-Command">returnAddress</KBD> type. The numeric types consist only of these types:</P><UL><LI CLASS="Bullet1"><A NAME="pgfId-7299"></A><KBD CLASS="Filename-Command">byte</KBD><A NAME="marker-7298"></A>, whose values are 8-bit signed two's complement integers</LI><P CLASS="Linebreak"></P><LI CLASS="Bullet1-"><A NAME="pgfId-653"></A><KBD CLASS="Filename-Command">short</KBD><A NAME="marker-6899"></A>, whose values are 16-bit signed two's complement integers</LI><P CLASS="Linebreak"></P></UL><P CLASS="Paragraph"><A NAME="pgfId-655"></A>Some Java Card virtual machine implementations may also support an additional integral type:</P><UL><LI CLASS="Bullet1"><A NAME="pgfId-6485"></A><KBD CLASS="Filename-Command">int</KBD><A NAME="marker-6900"></A>, whose values are 32-bit signed two's complement integers</LI><P CLASS="Linebreak"></P></UL><P CLASS="Paragraph"><A NAME="pgfId-6491"></A>Support for the <A NAME="marker-6901"></A><A NAME="marker-6902"></A>boolean type is identical to that in the Java virtual machine. The value 1 is used to represent true and the value of 0 is used to represent false.</P><P CLASS="Paragraph"><A NAME="pgfId-6486"></A>Support for <KBD CLASS="Filename-Command">reference</KBD><A NAME="marker-6903"></A> types is identical to that in the Java virtual machine.</P><H2 CLASS="Head1"><A NAME="pgfId-6487"></A><DIV><HR ALIGN=left SIZE=6 WIDTH=15% noshade></DIV>3.2	<A NAME="marker-6904"></A>Words</H2><P CLASS="Paragraph"><A NAME="pgfId-663"></A>The Java Card virtual machine is defined in terms of an abstract storage unit called a <EM CLASS="Emphasis">word</EM>. This specification does not mandate the actual size in bits of a word on a specific platform. A word is large enough to hold a value of type <KBD CLASS="Filename-Command">byte</KBD>, <KBD CLASS="Filename-Command">short</KBD>, <KBD CLASS="Filename-Command">reference</KBD> or <KBD CLASS="Filename-Command">returnAddress</KBD>. Two words are large enough to hold a value of type <KBD CLASS="Filename-Command">int</KBD>.</P><P CLASS="Paragraph"><A NAME="pgfId-665"></A>The actual storage used for values in an implementation is platform-specific. There is enough information present in the descriptor component of a <KBD CLASS="Filename-Command">CAP</KBD> file to allow an implementation to optimize the storage used for values in variables and on the stack.</P><H2 CLASS="Head1"><A NAME="pgfId-667"></A><DIV><HR ALIGN=left SIZE=6 WIDTH=15% noshade></DIV>3.3	<A NAME="marker-6905"></A>Runtime Data Areas</H2><P CLASS="Paragraph"><A NAME="pgfId-669"></A>The Java Card virtual machine can support only a single<A NAME="marker-6906"></A> thread of execution. Any runtime data area in the Java virtual machine which is duplicated on a per-thread basis will have only one global copy in the Java Card virtual machine.</P><P CLASS="Paragraph"><A NAME="pgfId-671"></A>The Java Card virtual machine's <A NAME="marker-6907"></A>heap is not required to be <A NAME="marker-6908"></A>garbage collected. Objects allocated from the heap will not necessarily be reclaimed.</P><P CLASS="Paragraph"><A NAME="pgfId-673"></A>This specification does not include support for native methods, so there are no native method stacks.</P><P CLASS="Paragraph"><A NAME="pgfId-675"></A>Otherwise, the runtime data areas are as documented for the Java virtual machine.</P><H2 CLASS="Head1"><A NAME="pgfId-677"></A><DIV><HR ALIGN=left SIZE=6 WIDTH=15% noshade></DIV>3.4	<A NAME="33311"></A>Contexts</H2><P CLASS="Paragraph"><A NAME="pgfId-4263"></A>Each applet running on a Java Card virtual machine is associated with an execution <EM CLASS="Emphasis">context</EM><A NAME="marker-6909"></A>. The Java Card virtual machine uses the context of the current frame to enforce security policies for inter-applet operations.</P><P CLASS="Paragraph"><A NAME="pgfId-4264"></A>There is a one-to-one mapping between contexts and packages in which applets are defined. An easy way to think of a context is as the runtime equivalent of a package, since Java packages are compile-time constructs and have no direct representation at runtime. As a consequence, all applet instances from the same package will share the same context.</P><P CLASS="Paragraph"><A NAME="pgfId-683"></A>The Java Card Runtime Environment also has its own context. Framework objects execute in this <EM CLASS="Emphasis">Java Card RE context</EM><A NAME="marker-6910"></A>.</P><P CLASS="Paragraph"><A NAME="pgfId-4287"></A>The context of the currently executing method is known as the <EM CLASS="Emphasis">current context</EM><A NAME="marker-6911"></A><A NAME="marker-6913"></A>. Every object in a Java Card virtual machine is owned by a particular context. The <EM CLASS="Emphasis">owning context</EM><A NAME="marker-6912"></A><A NAME="marker-6914"></A> is the context that was current when the object was created.</P><P CLASS="Paragraph"><A NAME="pgfId-4267"></A>When a method in one context successfully invokes a method on an object in another context, the Java Card virtual machine performs a <EM CLASS="Emphasis">context switch</EM><A NAME="marker-6915"></A>. Afterwards the invoked method's context becomes the current context. When the invoked method returns, the current context is switched back to the previous context.</P><H2 CLASS="Head1"><A NAME="pgfId-687"></A><DIV><HR ALIGN=left SIZE=6 WIDTH=15% noshade></DIV>3.5	<A NAME="13656"></A>Frames</H2><P CLASS="Paragraph"><A NAME="pgfId-689"></A>Java Card virtual machine <EM CLASS="Emphasis">frames</EM><A NAME="marker-6916"></A> are very similar to those defined for the Java virtual machine. Each frame has a set of local variables and an operand stack. Frames also contain a reference to a constant pool, but since all constant pools for all classes in a package are merged, the reference is to the constant pool for the current class' package.</P><P CLASS="Paragraph"><A NAME="pgfId-691"></A>Each frame also includes a reference to the context in which the current method is executing.</P><H2 CLASS="Head1"><A NAME="pgfId-693"></A><DIV><HR ALIGN=left SIZE=6 WIDTH=15% noshade></DIV>3.6	Representation of <A NAME="marker-6917"></A>Objects</H2><P CLASS="Paragraph"><A NAME="pgfId-695"></A>The Java Card virtual machine does not mandate a particular internal structure for objects or a particular layout of their contents. However, the core components in a <KBD CLASS="Filename-Command">CAP</KBD> file are defined assuming a default structure for certain runtime structures (such as descriptions of classes), and a default layout for the contents of dynamically allocated objects. Information from the descriptor component of the <KBD CLASS="Filename-Command">CAP</KBD> file can be used to format objects in whatever way an implementation requires.</P><H2 CLASS="Head1"><A NAME="pgfId-697"></A><DIV><HR ALIGN=left SIZE=6 WIDTH=15% noshade></DIV>3.7	Special <A NAME="marker-6918"></A>Initialization Methods</H2><P CLASS="Paragraph"><A NAME="pgfId-7215"></A>The Java Card virtual machine supports <EM CLASS="Emphasis">instance initialization methods</EM><A NAME="marker-7214"></A> exactly as does the Java virtual machine.</P><P CLASS="Paragraph"><A NAME="pgfId-7218"></A>The Java Card virtual machine includes only limited support for <EM CLASS="Emphasis">class</EM><A NAME="marker-7216"></A> or <KBD CLASS="Filename-Command">interface initialization methods</KBD><A NAME="marker-7217"></A>. There is no general mechanism for executing <KBD CLASS="Filename-Command">&lt;clinit&gt;</KBD> methods on a Java Card virtual machine. Instead, a <KBD CLASS="Filename-Command">CAP</KBD> file includes information for initializing class data as defined in <A HREF="JCVM02lang.html#57798" CLASS="XRef">Section 2.2.4.6, Class Initialization</A>. </P><H2 CLASS="Head1"><A NAME="pgfId-703"></A><DIV><HR ALIGN=left SIZE=6 WIDTH=15% noshade></DIV>3.8	<A NAME="marker-6922"></A>Exceptions</H2><P CLASS="Paragraph"><A NAME="pgfId-705"></A>Exception support in the Java Card virtual machine is identical to support for exceptions in the Java virtual machine.</P><H2 CLASS="Head1"><A NAME="pgfId-707"></A><DIV><HR ALIGN=left SIZE=6 WIDTH=15% noshade></DIV>3.9	<A NAME="marker-6923"></A>Binary File Formats</H2><P CLASS="Paragraph"><A NAME="pgfId-709"></A>This specification defines two binary file formats which enable platform-independent development, distribution and execution of Java Card programs.</P><P CLASS="Paragraph"><A NAME="pgfId-711"></A>The CAP file format describes files that contain executable code and can be downloaded and installed onto a Java Card technology-enabled device. A <KBD CLASS="Filename-Command">CAP</KBD> file is produced by a Java Card platform Converter tool, and contains a converted form of an entire package of Java classes. This file format's relationship to the Java Card virtual machine is analogous to the relationship of the <KBD CLASS="Filename-Command">class</KBD> file format to the Java virtual machine.</P><P CLASS="Paragraph"><A NAME="pgfId-713"></A>The <KBD CLASS="Filename-Command">export</KBD> file format describes files that contain the public linking information of Java Card API packages. A package's <KBD CLASS="Filename-Command">export</KBD> file is used when converting client packages of that package.</P><H2 CLASS="Head1"><A NAME="pgfId-715"></A><DIV><HR ALIGN=left SIZE=6 WIDTH=15% noshade></DIV>3.10	<A NAME="marker-6924"></A>Instruction Set Summary</H2><P CLASS="Paragraph"><A NAME="pgfId-717"></A>The Java Card virtual machine instruction set is quite similar to the Java virtual machine instruction set. Individual instructions consist of a one-byte <EM CLASS="Emphasis">opcode</EM><A NAME="marker-6925"></A> and zero or more <EM CLASS="Emphasis">operands</EM><A NAME="marker-6926"></A>. The pseudo-code for the Java Card virtual machine's instruction fetch-decode-execute loop is the same. Multi-byte operand data is also encoded in <EM CLASS="Emphasis">big-endian order</EM><A NAME="marker-6927"></A>.</P><P CLASS="Paragraph"><A NAME="pgfId-719"></A>There are a number of ways in which the Java Card virtual machine instruction set diverges from that of the Java virtual machine. Most of the differences are due to the Java Card virtual machine's more limited support for data types. Another source of divergence is that the Java Card virtual machine is intended to run on 8-bit and 16-bit architectures, whereas the Java virtual machine was designed for a 32-bit architecture. The rest of the differences are all oriented in one way or another toward optimizing the size or performance of either the Java Card virtual machine or Java Card programs. These changes include inlining constant pool data directly in instruction opcodes or operands, adding multiple versions of a particular instruction to deal with different datatypes, and creating composite instructions for operations on the current object.</P><H3 CLASS="Head2"><A NAME="pgfId-721"></A>3.10.1	<A NAME="marker-6928"></A>Types and the <A NAME="marker-6929"></A>Java Card Virtual Machine</H3><P CLASS="Paragraph"><A NAME="pgfId-9346"></A>The Java Card virtual machine supports only a subset of the types supported by the Java virtual machine. This subset is described in <A HREF="JCVM02lang.html#45905" CLASS="XRef">Chapter 2</A>. Type support is reflected in the instruction set, as instructions encode the data types on which they operate.</P><P CLASS="Paragraph"><A NAME="pgfId-725"></A>Given that the Java Card virtual machine supports fewer types than the Java virtual machine, there is an opportunity for better support for smaller data types. Lack of support for large numeric data types frees up space in the instruction set. This extra instruction space has been used to directly support arithmetic operations on the short data type.</P><P CLASS="Paragraph"><A NAME="pgfId-727"></A>Some of the extra instruction space has also been used to optimize common operations. Type information is directly encoded in field access instructions, rather than being obtained from an entry in the constant pool.</P><P CLASS="Paragraph"><A NAME="pgfId-729"></A><A HREF="JCVM03structVM.html#26431" CLASS="XRef">TABLE 3-1</A> summarizes the type support in the instruction set of the Java Card virtual machine. Only instructions that exist for multiple types are listed. Wide and composite forms of instructions are not listed either. A specific instruction, with type information, is built by replacing the T in the instruction template in the opcode column by the letter representing the type in the type column. If the type column for some instruction is blank, then no instruction exists supporting that operation on that type. For instance, there is a load instruction for type <KBD CLASS="Filename-Command">short</KBD>, <EM CLASS="Emphasis">sload</EM>, but there is no load instruction for type <KBD CLASS="Filename-Command">byte</KBD>.</P><BR><TABLE CLASS="Titled" BORDER=1 BORDERCOLORLIGHT="#FFFFFF" BORDERCOLORDARK="#000000" CELLPADDING=5 CELLSPACING=0 DIR="LTR"><CAPTION CLASS="TableCaption"><A NAME="pgfId-6130"> </A> TABLE 3-1 	 <A NAME="26431"> </A> Type Support in the Java Card Virtual Machine Instruction Set </CAPTION><THEAD><TR><TH SCOPE="COL" ROWSPAN="1" COLSPAN="1" BGCOLOR="#CCCCCC"><P CLASS="TableHead"><A NAME="pgfId-6140"></A>opcode</P></TH><TH SCOPE="COL" ROWSPAN="1" COLSPAN="1" BGCOLOR="#CCCCCC"><P CLASS="TableHead"><A NAME="pgfId-6142"></A>byte</P></TH><TH SCOPE="COL" ROWSPAN="1" COLSPAN="1" BGCOLOR="#CCCCCC"><P CLASS="TableHead"><A NAME="pgfId-6144"></A>short</P></TH><TH SCOPE="COL" ROWSPAN="1" COLSPAN="1" BGCOLOR="#CCCCCC"><P CLASS="TableHead"><A NAME="pgfId-6146"></A>int</P></TH><TH SCOPE="COL" ROWSPAN="1" COLSPAN="1" BGCOLOR="#CCCCCC"><P CLASS="TableHead"><A NAME="pgfId-6148"></A>reference</P></TH></TR></THEAD><TBODY><TR><TD SCOPE="ROW" ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6150"></A><EM CLASS="Emphasis">Tspush</EM></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6152"></A><EM CLASS="Emphasis">bspush</EM></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6154"></A><EM CLASS="Emphasis">sspush</EM></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6156"></A>&nbsp;</P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6158"></A>&nbsp;</P></TD></TR><TR><TD SCOPE="ROW" ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6160"></A><EM CLASS="Emphasis">Tipush</EM></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6162"></A><EM CLASS="Emphasis">bipush</EM></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6164"></A><EM CLASS="Emphasis">sipush</EM></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6166"></A><EM CLASS="Emphasis">iipush</EM></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6168"></A>&nbsp;</P></TD></TR><TR><TD SCOPE="ROW" ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6170"></A><EM CLASS="Emphasis">Tconst</EM></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6172"></A>&nbsp;</P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6174"></A><EM CLASS="Emphasis">sconst</EM></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6176"></A><EM CLASS="Emphasis">iconst</EM></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6178"></A><EM CLASS="Emphasis">aconst</EM></P></TD></TR><TR><TD SCOPE="ROW" ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6180"></A><EM CLASS="Emphasis">Tload</EM></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6182"></A>&nbsp;</P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6184"></A><EM CLASS="Emphasis">sload</EM></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6186"></A><EM CLASS="Emphasis">iload</EM></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6188"></A><EM CLASS="Emphasis">aload</EM></P></TD></TR><TR><TD SCOPE="ROW" ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6190"></A><EM CLASS="Emphasis">Tstore</EM></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6192"></A>&nbsp;</P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6194"></A><EM CLASS="Emphasis">sstore</EM></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6196"></A><EM CLASS="Emphasis">istore</EM></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6198"></A><EM CLASS="Emphasis">astore</EM></P></TD></TR><TR><TD SCOPE="ROW" ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6200"></A><EM CLASS="Emphasis">Tinc</EM></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6202"></A>&nbsp;</P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6204"></A><EM CLASS="Emphasis">sinc</EM></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6206"></A><EM CLASS="Emphasis">iinc</EM></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6208"></A>&nbsp;</P></TD></TR><TR><TD SCOPE="ROW" ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6210"></A><EM CLASS="Emphasis">Taload</EM></P></TD><TD ROWSPAN="1" COLSPAN="1"><P CLASS="TableText"><A NAME="pgfId-6212"></A><EM CLASS="Emphasis">baload</EM>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -