+#include "disassemble.h"
+
+/**
+ * @brief 機械コードの出力列
+ */
+int codecol = 32;
+
+/**
+ * @brief ファイルストリームから1ワードを取得する
+ *
+ * @return 取得した1ワード
+ *
+ * @param stream ファイルストリーム
+ */
+WORD fgetword(FILE *stream);
+
+/**
+ * @brief ファイルストリームを1ワード戻す
+ *
+ * @return なし
+ *
+ * @param stream ファイルストリーム
+ */
+void fungetword(FILE *stream);
+
+/**
+ * @brief ファイルストリームから、値が0の連続するWORD数を返す
+ *
+ * @return 値が0の連続するWORD数
+ *
+ * @param stream ファイルストリーム
+ */
+WORD zero_data_cnt(FILE *stream);
+
+/**
+ * @brief 機械コードをコメントとして標準出力へ出力する
+ *
+ * @return なし
+ *
+ * @param ascol アセンブラの列位置
+ * @param pradr 次に実行すべき命令語の先頭アドレス
+ * @param wordc ワード値の数
+ * @param wordv ワード値の配列
+ */
+void disassemble_puts_code(int ascol, WORD pradr, int wordc, WORD wordv[]);
+
+/**
+ * @brief 種類がR_ADRまたはR_ADR_Xのコマンドを逆アセンブルし、標準出力へ出力する
+ *
+ * @return なし
+ *
+ * @param cmdtype コマンドの種類
+ * @param *cmdname コマンドの名前
+ * @param word ワード値
+ * @param adr アドレス値
+ * @param pradr 次に実行すべき命令語の先頭アドレス
+ */
+void disassemble_cmd_adr_x(CMDTYPE cmdtype, const char *cmdname, WORD word, WORD adr, WORD pradr);
+
+/**
+ * @brief 種類がR1_R2またはR_のコマンドを逆アセンブルし、標準出力へ出力する
+ *
+ * @return なし
+ *
+ * @param cmdtype コマンドの種類
+ * @param *cmdname コマンドの名前
+ * @param word ワード値
+ * @param pradr 次に実行すべき命令語の先頭アドレス
+ */
+void disassemble_cmd_r(CMDTYPE cmdtype, const char *cmdname, WORD word, WORD pradr);
+
+/**
+ * @brief DCコマンドを逆アセンブルし、標準出力へ出力する
+ *
+ * @return なし
+ *
+ * @param word ワード値
+ * @param pradr 次に実行すべき命令語の先頭アドレス
+ */
+void disassemble_dc(WORD word, WORD pradr);
+
+void disassemble_puts_code(int ascol, WORD pradr, int wordc, WORD wordv[])
+{
+ int i;
+ for(i = 0; i < codecol-ascol; i++){
+ fprintf(stdout, " ");
+ }
+ if(wordc == 1) {
+ fprintf(stdout, "; #%04X: #%04X", pradr, wordv[0]);
+ } else if(wordc == 2) {
+ fprintf(stdout, "; #%04X: #%04X #%04X", pradr, wordv[0], wordv[1]);
+ }
+}
+void disassemble_cmd_adr_x(CMDTYPE cmdtype, const char *cmdname, WORD word, WORD adr, WORD pradr)