696 lines
40 KiB
HTML
696 lines
40 KiB
HTML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
|
|
<!-- generated by to_html.pl from vmcodes.xml -->
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
|
<title>仮想マシン</title>
|
|
<meta name="author" content="W.Dee" />
|
|
<meta http-equiv="Content-Style-Type" content="text/css" />
|
|
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
|
<link href="browser.css" type="text/css" rel="stylesheet" title="吉里吉里関連リファレンス用標準スタイル" />
|
|
<link href="mailto:[email protected]" rev="Made" />
|
|
<link href="index.html" target="_top" rel="Start" title="トップページ" />
|
|
</head>
|
|
<body>
|
|
<h1><a id="id461" name="id461">TJS2 VM</a>
|
|
</h1><div class="para"><div>
|
|
TJS2 は、スクリプトをいったん仮想マシン (TJS2 <a id="id462" name="id462" class="targanchor"><dfn>VM</dfn></a>) 用のバイナリコードにコンパイルしてから実行します。<br />
|
|
例外が発生したときやダンプを行ったときにこの TJS2 VM のコードの逆アセンブル結果が表示されるので、この仮想マシンについて簡単に説明します。<br />
|
|
</div></div>
|
|
<h1><a id="id463" name="id463">命令コード</a>
|
|
</h1><div class="para"><div>
|
|
TJS2 VM は関数やプロパティなどの実行単位ごとに独立していて、ある一つの関数が他の関数と命令コード空間、レジスタ空間、フラグ、定数領域を共有することはありません。<br />
|
|
命令ポインタ (ip) は関数などの頭でかならず 0 から始まります。<br />
|
|
命令コードを人間が読みやすい簡単な名前で表したものをニーモニックと呼びます。</div></div>
|
|
<h1><a id="id464" name="id464">レジスタ</a>
|
|
</h1><div class="para"><div>
|
|
TJS2 VM のレジスタは、ニーモニック中では %(数字) で表されます。数字は負の数になることもあり得ます。レジスタ数に制限はありません。ローカル変数や計算中の一時的な値などはすべてレジスタに記録されます。主記憶 (メインメモリ) やスタックは存在しません。<br />
|
|
レジスタが表す値は TJS2 のいわゆる変数と同じで、整数、実数、オブジェクト、文字列、オクテット列、void を表すことができます。<br />
|
|
現バージョンでは、レジスタ %0 は常に void になります。レジスタ %-1 は this になります。レジスタ %-2 は <a id="id465" name="id465" class="targanchor"><dfn>this proxy</dfn></a> と呼ばれる特殊なオブジェクトで、このオブジェクトに対してメンバ参照を行うと、まず this を見て、そこに無ければ global を見に行くという動作をします。this proxy は global レベルの実行単位には存在しません。関数などの引数は %-3 や %-4 などのレジスタにあらかじめ格納された状態で実行が開始されます。<br />
|
|
このような、あらかじめ用途が決まっていたり、実行前に値があらかじめ入っているレジスタ以外の値は、実行開始の時点では不定です。<br />
|
|
</div></div>
|
|
<h1><a id="id466" name="id466">フラグ</a>
|
|
</h1><div class="para"><div>
|
|
TJS2 VM にはフラグが1つだけあり、比較結果が格納されます。フラグは真か偽の値のみをとります。<br />
|
|
</div></div>
|
|
<h1><a id="id467" name="id467">定数領域</a>
|
|
</h1><div class="para"><div>
|
|
TJS2 VM の定数領域は定数を記憶する場所で、ニーモニック中では *(数字) で表されます。定数領域は読み出し専用で、レジスタへこの定数領域の値を移すには const 命令が用いられます。また、関数名やプロパティ名など、名前でオブジェクトのメンバをアクセスするための「名前」もこの定数領域に格納されます。<br />
|
|
</div></div>
|
|
<h1><a id="id468" name="id468">VM ニーモニック一覧</a>
|
|
</h1><div class="para"><div>
|
|
オペランドに <code class="inlinecode">%obj.*name</code> や <code class="inlinecode">%obj.%name</code> の形式を持つものがありますが、これらはオブジェクトのメンバ参照を伴うものです。<br />
|
|
オペランドに <code class="inlinecode">%obj.*name</code> の形式を持つものは直接参照を行うもので、レジスタ <code class="inlinecode">%obj</code> で表されたオブジェクトから <code class="inlinecode">*name</code> で表された名前をもったメンバを参照します。<br />
|
|
オペランドに <code class="inlinecode">%obj.%name</code> の形式を持つものは間接参照を行うもので、レジスタ <code class="inlinecode">%obj</code> で表されたオブジェクトから <code class="inlinecode">%name</code> で表された名前をもったメンバを参照します。<br />
|
|
このような命令のニーモニックは d または pd (direct / property direct) や i または pi (indirect / property indirect) のサフィックスをもちます。<br />
|
|
サフィックスに p を持つ物は、対象レジスタのプロパティハンドラを動作させます (単項 '*' 演算子の動作をします)。<br />
|
|
<br />
|
|
<br />
|
|
<dl>
|
|
<dt><a id="id469" name="id469" class="targanchor"><dfn>nop</dfn></a><br />
|
|
(no operation)</dt>
|
|
<dd> 何もしません。</dd>
|
|
|
|
<dt><a id="id470" name="id470" class="targanchor"><dfn>const</dfn></a><br />
|
|
(copy constant value)</dt>
|
|
<dd>書式: <code class="inlinecode">const %dest, *src</code><br />
|
|
<br />
|
|
*src で示された定数領域の値を %dest で示されたレジスタにコピーします。</dd>
|
|
|
|
<dt><a id="id471" name="id471" class="targanchor"><dfn>cp</dfn></a><br />
|
|
(copy register)</dt>
|
|
<dd>書式: <code class="inlinecode">cp %dest, %src</code><br />
|
|
<br />
|
|
%src で示されたレジスタの値を %dest で示されたレジスタにコピーします。</dd>
|
|
|
|
<dt><a id="id472" name="id472" class="targanchor"><dfn>cl</dfn></a><br />
|
|
(clear register)</dt>
|
|
<dd>書式: <code class="inlinecode">cl %dest</code><br />
|
|
<br />
|
|
%dest で示されたレジスタを void にします。</dd>
|
|
|
|
<dt><a id="id473" name="id473" class="targanchor"><dfn>ccl</dfn></a><br />
|
|
(clear register)</dt>
|
|
<dd>書式: <code class="inlinecode">ccl %low-%high</code><br />
|
|
<br />
|
|
%low で示されたレジスタ から %high で示されたレジスタの範囲をすべて void にします。</dd>
|
|
|
|
<dt><a id="id474" name="id474" class="targanchor"><dfn>tt</dfn></a><br />
|
|
(test true)</dt>
|
|
<dd>書式: <code class="inlinecode">tt %reg</code><br />
|
|
<br />
|
|
%reg で示されたレジスタが真を表していればフラグを真に、偽を表していればフラグを偽に設定します。</dd>
|
|
|
|
<dt><a id="id475" name="id475" class="targanchor"><dfn>tf</dfn></a><br />
|
|
(test false)</dt>
|
|
<dd>書式: <code class="inlinecode">tf %reg</code><br />
|
|
<br />
|
|
tt と逆で、%reg で示されたレジスタが真を表していればフラグを偽に、偽を表していればフラグを真に設定します。</dd>
|
|
|
|
<dt><a id="id476" name="id476" class="targanchor"><dfn>ceq</dfn></a><br />
|
|
(compare equal)</dt>
|
|
<dd>書式: <code class="inlinecode">ceq %reg1, %reg2</code><br />
|
|
<br />
|
|
%reg1 と %reg2 が通常比較 ( == 演算子の動作 ) で一致すればフラグを真、そうでなければ偽に設定します。</dd>
|
|
|
|
<dt><a id="id477" name="id477" class="targanchor"><dfn>cdeq</dfn></a><br />
|
|
(compare distinct equal)</dt>
|
|
<dd>書式: <code class="inlinecode">cdeq %reg1, %reg2</code><br />
|
|
<br />
|
|
%reg1 と %reg2 が識別比較 ( === 演算子の動作 ) で一致すればフラグを真、そうでなければ偽に設定します。</dd>
|
|
|
|
<dt><a id="id478" name="id478" class="targanchor"><dfn>clt</dfn></a><br />
|
|
(compare littler than)</dt>
|
|
<dd>書式: <code class="inlinecode">clt %reg1, %reg2</code><br />
|
|
<br />
|
|
%reg1 > %reg2 ならばフラグを真、そうでなければ偽に設定します。</dd>
|
|
|
|
<dt><a id="id479" name="id479" class="targanchor"><dfn>cgt</dfn></a><br />
|
|
(compare greater than)</dt>
|
|
<dd>書式: <code class="inlinecode">cgt %reg1, %reg2</code><br />
|
|
<br />
|
|
%reg1 < %reg2 ならばフラグを真、そうでなければ偽に設定します。</dd>
|
|
|
|
<dt><a id="id480" name="id480" class="targanchor"><dfn>setf</dfn></a><br />
|
|
(set flag)</dt>
|
|
<dd>書式: <code class="inlinecode">setf %dest</code><br />
|
|
<br />
|
|
フラグが真ならば %dest を真 (整数非0) に、偽ならば偽 (整数0) に設定します。</dd>
|
|
|
|
<dt><a id="id481" name="id481" class="targanchor"><dfn>setnf</dfn></a><br />
|
|
(set not flag)</dt>
|
|
<dd>書式: <code class="inlinecode">setnf %dest</code><br />
|
|
<br />
|
|
setf と逆で、フラグが偽ならば %dest を真 (整数非0) に、真ならば偽 (整数0) に設定します。</dd>
|
|
|
|
<dt><a id="id482" name="id482" class="targanchor"><dfn>lnot</dfn></a><br />
|
|
(logical not)</dt>
|
|
<dd>書式: <code class="inlinecode">lnot %reg</code><br />
|
|
<br />
|
|
%reg の真偽を逆にします。</dd>
|
|
|
|
<dt><a id="id483" name="id483" class="targanchor"><dfn>nf</dfn></a><br />
|
|
(not flag)</dt>
|
|
<dd>書式: <code class="inlinecode">nf</code><br />
|
|
<br />
|
|
フラグの真偽を逆にします。</dd>
|
|
|
|
<dt><a id="id484" name="id484" class="targanchor"><dfn>jf</dfn></a><br />
|
|
(jump if flag)</dt>
|
|
<dd>書式: <code class="inlinecode">jf ip</code><br />
|
|
<br />
|
|
フラグが真ならば ip にジャンプします。</dd>
|
|
|
|
<dt><a id="id485" name="id485" class="targanchor"><dfn>jnf</dfn></a><br />
|
|
(jump if not flag)</dt>
|
|
<dd>書式: <code class="inlinecode">jnf ip</code><br />
|
|
<br />
|
|
フラグが偽ならば ip にジャンプします。</dd>
|
|
|
|
<dt><a id="id486" name="id486" class="targanchor"><dfn>inc</dfn></a>, <a id="id487" name="id487" class="targanchor"><dfn>incpd</dfn></a>, <a id="id488" name="id488" class="targanchor"><dfn>incpi</dfn></a>, <a id="id489" name="id489" class="targanchor"><dfn>incp</dfn></a><br />
|
|
(increment)</dt>
|
|
<dd>書式: <code class="inlinecode">inc %reg</code><br />
|
|
書式: <code class="inlinecode">incpd %res, %obj.*name</code><br />
|
|
書式: <code class="inlinecode">incpi %res, %obj.%name</code><br />
|
|
書式: <code class="inlinecode">incp %res, %propobj</code><br />
|
|
<br />
|
|
%reg または %obj.*name または %obj.%name または %propobj をインクリメントします。<br />
|
|
上記の命令の中で、%res をパラメータに持つ物は、res が 0 で無ければ結果を %res にも格納します。<br />
|
|
</dd>
|
|
|
|
<dt><a id="id490" name="id490" class="targanchor"><dfn>dec</dfn></a>, <a id="id491" name="id491" class="targanchor"><dfn>decpd</dfn></a>, <a id="id492" name="id492" class="targanchor"><dfn>decpi</dfn></a>, <a id="id493" name="id493" class="targanchor"><dfn>decp</dfn></a><br />
|
|
(decrement)</dt>
|
|
<dd>書式: <code class="inlinecode">dec %reg</code><br />
|
|
書式: <code class="inlinecode">decpd %res, %obj.*name</code><br />
|
|
書式: <code class="inlinecode">decpi %res, %obj.%name</code><br />
|
|
書式: <code class="inlinecode">decp %res, %propobj</code><br />
|
|
<br />
|
|
%reg または %obj.*name または %obj.%name または %propobj をデクリメントします。<br />
|
|
上記の命令の中で、%res をパラメータに持つ物は、res が 0 で無ければ結果を %res にも格納します。<br />
|
|
</dd>
|
|
|
|
<dt><a id="id494" name="id494" class="targanchor"><dfn>lor</dfn></a>, <a id="id495" name="id495" class="targanchor"><dfn>lorpd</dfn></a>, <a id="id496" name="id496" class="targanchor"><dfn>lorpi</dfn></a>, <a id="id497" name="id497" class="targanchor"><dfn>lorp</dfn></a><br />
|
|
(logical or)</dt>
|
|
<dd>書式: <code class="inlinecode">lor %dest, %src</code><br />
|
|
<br />
|
|
%dest と %src の論理和をとり、結果を %dest に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">lorpd %res, %obj.*name, %src</code><br />
|
|
<br />
|
|
%obj.*name と %src の論理和をとり、結果を %obj.*name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">lorpi %res, %obj.%name, %src</code><br />
|
|
<br />
|
|
%obj.%name と %src の論理和をとり、結果を %obj.%name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">lorp %res, %propobj, %src</code><br />
|
|
<br />
|
|
%propobj と %src の論理和をとり、結果を %propobj に格納します。<br />
|
|
<br />
|
|
上記の命令の中で、%res をパラメータに持つ物は、res が 0 で無ければ結果を %res にも格納します。<br />
|
|
</dd>
|
|
|
|
<dt><a id="id498" name="id498" class="targanchor"><dfn>land</dfn></a>, <a id="id499" name="id499" class="targanchor"><dfn>landpd</dfn></a>, <a id="id500" name="id500" class="targanchor"><dfn>landpi</dfn></a>, <a id="id501" name="id501" class="targanchor"><dfn>landp</dfn></a><br />
|
|
(logical and)</dt>
|
|
<dd>書式: <code class="inlinecode">land %dest, %src</code><br />
|
|
<br />
|
|
%dest と %src の論理積をとり、結果を %dest に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">landpd %res, %obj.*name, %src</code><br />
|
|
<br />
|
|
%obj.*name と %src の論理積をとり、結果を %obj.*name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">landpi %res, %obj.%name, %src</code><br />
|
|
<br />
|
|
%obj.%name と %src の論理積をとり、結果を %obj.%name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">landp %res, %propobj, %src</code><br />
|
|
<br />
|
|
%propobj と %src の論理積をとり、結果を %propobj に格納します。<br />
|
|
<br />
|
|
上記の命令の中で、%res をパラメータに持つ物は、res が 0 で無ければ結果を %res にも格納します。<br />
|
|
</dd>
|
|
|
|
<dt><a id="id502" name="id502" class="targanchor"><dfn>bor</dfn></a>, <a id="id503" name="id503" class="targanchor"><dfn>borpd</dfn></a>, <a id="id504" name="id504" class="targanchor"><dfn>borpi</dfn></a>, <a id="id505" name="id505" class="targanchor"><dfn>borp</dfn></a><br />
|
|
(bitwise or)</dt>
|
|
<dd>書式: <code class="inlinecode">bor %dest, %src</code><br />
|
|
<br />
|
|
%dest と %src のビットごとの論理和をとり、結果を %dest に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">borpd %res, %obj.*name, %src</code><br />
|
|
<br />
|
|
%obj.*name と %src のビットごとの論理和をとり、結果を %obj.*name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">borpi %res, %obj.%name, %src</code><br />
|
|
<br />
|
|
%obj.%name と %src のビットごとの論理和をとり、結果を %obj.%name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">borp %res, %propobj, %src</code><br />
|
|
<br />
|
|
%propobj と %src のビットごとの論理和をとり、結果を %propobj に格納します。<br />
|
|
<br />
|
|
上記の命令の中で、%res をパラメータに持つ物は、res が 0 で無ければ結果を %res にも格納します。<br />
|
|
</dd>
|
|
|
|
<dt><a id="id506" name="id506" class="targanchor"><dfn>bxor</dfn></a>, <a id="id507" name="id507" class="targanchor"><dfn>bxorpd</dfn></a>, <a id="id508" name="id508" class="targanchor"><dfn>bxorpi</dfn></a>, <a id="id509" name="id509" class="targanchor"><dfn>bxorp</dfn></a><br />
|
|
(bitwise xor)</dt>
|
|
<dd>書式: <code class="inlinecode">bxor %dest, %src</code><br />
|
|
<br />
|
|
%dest と %src のビットごとの排他的論理和をとり、結果を %dest に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">bxorpd %res, %obj.*name, %src</code><br />
|
|
<br />
|
|
%obj.*name と %src のビットごとの排他的論理和をとり、結果を %obj.*name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">bxorpi %res, %obj.%name, %src</code><br />
|
|
<br />
|
|
%obj.%name と %src のビットごとの排他的論理和をとり、結果を %obj.%name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">bxorp %res, %propobj, %src</code><br />
|
|
<br />
|
|
%propobj と %src のビットごとの排他的論理和をとり、結果を %propobj に格納します。<br />
|
|
<br />
|
|
上記の命令の中で、%res をパラメータに持つ物は、res が 0 で無ければ結果を %res にも格納します。<br />
|
|
</dd>
|
|
|
|
<dt><a id="id510" name="id510" class="targanchor"><dfn>band</dfn></a>, <a id="id511" name="id511" class="targanchor"><dfn>bandpd</dfn></a>, <a id="id512" name="id512" class="targanchor"><dfn>bandpi</dfn></a>, <a id="id513" name="id513" class="targanchor"><dfn>bandp</dfn></a><br />
|
|
(bitwise and)</dt>
|
|
<dd>書式: <code class="inlinecode">band %dest, %src</code><br />
|
|
<br />
|
|
%dest と %src のビットごとの論理積をとり、結果を %dest に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">bandpd %res, %obj.*name, %src</code><br />
|
|
<br />
|
|
%obj.*name と %src のビットごとの論理積をとり、結果を %obj.*name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">bandpi %res, %obj.%name, %src</code><br />
|
|
<br />
|
|
%obj.%name と %src のビットごとの論理積をとり、結果を %obj.%name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">bandp %res, %propobj, %src</code><br />
|
|
<br />
|
|
%propobj と %src のビットごとの論理積をとり、結果を %propobj に格納します。<br />
|
|
<br />
|
|
上記の命令の中で、%res をパラメータに持つ物は、res が 0 で無ければ結果を %res にも格納します。<br />
|
|
</dd>
|
|
|
|
<dt><a id="id514" name="id514" class="targanchor"><dfn>sar</dfn></a>, <a id="id515" name="id515" class="targanchor"><dfn>sarpd</dfn></a>, <a id="id516" name="id516" class="targanchor"><dfn>sarpi</dfn></a>, <a id="id517" name="id517" class="targanchor"><dfn>sarp</dfn></a><br />
|
|
(shift arithmetic right)</dt>
|
|
<dd>書式: <code class="inlinecode">sar %dest, %src</code><br />
|
|
<br />
|
|
%dest を %src で表された回数分算術右シフトを行った結果を %dest に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">sarpd %res, %obj.*name, %src</code><br />
|
|
<br />
|
|
%obj.*name を %src で表された回数分算術右シフトを行った結果を %obj.*name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">sarpi %res, %obj.%name, %src</code><br />
|
|
<br />
|
|
%obj.%name を %src で表された回数分算術右シフトを行った結果を %obj.%name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">sarp %res, %propobj, %src</code><br />
|
|
<br />
|
|
%propobj を %src で表された回数分算術右シフトを行った結果を %propobj に格納します。<br />
|
|
<br />
|
|
上記の命令の中で、%res をパラメータに持つ物は、res が 0 で無ければ結果を %res にも格納します。<br />
|
|
</dd>
|
|
|
|
<dt><a id="id518" name="id518" class="targanchor"><dfn>sal</dfn></a>, <a id="id519" name="id519" class="targanchor"><dfn>salpd</dfn></a>, <a id="id520" name="id520" class="targanchor"><dfn>salpi</dfn></a>, <a id="id521" name="id521" class="targanchor"><dfn>salp</dfn></a><br />
|
|
(shift arithmetic left)</dt>
|
|
<dd>書式: <code class="inlinecode">sal %dest, %src</code><br />
|
|
<br />
|
|
%dest を %src で表された回数分算術左シフトを行った結果を %dest に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">salpd %res, %obj.*name, %src</code><br />
|
|
<br />
|
|
%obj.*name を %src で表された回数分算術左シフトを行った結果を %obj.*name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">salpi %res, %obj.%name, %src</code><br />
|
|
<br />
|
|
%obj.%name を %src で表された回数分算術左シフトを行った結果を %obj.%name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">salp %res, %propobj, %src</code><br />
|
|
<br />
|
|
%propobj を %src で表された回数分算術左シフトを行った結果を %propobj に格納します。<br />
|
|
<br />
|
|
上記の命令の中で、%res をパラメータに持つ物は、res が 0 で無ければ結果を %res にも格納します。<br />
|
|
</dd>
|
|
|
|
<dt><a id="id522" name="id522" class="targanchor"><dfn>sr</dfn></a>, <a id="id523" name="id523" class="targanchor"><dfn>srpd</dfn></a>, <a id="id524" name="id524" class="targanchor"><dfn>srpi</dfn></a>, <a id="id525" name="id525" class="targanchor"><dfn>srp</dfn></a><br />
|
|
(shift bitwise right)</dt>
|
|
<dd>書式: <code class="inlinecode">sr %dest, %src</code><br />
|
|
<br />
|
|
%dest を %src で表された回数分ビット右シフトを行った結果を %dest に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">srpd %res, %obj.*name, %src</code><br />
|
|
<br />
|
|
%obj.*name を %src で表された回数分ビット右シフトを行った結果を %obj.*name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">srpi %res, %obj.%name, %src</code><br />
|
|
<br />
|
|
%obj.%name を %src で表された回数分ビット右シフトを行った結果を %obj.%name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">srp %res, %propobj, %src</code><br />
|
|
<br />
|
|
%propobj を %src で表された回数分ビット右シフトを行った結果を %propobj に格納します。<br />
|
|
<br />
|
|
上記の命令の中で、%res をパラメータに持つ物は、res が 0 で無ければ結果を %res にも格納します。<br />
|
|
</dd>
|
|
|
|
<dt><a id="id526" name="id526" class="targanchor"><dfn>add</dfn></a>, <a id="id527" name="id527" class="targanchor"><dfn>addpd</dfn></a>, <a id="id528" name="id528" class="targanchor"><dfn>addpi</dfn></a>, <a id="id529" name="id529" class="targanchor"><dfn>addp</dfn></a><br />
|
|
(add)</dt>
|
|
<dd>書式: <code class="inlinecode">add %dest, %src</code><br />
|
|
<br />
|
|
%dest に %src を加算し、結果を %dest に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">addpd %res, %obj.*name, %src</code><br />
|
|
<br />
|
|
%obj.*name に %src を加算し、結果を %obj.*name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">addpi %res, %obj.%name, %src</code><br />
|
|
<br />
|
|
%obj.%name に %src を加算し、結果を %obj.%name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">addp %res, %propobj, %src</code><br />
|
|
<br />
|
|
%propobj に %src を加算し、結果を %propobj に格納します。<br />
|
|
<br />
|
|
上記の命令の中で、%res をパラメータに持つ物は、res が 0 で無ければ結果を %res にも格納します。<br />
|
|
</dd>
|
|
|
|
<dt><a id="id530" name="id530" class="targanchor"><dfn>sub</dfn></a>, <a id="id531" name="id531" class="targanchor"><dfn>subpd</dfn></a>, <a id="id532" name="id532" class="targanchor"><dfn>subpi</dfn></a>, <a id="id533" name="id533" class="targanchor"><dfn>subp</dfn></a><br />
|
|
(subtract)</dt>
|
|
<dd>書式: <code class="inlinecode">sub %dest, %src</code><br />
|
|
<br />
|
|
%dest から %src を減算し、結果を %dest に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">subpd %res, %obj.*name, %src</code><br />
|
|
<br />
|
|
%obj.*name から %src を減算し、結果を %obj.*name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">subpi %res, %obj.%name, %src</code><br />
|
|
<br />
|
|
%obj.%name から %src を減算し、結果を %obj.%name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">subp %res, %propobj, %src</code><br />
|
|
<br />
|
|
%propobj から %src を減算し、結果を %propobj に格納します。<br />
|
|
<br />
|
|
上記の命令の中で、%res をパラメータに持つ物は、res が 0 で無ければ結果を %res にも格納します。<br />
|
|
</dd>
|
|
|
|
<dt><a id="id534" name="id534" class="targanchor"><dfn>mod</dfn></a>, <a id="id535" name="id535" class="targanchor"><dfn>modpd</dfn></a>, <a id="id536" name="id536" class="targanchor"><dfn>modpi</dfn></a>, <a id="id537" name="id537" class="targanchor"><dfn>modp</dfn></a><br />
|
|
(modulo)</dt>
|
|
<dd>書式: <code class="inlinecode">mod %dest, %src</code><br />
|
|
<br />
|
|
%dest を %src で割ったあまりを %dest に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">modpd %res, %obj.*name, %src</code><br />
|
|
<br />
|
|
%obj.*name を %src で割ったあまりを %obj.*name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">modpi %res, %obj.%name, %src</code><br />
|
|
<br />
|
|
%obj.%name を %src で割ったあまりを %obj.%name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">modp %res, %propobj, %src</code><br />
|
|
<br />
|
|
%propobj を %src で割ったあまりを %propobj に格納します。<br />
|
|
<br />
|
|
上記の命令の中で、%res をパラメータに持つ物は、res が 0 で無ければ結果を %res にも格納します。<br />
|
|
</dd>
|
|
|
|
<dt><a id="id538" name="id538" class="targanchor"><dfn>div</dfn></a>, <a id="id539" name="id539" class="targanchor"><dfn>divpd</dfn></a>, <a id="id540" name="id540" class="targanchor"><dfn>divpi</dfn></a>, <a id="id541" name="id541" class="targanchor"><dfn>divp</dfn></a><br />
|
|
(real divide)</dt>
|
|
<dd>書式: <code class="inlinecode">div %dest, %src</code><br />
|
|
<br />
|
|
%dest を %src で実数除算し、結果を %dest に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">divpd %res, %obj.*name, %src</code><br />
|
|
<br />
|
|
%obj.*name を %src で実数除算し、結果を %obj.*name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">divpi %res, %obj.%name, %src</code><br />
|
|
<br />
|
|
%obj.%name を %src で実数除算し、結果を %obj.%name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">divp %res, %propobj, %src</code><br />
|
|
<br />
|
|
%propobj を %src で実数除算し、結果を %propobj に格納します。<br />
|
|
<br />
|
|
上記の命令の中で、%res をパラメータに持つ物は、res が 0 で無ければ結果を %res にも格納します。<br />
|
|
</dd>
|
|
|
|
<dt><a id="id542" name="id542" class="targanchor"><dfn>idiv</dfn></a>, <a id="id543" name="id543" class="targanchor"><dfn>idivpd</dfn></a>, <a id="id544" name="id544" class="targanchor"><dfn>idivpi</dfn></a>, <a id="id545" name="id545" class="targanchor"><dfn>idivp</dfn></a><br />
|
|
(integer divide)</dt>
|
|
<dd>書式: <code class="inlinecode">idiv %dest, %src</code><br />
|
|
<br />
|
|
%dest を %src で整数除算し、結果を %dest に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">idivpd %res, %obj.*name, %src</code><br />
|
|
<br />
|
|
%obj.*name を %src で整数除算し、結果を %obj.*name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">idivpi %res, %obj.%name, %src</code><br />
|
|
<br />
|
|
%obj.%name を %src で整数除算し、結果を %obj.%name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">divp %res, %propobj, %src</code><br />
|
|
<br />
|
|
%propobj を %src で整数除算し、結果を %propobj に格納します。<br />
|
|
<br />
|
|
上記の命令の中で、%res をパラメータに持つ物は、res が 0 で無ければ結果を %res にも格納します。<br />
|
|
</dd>
|
|
|
|
<dt><a id="id546" name="id546" class="targanchor"><dfn>mul</dfn></a>, <a id="id547" name="id547" class="targanchor"><dfn>mulpd</dfn></a>, <a id="id548" name="id548" class="targanchor"><dfn>mulpi</dfn></a>, <a id="id549" name="id549" class="targanchor"><dfn>mulp</dfn></a><br />
|
|
(multiply)</dt>
|
|
<dd>書式: <code class="inlinecode">mul %dest, %src</code><br />
|
|
<br />
|
|
%dest に %src を乗算し、結果を %dest に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">mulpd %res, %obj.*name, %src</code><br />
|
|
<br />
|
|
%obj.*name に %src を乗算し、結果を %obj.*name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">mulpi %res, %obj.%name, %src</code><br />
|
|
<br />
|
|
%obj.%name に %src を乗算し、結果を %obj.%name に格納します。<br />
|
|
<br />
|
|
書式: <code class="inlinecode">mulp %res, %propobj, %src</code><br />
|
|
<br />
|
|
%propobj に %src を乗算し、結果を %propobj に格納します。<br />
|
|
<br />
|
|
上記の命令の中で、%res をパラメータに持つ物は、res が 0 で無ければ結果を %res にも格納します。<br />
|
|
</dd>
|
|
|
|
<dt><a id="id550" name="id550" class="targanchor"><dfn>bnot</dfn></a><br />
|
|
(bitwise not)</dt>
|
|
<dd>書式: <code class="inlinecode">bnot %reg</code><br />
|
|
<br />
|
|
%reg をビットごとの真偽を逆にし、%reg に再び格納します。</dd>
|
|
|
|
<dt><a id="id551" name="id551" class="targanchor"><dfn>asc</dfn></a><br />
|
|
(make ascii string)</dt>
|
|
<dd>書式: <code class="inlinecode">asc %reg</code><br />
|
|
<br />
|
|
%reg で表された数値に相当する1文字を作成し、それを再び %reg に格納します。</dd>
|
|
|
|
<dt><a id="id552" name="id552" class="targanchor"><dfn>chr</dfn></a><br />
|
|
(cheracter code)</dt>
|
|
<dd>書式: <code class="inlinecode">chr %reg</code><br />
|
|
<br />
|
|
%reg で表された文字列の最初の一文字の文字コードを %reg に格納します。</dd>
|
|
|
|
<dt><a id="id553" name="id553" class="targanchor"><dfn>num</dfn></a><br />
|
|
(number)</dt>
|
|
<dd>書式: <code class="inlinecode">num %reg</code><br />
|
|
<br />
|
|
%reg で表されたレジスタを数値に変換します。</dd>
|
|
|
|
<dt><a id="id554" name="id554" class="targanchor"><dfn>chs</dfn></a><br />
|
|
(change sign)</dt>
|
|
<dd>書式: <code class="inlinecode">chs %reg</code><br />
|
|
<br />
|
|
%reg で表されたレジスタの数値の正負を逆にします。</dd>
|
|
|
|
<dt><a id="id555" name="id555" class="targanchor"><dfn>inv</dfn></a><br />
|
|
(invalidate)</dt>
|
|
<dd>書式: <code class="inlinecode">inv %reg</code><br />
|
|
<br />
|
|
%reg で表されたオブジェクトを無効化します。</dd>
|
|
|
|
<dt><a id="id556" name="id556" class="targanchor"><dfn>chkinv</dfn></a><br />
|
|
(invalidate)</dt>
|
|
<dd>書式: <code class="inlinecode">chkinv %reg</code><br />
|
|
<br />
|
|
%reg で表されたオブジェクトが無効化されていなければ %reg を真に、そうでなければ偽に設定します。</dd>
|
|
|
|
<dt><a id="id557" name="id557" class="targanchor"><dfn>int</dfn></a><br />
|
|
(convert to integer)</dt>
|
|
<dd>書式: <code class="inlinecode">int %reg</code><br />
|
|
<br />
|
|
%reg で表されたレジスタを整数に変換します。</dd>
|
|
|
|
<dt><a id="id558" name="id558" class="targanchor"><dfn>real</dfn></a><br />
|
|
(convert to real)</dt>
|
|
<dd>書式: <code class="inlinecode">real %reg</code><br />
|
|
<br />
|
|
%reg で表されたレジスタを実数に変換します。</dd>
|
|
|
|
<dt><a id="id559" name="id559" class="targanchor"><dfn>string</dfn></a><br />
|
|
(convert to string)</dt>
|
|
<dd>書式: <code class="inlinecode">string %reg</code><br />
|
|
<br />
|
|
%reg で表されたレジスタを文字列に変換します。</dd>
|
|
|
|
<dt><a id="id560" name="id560" class="targanchor"><dfn>octet</dfn></a><br />
|
|
(convert to octet)</dt>
|
|
<dd>書式: <code class="inlinecode">octet %reg</code><br />
|
|
<br />
|
|
%reg で表されたレジスタをオクテット列に変換します。</dd>
|
|
|
|
<dt><a id="id561" name="id561" class="targanchor"><dfn>typeof</dfn></a>, <a id="id562" name="id562" class="targanchor"><dfn>typeofd</dfn></a>, <a id="id563" name="id563" class="targanchor"><dfn>typeofi</dfn></a><br />
|
|
(check type)</dt>
|
|
<dd>書式: <code class="inlinecode">typeof %reg</code><br />
|
|
書式: <code class="inlinecode">typeofd %obj.*name</code><br />
|
|
書式: <code class="inlinecode">typeofi %obj.%name</code><br />
|
|
<br />
|
|
%reg または %obj.*name または %obj.%name の型を調べ、その型を表す文字列を再び %reg または %obj.*name または %obj.%name に格納します。</dd>
|
|
|
|
<dt><a id="id564" name="id564" class="targanchor"><dfn>eval</dfn></a><br />
|
|
(evaluate expression)</dt>
|
|
<dd>書式: <code class="inlinecode">eval %reg</code><br />
|
|
<br />
|
|
%reg で表された文字列を式として実行し、その結果を再び %reg に格納します。</dd>
|
|
|
|
<dt><a id="id565" name="id565" class="targanchor"><dfn>eexp</dfn></a><br />
|
|
(execute expression)</dt>
|
|
<dd>書式: <code class="inlinecode">eexp %reg</code><br />
|
|
<br />
|
|
%reg で表された文字列を式として実行し、結果を捨てます。</dd>
|
|
|
|
<dt><a id="id566" name="id566" class="targanchor"><dfn>chkins</dfn></a><br />
|
|
(check instance)</dt>
|
|
<dd>書式: <code class="inlinecode">chkins %reg, %classname</code><br />
|
|
<br />
|
|
%reg で表されたオブジェクトが、%classname で表されたクラス名のクラスのインスタンスであれば %reg に真を、そうでなければ偽を格納します。</dd>
|
|
|
|
<dt><a id="id567" name="id567" class="targanchor"><dfn>call</dfn></a>, <a id="id568" name="id568" class="targanchor"><dfn>calld</dfn></a>, <a id="id569" name="id569" class="targanchor"><dfn>calli</dfn></a><br />
|
|
(function call)</dt>
|
|
<dd>書式: <code class="inlinecode">call %dest, %func(%arg1, %arg2, %arg3, ...)</code><br />
|
|
書式: <code class="inlinecode">calld %dest, %obj.*name(%arg1, %arg2, %arg3, ...)</code><br />
|
|
書式: <code class="inlinecode">calli %dest, %obj.%name(%arg1, %arg2, %arg3, ...)</code><br />
|
|
<br />
|
|
%func または %obj.*name または %obj.%name で表された関数オブジェクトを、%arg1, %arg2, %arg3 ... の引数で呼び出し、結果を %dest に格納します。%dest が %0 の場合は結果は ( %0 には格納されずに ) 捨てられます。</dd>
|
|
|
|
<dt><a id="id570" name="id570" class="targanchor"><dfn>new</dfn></a><br />
|
|
(create new)</dt>
|
|
<dd>書式: <code class="inlinecode">new %dest, %func(%arg1, %arg2, %arg3, ...)</code><br />
|
|
<br />
|
|
%func で表されたクラスオブジェクトを、%arg1, %arg2, %arg3 ... の引数で構築し、結果を %dest に格納します。</dd>
|
|
|
|
<dt><a id="id571" name="id571" class="targanchor"><dfn>gpd</dfn></a>, <a id="id572" name="id572" class="targanchor"><dfn>gpds</dfn></a><br />
|
|
(get property direct)</dt>
|
|
<dd>書式: <code class="inlinecode">gpd %dest, %obj.*name</code><br />
|
|
書式: <code class="inlinecode">gpds %dest, %obj.*name</code><br />
|
|
<br />
|
|
%obj で表されたオブジェクトから *name で表されたメンバを参照し、その値を %dest にコピーします。<br />
|
|
gpd はプロパティハンドラの呼び出しを伴いますが、gpds はプロパティハンドラを呼び出さず、プロパティオブジェクト自体を取得します。</dd>
|
|
|
|
<dt><a id="id573" name="id573" class="targanchor"><dfn>gpi</dfn></a>, <a id="id574" name="id574" class="targanchor"><dfn>gpis</dfn></a><br />
|
|
(get property indirect)</dt>
|
|
<dd>書式: <code class="inlinecode">gpi %dest, %obj.%name</code><br />
|
|
書式: <code class="inlinecode">gpis %dest, %obj.%name</code><br />
|
|
<br />
|
|
%obj で表されたオブジェクトから %name で表されたメンバを参照し、その値を %dest にコピーします。<br />
|
|
gpi はプロパティハンドラの呼び出しを伴いますが、gpis はプロパティハンドラを呼び出さず、プロパティオブジェクト自体を取得します。</dd>
|
|
|
|
<dt><a id="id575" name="id575" class="targanchor"><dfn>spd</dfn></a>, <a id="id576" name="id576" class="targanchor"><dfn>spde</dfn></a>, <a id="id577" name="id577" class="targanchor"><dfn>spdeh</dfn></a>, <a id="id578" name="id578" class="targanchor"><dfn>spds</dfn></a><br />
|
|
(set property direct)</dt>
|
|
<dd>書式: <code class="inlinecode">spd %obj.*name</code><br />
|
|
書式: <code class="inlinecode">spde %obj.*name</code><br />
|
|
書式: <code class="inlinecode">spdeh %obj.*name</code><br />
|
|
書式: <code class="inlinecode">spds %obj.*name</code><br />
|
|
<br />
|
|
%obj で表されたオブジェクトの *name で表されたメンバに、%src の値を代入します。<br />
|
|
spd は通常のアクセスを行いますが、メンバが存在しない場合は例外が発生します。<br />
|
|
spde はメンバが存在しなければメンバを新規に作成します。<br />
|
|
spdeh はメンバを隠しメンバとして設定します。現バージョンでは意味を持ちません。<br />
|
|
spds はプロパティハンドラを呼び出さず、プロパティオブジェクト自体を置き換えます。</dd>
|
|
|
|
<dt><a id="id579" name="id579" class="targanchor"><dfn>spi</dfn></a>, <a id="id580" name="id580" class="targanchor"><dfn>spie</dfn></a>, <a id="id581" name="id581" class="targanchor"><dfn>spis</dfn></a><br />
|
|
(set property indirect)</dt>
|
|
<dd>書式: <code class="inlinecode">spi %obj.%name</code><br />
|
|
書式: <code class="inlinecode">spie %obj.%name</code><br />
|
|
書式: <code class="inlinecode">spis %obj.%name</code><br />
|
|
<br />
|
|
%obj で表されたオブジェクトの %name で表されたメンバに、%src の値を代入します。<br />
|
|
spi は通常のアクセスを行いますが、メンバが存在しない場合は例外が発生します。<br />
|
|
spie はメンバが存在しなければメンバを新規に作成します。<br />
|
|
spis はプロパティハンドラを呼び出さず、プロパティオブジェクト自体を置き換えます。</dd>
|
|
|
|
<dt><a id="id582" name="id582" class="targanchor"><dfn>getp</dfn></a></dt>
|
|
<dd>書式: <code class="inlinecode">getp %reg, %propobj</code><br />
|
|
<br />
|
|
%propobj で表されたプロパティオブジェクトの getter を動作させ、プロパティの値を得て、%reg に代入します。単項 '*' 演算子の動作を行います。<br />
|
|
</dd>
|
|
<dt><a id="id583" name="id583" class="targanchor"><dfn>setp</dfn></a></dt>
|
|
<dd>書式: <code class="inlinecode">setp %propobj, %reg</code><br />
|
|
<br />
|
|
%propobj で表されたプロパティオブジェクトの setter を動作させ、%reg の値を設定します。単項 '*' 演算子の動作を行います。<br />
|
|
</dd>
|
|
<dt><a id="id584" name="id584" class="targanchor"><dfn>deld</dfn></a>, <a id="id585" name="id585" class="targanchor"><dfn>deli</dfn></a><br />
|
|
(delete member)</dt>
|
|
<dd>書式: <code class="inlinecode">deld %reg, %obj.*name</code><br />
|
|
書式: <code class="inlinecode">deli %reg, %obj.%name</code><br />
|
|
<br />
|
|
%obj で表されたオブジェクトの *name または %name で表されたメンバを削除します。<br />
|
|
削除が成功したかどうかの真偽を %reg に格納しますが、%reg が %0 の場合は結果を捨てます。</dd>
|
|
|
|
<dt><a id="id586" name="id586" class="targanchor"><dfn>srv</dfn></a><br />
|
|
(set result value)</dt>
|
|
<dd>書式: <code class="inlinecode">srv %reg</code><br />
|
|
<br />
|
|
%reg の値を関数の戻り値とします ( 関数の戻り値は %reg で表された値になります )。</dd>
|
|
|
|
<dt><a id="id587" name="id587" class="targanchor"><dfn>ret</dfn></a><br />
|
|
(return)</dt>
|
|
<dd>書式: <code class="inlinecode">ret</code><br />
|
|
<br />
|
|
呼び出し元に戻ります。</dd>
|
|
|
|
<dt><a id="id588" name="id588" class="targanchor"><dfn>entry</dfn></a><br />
|
|
(enter try block)</dt>
|
|
<dd>書式: <code class="inlinecode">entry ip, %reg</code><br />
|
|
<br />
|
|
例外保護されたブロックに入ります。例外が発生した場合、ip にジャンプし、例外オブジェクトを %reg に設定します。</dd>
|
|
|
|
<dt><a id="id589" name="id589" class="targanchor"><dfn>extry</dfn></a><br />
|
|
(exit from try block)</dt>
|
|
<dd>書式: <code class="inlinecode">extry</code><br />
|
|
<br />
|
|
例外保護されたブロックから出ます。</dd>
|
|
|
|
<dt><a id="id590" name="id590" class="targanchor"><dfn>throw</dfn></a><br />
|
|
(throw exception object)</dt>
|
|
<dd>書式: <code class="inlinecode">throw %reg</code><br />
|
|
<br />
|
|
%reg で表されたオブジェクトを例外オブジェクトとして投げます。</dd>
|
|
|
|
<dt><a id="id591" name="id591" class="targanchor"><dfn>chgthis</dfn></a><br />
|
|
(change this)</dt>
|
|
<dd>書式: <code class="inlinecode">chgthis %dest, %src</code><br />
|
|
<br />
|
|
%dest で表されたオブジェクトのクロージャ部分を、%src で示されたオブジェクトに変更します。</dd>
|
|
|
|
<dt><a id="id592" name="id592" class="targanchor"><dfn>global</dfn></a><br />
|
|
(get global object)</dt>
|
|
<dd>書式: <code class="inlinecode">global %dest</code><br />
|
|
<br />
|
|
グローバルオブジェクトを %dest に格納します。</dd>
|
|
|
|
<dt><a id="id593" name="id593" class="targanchor"><dfn>addci</dfn></a><br />
|
|
(add class instance information)</dt>
|
|
<dd>書式: <code class="inlinecode">addci %dest, %info</code><br />
|
|
<br />
|
|
%dest で表されるオブジェクトのクラスインスタンス情報に %info を追加します。</dd>
|
|
<dt><a id="id594" name="id594" class="targanchor"><dfn>regmember</dfn></a><br />
|
|
(register members)</dt>
|
|
<dd>書式: <code class="inlinecode">regmember</code><br />
|
|
<br />
|
|
クラスのメンバを "this" オブジェクトに登録します。内部的に用いられます。</dd>
|
|
|
|
|
|
<dt><a id="id595" name="id595" class="targanchor"><dfn>debugger</dfn></a><br />
|
|
(call debugger)</dt>
|
|
<dd>書式: <code class="inlinecode">debugger</code><br />
|
|
<br />
|
|
実行を中断し、デバッガを呼び出します。現バージョンの実装では、TJS2デバッガではなく、ネイティブなデバッガを呼び出します。</dd>
|
|
</dl></div></div>
|
|
<script type="text/javascript" charset="UTF-8" src="documentid.js" ></script>
|
|
<script type="text/javascript" charset="UTF-8" src="postcontent.js" ></script>
|
|
</body>
|
|
</html>
|