<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
		<id>https://is.zng.info/wiki/experiment/index.php?action=history&amp;feed=atom&amp;title=%E5%91%BD%E4%BB%A4%E3%82%BB%E3%83%83%E3%83%88%28%E3%83%89%E3%83%A9%E3%83%95%E3%83%88%29</id>
		<title>命令セット(ドラフト) - 変更履歴</title>
		<link rel="self" type="application/atom+xml" href="https://is.zng.info/wiki/experiment/index.php?action=history&amp;feed=atom&amp;title=%E5%91%BD%E4%BB%A4%E3%82%BB%E3%83%83%E3%83%88%28%E3%83%89%E3%83%A9%E3%83%95%E3%83%88%29"/>
		<link rel="alternate" type="text/html" href="https://is.zng.info/wiki/experiment/index.php?title=%E5%91%BD%E4%BB%A4%E3%82%BB%E3%83%83%E3%83%88(%E3%83%89%E3%83%A9%E3%83%95%E3%83%88)&amp;action=history"/>
		<updated>2026-04-07T04:30:06Z</updated>
		<subtitle>このウィキのこのページに関する変更履歴</subtitle>
		<generator>MediaWiki 1.25.2</generator>

	<entry>
		<id>https://is.zng.info/wiki/experiment/index.php?title=%E5%91%BD%E4%BB%A4%E3%82%BB%E3%83%83%E3%83%88(%E3%83%89%E3%83%A9%E3%83%95%E3%83%88)&amp;diff=11&amp;oldid=prev</id>
		<title>Maintenance script: ページの作成:「== 重要な変更点(予定) ==    以降の内容でほぼ本番命令セットの仕様として決定です(問題があれば速やかに変更します)。当情報...」</title>
		<link rel="alternate" type="text/html" href="https://is.zng.info/wiki/experiment/index.php?title=%E5%91%BD%E4%BB%A4%E3%82%BB%E3%83%83%E3%83%88(%E3%83%89%E3%83%A9%E3%83%95%E3%83%88)&amp;diff=11&amp;oldid=prev"/>
				<updated>2015-11-29T06:11:34Z</updated>
		
		<summary type="html">&lt;p&gt;ページの作成:「== 重要な変更点(予定) ==    以降の内容でほぼ本番命令セットの仕様として決定です(問題があれば速やかに変更します)。当情報...」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 重要な変更点(予定) ==&lt;br /&gt;
