トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

高機能MINICPU

高機能MINICPU

ソースコード集

MINICPUのVerilog HDL記述

  言語 説明
各種定数宣言 Verilog HDL MINICPUで用いる各種定数の定義
算術論理演算回路 Verilog HDL MINICPUの算術論理演算回路(TINYCPUと同じ)
ステートマシン Verilog HDL MINICPUのステーマシン(TINYCPU-Fと同じ)
スタック Verilog HDL MINICPUのデータスタック
メモリ Verilog HDL MINICPUのデュアルポートブロックRAM
MINICPU Verilog HDL MINICPU本体

アセンブラとコンパイラ

MINICPUをターゲットとするアセンブラとコンパイラ
  言語 説明
アセンブラ Perl MINICPU用アセンブラ
字句解析 Flex コンパイラの字句解析(TINYCと同じ)
構文解析 Bison MINICPU用コンパイラの構文解析
メモリ形式への変換 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

最終更新時間:2008年07月03日 09時05分28秒