- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!高機能MINICPU
*配列を処理するための命令を追加
*MINICPUの命令セット
!!!ソースコード集
!!MINICPUのVerilog HDL記述
, ,言語,説明
,[[各種定数宣言|defsm.v]],Verilog HDL,MINICPUで用いる各種定数の定義
,[[算術論理演算回路|alu.v]],Verilog HDL,MINICPUの算術論理演算回路(TINYCPUと同じ)
,[[ステートマシン|statef.v]],Verilog HDL,MINICPUのステーマシン(TINYCPU-Fと同じ)
,[[スタック|stackm.v]],Verilog HDL,MINICPUのデータスタック
,[[メモリ|dpram.v]],Verilog HDL,MINICPUのデュアルポートブロックRAM
,[[MINICPU|minicpu.v]],Verilog HDL,MINICPU本体
!!アセンブラとコンパイラ
MINICPUをターゲットとするアセンブラとコンパイラ
, ,言語,説明
,[[アセンブラ|miniasm]],Perl,MINICPU用アセンブラ
,[[字句解析|tinyc.l]],Flex,コンパイラの字句解析(TINYCと同じ)
,[[構文解析|minic.y]],Bison,MINICPU用コンパイラの構文解析
,[[メモリ形式への変換|mac2mem]],Perl,オブジェクト形式をメモリ形式に変換
!!C言語風プログラムのコンパイル・アセンブル例
フィボナッチ数列を配列に求め,それを順に出力するプログラム.
配列の宣言は,サイズを指定するのではなく,要素を並べる.
同じ値が繰り返す場合は,後ろに[]をつけて,繰り返し回数を指定する.
例えば,次のC言語風プログラムでは,配列aの要素は,1が10回繰り返したあと0が続く大きさ11の配列となる.
!!C言語風プログラム
while(a[i]){
a[i]=a[i-1]+a[i-2];
i=i+1;
}
i=0;
while(a[i]){
out(a[i]);
i=i+1;
}
halt;
int i=2;
int a={1[10],0};
!!コンパイル結果
_001T:
PUSHI a
PUSH i
ADD
LD
JZ _001F
PUSHI a
PUSH i
ADD
PUSHI a
PUSH i
PUSHI 1
SUB
ADD
LD
PUSHI a
PUSH i
PUSHI 2
SUB
ADD
LD
ADD
ST
PUSH i
PUSHI 1
ADD
POP i
JMP _001T
_001F:
PUSHI 0
POP i
_002T:
PUSHI a
PUSH i
ADD
LD
JZ _002F
PUSHI a
PUSH i
ADD
LD
OUT
PUSH i
PUSHI 1
ADD
POP i
JMP _002T
_002F:
HALT
i: 2
a: 1
1
1
1
1
1
1
1
1
1
0
!!アセンブル結果
*** LABEL LIST ***
_001F 01B
_001T 000
_002F 02C
_002T 01D
a 02E
i 02D
*** MACHINE PROGRAM ***
_001T:
000:102E PUSHI a
001:202D PUSH i
002:F000 ADD
003:7000 LD
004:501B JZ _001F
005:102E PUSHI a
006:202D PUSH i
007:F000 ADD
008:102E PUSHI a
009:202D PUSH i
00A:1001 PUSHI 1
00B:F001 SUB
00C:F000 ADD
00D:7000 LD
00E:102E PUSHI a
00F:202D PUSH i
010:1002 PUSHI 2
011:F001 SUB
012:F000 ADD
013:7000 LD
014:F000 ADD
015:8000 ST
016:202D PUSH i
017:1001 PUSHI 1
018:F000 ADD
019:302D POP i
01A:4000 JMP _001T
_001F:
01B:1000 PUSHI 0
01C:302D POP i
_002T:
01D:102E PUSHI a
01E:202D PUSH i
01F:F000 ADD
020:7000 LD
021:502C JZ _002F
022:102E PUSHI a
023:202D PUSH i
024:F000 ADD
025:7000 LD
026:E000 OUT
027:202D PUSH i
028:1001 PUSHI 1
029:F000 ADD
02A:302D POP i
02B:401D JMP _002T
_002F:
02C:0000 HALT
02D:0002 i: 2
02E:0001 a: 1
02F:0001 1
030:0001 1
031:0001 1
032:0001 1
033:0001 1
034:0001 1
035:0001 1
036:0001 1
037:0001 1
038:0000 0
!!拡張したコンパイラ
条件演算子(?:)、複合代入(+=,-=,*=,>>=,<<=,&=,^=,|=)をサポート
,[[字句解析|tinyc.l]],Flex,コンパイラの字句解析(TINYCと同じ)
,[[構文解析|minic2.y]],Bison,拡張コンパイラの構文解析