&lt;br /&gt;
以降の内容でほぼ本番命令セットの仕様として決定です(問題があれば速やかに変更します)。当情報を利用してコンパイラを開発していただけるとありがたいです。&lt;br /&gt;
&lt;br /&gt;
* レジスタ本数を64本に増強します。&lt;br /&gt;
* 即値分岐命令を追加します。&lt;br /&gt;
* 次の命令と依存関係がなければ、浮動小数点命令がパイプライン処理されるようになります。したがって、浮動小数点命令と&amp;#039;&amp;#039;&amp;#039;続く命令に依存関係がないように配置するとパフォーマンスが向上します。&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* 遅延LOAD命令を、パイプライン処理に対応させ、即時LOAD命令に改正しますが、制約上、引き続き&amp;#039;&amp;#039;&amp;#039;次の命令と依存関係がないように配置するとパフォーマンスが向上します。&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;3/7: &amp;#039;&amp;#039;&amp;#039;ALU最適化のためfunctを変更しました。&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;3/7: &amp;#039;&amp;#039;&amp;#039;GET/PUT命令について注釈を追加しました。&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;3/7: &amp;#039;&amp;#039;&amp;#039;擬似ニーモニックを修正しました。&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;3/12: &amp;#039;&amp;#039;&amp;#039;所要クロックを追加しました。&lt;br /&gt;
&lt;br /&gt;
== フォーマット ==&lt;br /&gt;
命令は、次の3種類の形式のいずれかとする。&lt;br /&gt;
&lt;br /&gt;
* 0形 : op(4) | rs(6) | rt(6) | rd(6) | 00 | fnct(8)&lt;br /&gt;
* 1形 : op(4) | rs(6) | rt(6) | oft(16)&lt;br /&gt;
* 2形 : op(4) | rs(6) | opt(6) | oft(16)&lt;br /&gt;
&lt;br /&gt;
r0はゼロレジスタ、r1はスタックポインタ、r2はヒープポインタ、r31はリンクレジスタとして使用するが、実体はすべて汎用レジスタであり、実際にはどのレジスタをリンクレジスタにすることもできるし、ゼロレジスタにゼロでない数を代入することもできる。&lt;br /&gt;
&lt;br /&gt;
アセンブリ表記(以降S表記)での指定順は、0タイプ二項演算ではop rd rs rt、同じく0タイプ一項演算ではop rd rs、0タイプシフト演算bではop rd rs shft、1タイプ演算および保存復元ではop rt rs oft、1タイプ条件分岐ではop rs rt oft、2タイプ条件分岐ではop rs opt oftの順とする(アセンブリにしたときに直感的に理解しやすい順序にしたつもり)。&lt;br /&gt;
&lt;br /&gt;
== リスト ==&lt;br /&gt;
=== op一覧 ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|op  ||C表記                        ||S表記||所要&lt;br /&gt;
|-&lt;br /&gt;
|0000||rt = rs + oft;               ||ADDI ||1&lt;br /&gt;
|-&lt;br /&gt;
|0001||rd = fnct(rs, rt);           ||-    ||-&lt;br /&gt;
|-&lt;br /&gt;
|0010||rt = *(rs + oft);            ||LOAD ||hit:2,miss:5(pipelined)&lt;br /&gt;
|-&lt;br /&gt;
|0011||*(rs + oft) = rt;            ||STORE||1&lt;br /&gt;
|-&lt;br /&gt;
|0100||if (rs == opt) pc += oft + 1;||BEI  ||true:3,false:1&lt;br /&gt;
|-&lt;br /&gt;
|0101||if (rs != opt) pc += oft + 1;||BNEI ||true:3,false:1&lt;br /&gt;
|-&lt;br /&gt;
|0110||if (rs &amp;lt; opt) pc += oft + 1; ||BLI  ||true:3,false:1&lt;br /&gt;
|-&lt;br /&gt;
|0111||if (rs &amp;gt;= opt) pc += oft + 1;||BGEI ||true:3,false:1&lt;br /&gt;
|-&lt;br /&gt;
|1000||if (rs == rt) pc += oft + 1; ||BE   ||true:3,false:1&lt;br /&gt;
|-&lt;br /&gt;
|1001||if (rs != rt) pc += oft + 1; ||BNE  ||true:3,false:1&lt;br /&gt;
|-&lt;br /&gt;
|1010||if (rs &amp;lt; rt) pc += oft + 1;  ||BL   ||true:3,false:1&lt;br /&gt;
|-&lt;br /&gt;
|1011||if (rs &amp;gt;= rt) pc += oft + 1; ||BGE  ||true:3,false:1&lt;br /&gt;
|-&lt;br /&gt;
|1100||if (rs &amp;lt; rt) pc += oft + 1;  ||FBL  ||true:3,false:1&lt;br /&gt;
|-&lt;br /&gt;
|1101||if (rs &amp;gt;= rt) pc += oft + 1; ||FBGE ||true:3,false:1&lt;br /&gt;
|-&lt;br /&gt;
|1110||rt = pc + 1, pc += oft + 1;  ||JAL  ||3&lt;br /&gt;
|-&lt;br /&gt;
|1111||pc = rs + oft;               ||JR   ||3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== fnct一覧 ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|fnct     ||C表記           ||S表記||意味            　||所要&lt;br /&gt;
|-&lt;br /&gt;
|00000000 ||rd = rs + rt;   ||ADD  ||整数加算          ||1&lt;br /&gt;
|-&lt;br /&gt;
|00010000 ||rd = rs - rt;   ||SUB  ||整数減算          ||1&lt;br /&gt;
|-&lt;br /&gt;
|001[shft]||rd = rs &amp;lt;&amp;lt; shft;||SLL  ||左算術シフト      ||1&lt;br /&gt;
|-&lt;br /&gt;
|010[shft]||rd = rs &amp;gt;&amp;gt; shft;||SRR  ||右算術シフト      ||1&lt;br /&gt;
|-&lt;br /&gt;
|01100000 ||rd = rs &amp;amp; rt;   ||AND  ||論理積            ||1&lt;br /&gt;
|-&lt;br /&gt;
|01100100 ||rd = rs | rt;   ||OR   ||論理和            ||1&lt;br /&gt;
|-&lt;br /&gt;
|01101000 ||rd = rs ^ rt;   ||XOR  ||排他的論理和      ||1&lt;br /&gt;
|-&lt;br /&gt;
|01101100 ||rd = ~rs ^ rt;  ||XNOR ||否定排他的論理和  ||1&lt;br /&gt;
|-&lt;br /&gt;
|01110000 ||rd = getc();    ||GET  ||入力              ||1&lt;br /&gt;
|-&lt;br /&gt;
|01111000 ||rd = putc(rs);  ||PUT  ||出力              ||1&lt;br /&gt;
|-&lt;br /&gt;
|10000000 ||rd = rs + rt;   ||FADD ||浮動小数点数加算  ||3(pipelined)&lt;br /&gt;
|-&lt;br /&gt;
|10010000 ||rd = rs - rt;   ||FSUB ||浮動小数点数減算  ||3(pipelined)&lt;br /&gt;
|-&lt;br /&gt;
|10100000 ||rd = rs * rt;   ||FMUL ||浮動小数点数乗算  ||3(pipelined)&lt;br /&gt;
|-&lt;br /&gt;
|11000000 ||rd = 1 / rs;    ||FINV ||浮動小数点数逆数  ||4(pipelined)&lt;br /&gt;
|-&lt;br /&gt;
|11100000 ||rd = sqrt(rs);  ||FSQRT||浮動小数点数平方根||4(pipelined)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;注意: GET/PUT命令は、EOF(-1)を返す場合があります。&amp;#039;&amp;#039;&amp;#039;これは、バッファアンダーラン・オーバーフローを意味します。&amp;#039;&amp;#039;&amp;#039;負値を返した場合は、命令を繰り返してください。&amp;#039;&amp;#039;&amp;#039;つまり、次の例のように使ってください。&lt;br /&gt;
&lt;br /&gt;
 repeat:&lt;br /&gt;
         PUT r29 r19&lt;br /&gt;
         BLI r29 0 repeat&lt;br /&gt;
