0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

概要

mindが、謎なので調べてみた。
練習問題やってみた。

練習問題

mindで俺cpuのアセンブラから、mindのソースコードを生成せよ。

サンプルコード




コードは 40個の 文字列。
コード数は 変数。
スタック1は 文字列。
スタック2は 文字列。
スタック3は 文字列。

アセンブラとは
 コード(コード数)に 入れ
 コード数に 1を 加えて コード数に 入れる
。

俺コンパイルとは
 文字列1は 文字列
 単語1は 文字列
 単語2は 文字列
 数1は 変数
 数2は 変数
 合否は 変数
 nは 変数
 スタック1に 「」を 入れ
 スタック2に 「」を 入れ
 スタック3に 「」を 入れ
 nに 1を 入れ

「メインとは」を 表示し 改行し
「 数aは 変数」を 表示し 改行し
 ここから
  もし nが コード数より 大きい
  ならば
   終り
  つぎに
※  コード(n)を 一行表示する
  コード(n)を 文字列1に 入れ
  文字列1から 単語切り出し 単語1に 入れ
  文字列1から 単語切り出し 単語2に 入れ

  もし 単語1が 「」に 等しい文字列
  ならば
   打ち切り
  つぎに

  もし 単語1が 「set」に 等しい文字列
  ならば
   「 数」を 表示し
   単語2を 表示し
   「に 入れ」を 表示し 改行し
  つぎに

  もし 単語1が 「loop」に 等しい文字列
  ならば
  「 ここから」を 表示し 改行し
  つぎに

  もし 単語1が 「get」に 等しい文字列
  ならば
   スタック3に スタック2を 入れ
   スタック2に スタック1を 入れ
   スタック1に 単語2を 入れる
  つぎに

  もし 単語1が 「>」に 等しい文字列
  ならば
   スタック3に スタック2を 入れ
   スタック2に スタック1を 入れ
   スタック1に 「>」を 入れる
  つぎに

  もし 単語1が 「if」に 等しい文字列
  ならば
  「 もし 数」を 表示し
  スタック3を 表示し
  「が 」を 表示し
  スタック2を 表示し
  「より 大きい」を 表示し 改行し
  「 ならば」を 表示し 改行し
  「  終り」を 表示し 改行し
  「 さもなければ」を 表示し 改行し
  スタック1に 「」を 入れ
  スタック2に 「」を 入れ
  スタック3に 「」を 入れ
  つぎに

  もし 単語1が 「out」に 等しい文字列
  ならば
   「  数」を 表示し
   スタック1を 表示し
   "を 数値表示し 「 」を 表示し"を 表示し 改行し
   スタック1に スタック2を 入れ
   スタック2に スタック3を 入れ
  つぎに

  もし 単語1が 「+」に 等しい文字列
  ならば
   「  数」を 表示し
   スタック2を 表示し
   「に 」を 表示し
   スタック1を 表示し
   「を 加え」を 表示し 改行し
   スタック1に スタック3を 入れ
  つぎに

  単語1を 数値変換し 数1と 合否に 入れ
  もし 合否が 真?
  ならば
   「 」を 表示し
   単語1を 表示し
   「をつみ 」を 表示し
   スタック2に スタック1を 入れ
   スタック1に 単語1を 入れる
  つぎに

  nに 1を 加えて nに 入れる
 繰り返す
「 つぎに」を 表示し 改行し
「 繰り返し」を 表示し 改行し
「。」を 表示し 改行し
。

メインとは
 コードを クリアし
 1を コード数に 入れ
 「1     」を アセンブラし
 「set  a」を アセンブラし
 「loop  」を アセンブラし
 「get  a」を アセンブラし
 「100   」を アセンブラし
 「>     」を アセンブラし
 「if end」を アセンブラし
 「get  a」を アセンブラし
 「out   」を アセンブラし
 「get  a」を アセンブラし
 「1     」を アセンブラし
 「+     」を アセンブラし
 「set  a」を アセンブラし
 「jmp loop」を アセンブラし
 俺コンパイルする
。





実行結果

メインとは
 数aは 変数
 1をつみ  数aに 入れ
 ここから
 100をつみ  もし 数aが 100より 大きい
 ならば
  終り
 さもなければ
  数aを 数値表示し 「 」を 表示し
 1をつみ   数aに 1を 加え
 数aに 入れ
 つぎに
 繰り返し
。

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?