&lt;br /&gt;
=== 擬似mnemonic一覧 ===&lt;br /&gt;
&lt;br /&gt;
次のニーモニックは、プロセッサは対応しないが、アセンブラが変換する。&lt;br /&gt;
&lt;br /&gt;
*NOT&lt;br /&gt;
*FDIV (非推奨)&lt;br /&gt;
*SUBI&lt;br /&gt;
*BGI&lt;br /&gt;
*BLEI&lt;br /&gt;
*BG&lt;br /&gt;
*BLE&lt;br /&gt;
*FBE&lt;br /&gt;
*FBNE&lt;br /&gt;
*FBG&lt;br /&gt;
*FBLE&lt;br /&gt;
*JUMP&lt;br /&gt;
*NOP&lt;br /&gt;
*HLT&lt;br /&gt;
&lt;br /&gt;
== スモークテスト ==&lt;br /&gt;
 ; フィボナッチ数列を求める&lt;br /&gt;
 ; r0 = ゼロレジスタ, r1 = スタックポインタ&lt;br /&gt;
 ; r2 = 引数値 n, r3 = 関数値 fib(n)&lt;br /&gt;
 	rd r2&lt;br /&gt;
 	jal fib&lt;br /&gt;
 	wr r3&lt;br /&gt;
 	srr r5 r3 8&lt;br /&gt;
 	wr r5&lt;br /&gt;
 	srr r5 r3 16&lt;br /&gt;
 	wr r5&lt;br /&gt;
 	srr r5 r3 24&lt;br /&gt;
 	wr r5&lt;br /&gt;
 hlt:	&lt;br /&gt;
 	add r3 r3 r0&lt;br /&gt;
 	add r3 r3 r0&lt;br /&gt;
 	add r3 r3 r0&lt;br /&gt;
 	add r3 r3 r0&lt;br /&gt;
 	add r3 r3 r0&lt;br /&gt;
 	add r3 r3 r0&lt;br /&gt;
 	add r3 r3 r0&lt;br /&gt;
 	add r3 r3 r0&lt;br /&gt;
 	add r3 r3 r0&lt;br /&gt;
 	add r3 r3 r0&lt;br /&gt;
 	add r3 r3 r0&lt;br /&gt;
 	add r3 r3 r0&lt;br /&gt;
 	add r3 r3 r0&lt;br /&gt;
 	add r3 r3 r0&lt;br /&gt;
 	add r3 r3 r0&lt;br /&gt;
 	add r3 r3 r0&lt;br /&gt;
 	be r0 r0 hlt&lt;br /&gt;
 fib:	&lt;br /&gt;
 	bl r2 3 one&lt;br /&gt;
 	addi r2 r2 -1&lt;br /&gt;
 	addi r5 r2 -1&lt;br /&gt;
 	addi r1 r1 -2&lt;br /&gt;
 	store r5 r1 0&lt;br /&gt;
 	store r31 r1 1&lt;br /&gt;
 	jal fib&lt;br /&gt;
 	load r2 r1 0&lt;br /&gt;
 	store r3 r1 0&lt;br /&gt;
 	jal fib&lt;br /&gt;
 	load r5 r1 0&lt;br /&gt;
 	load r31 r1 1&lt;br /&gt;
 	addi r1 r1 2&lt;br /&gt;
 	add r3 r3 r5&lt;br /&gt;
 	jr r31&lt;br /&gt;
 one:	&lt;br /&gt;
 	addi r3 r0 1&lt;br /&gt;
 	jr r31&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>	</entry>

	</feed>