+WORD getadr(const char *prog, const char *str, PASS pass);
+
+/**
+ * @brief 汎用レジスタを表す文字列 からレジスタ番号を返す
+ *
+ * @brief 文字列が汎用レジスタを表さない場合は、0xFFFFを返す
+ *
+ * is_xがtrueの場合は指標レジスタとなり、GR0が指定された場合はCOMET IIの仕様によりエラー発生
+ *
+ * @return レジスタ番号[0-7]を表すWORD値
+ *
+ * @param *str 汎用レジスタを表す文字列。「GR0」「GR1」・・・「GR7」のいずれか
+ * @param is_x trueの場合は指標レジスタ
+ */
+WORD getgr(const char *str, bool is_x);
+
+/**
+ * @brief リテラルを返す
+ *
+ * リテラルには、10進定数/16進定数/文字定数が含まれる
+ *
+ * @param *str リテラル。定数の前に等号(=)をつけて記述される
+ * @param pass アセンブラが何回目かを表す数
+ */
+WORD getliteral(const char *str, PASS pass);
+
+/**
+ * @brief アドレス値をメモリに書き込む
+ *
+ * @return なし
+ *
+ * @param word アドレス値
+ * @param adr アドレス
+ * @param pass アセンブラが何回目かを表す数
+ */
+void writememory(WORD word, WORD adr, PASS pass);
+
+/**
+ * @brief 文字をメモリに書き込む
+ *
+ * @return なし
+ *
+ * @param *str アドレスを表す文字列。リテラル/10進定数/16進定数/アドレス定数が含まれる
+ * @param literal リテラルの場合はtrue
+ * @param pass アセンブラが何回目かを表す数
+ */
+void writestr(const char *str, bool literal, PASS pass);
+
+/**
+ * @brief DC命令を書込
+ *
+ * @return なし
+ *
+ * @param str アドレスを表す文字列。10進定数/16進定数/アドレス定数が含まれる
+ * @param pass アセンブラが何回目かを表す数
+ */
+void writedc(const char *str, PASS pass);
+
+/**
+ * @brief アセンブラ命令STARTの処理
+ * @relatesalso Casl2cmd
+ *
+ * @return なし
+ *
+ * @param *cmdl 1行分のラベル・コマンド・オペランド
+ * @param pass アセンブラが何回目かを表す数
+ */
+void assemble_start(const CMDLINE *cmdl, PASS pass);
+
+/**
+ * @brief アセンブラ命令DSの処理
+ * @relatesalso Casl2cmd
+ *
+ * @return なし
+ *
+ * @param *cmdl 1行分のラベル・コマンド・オペランド
+ * @param pass アセンブラが何回目かを表す数
+ */
+void assemble_ds(const CMDLINE *cmdl, PASS pass);
+
+/**
+ * @brief アセンブラ命令ENDの処理
+ * @relatesalso Casl2cmd
+ *
+ * @return なし
+ *
+ * @param *cmdl 1行分のラベル・コマンド・オペランド
+ * @param pass アセンブラが何回目かを表す数
+ */
+void assemble_end(const CMDLINE *cmdl, PASS pass);
+
+/**
+ * @brief アセンブラ命令DCの処理
+ * @relatesalso Casl2cmd
+ *
+ * @return なし
+ *
+ * @param *cmdl 1行分のラベル・コマンド・オペランド
+ * @param pass アセンブラが何回目かを表す数
+ */
+void assemble_dc(const CMDLINE *cmdl, PASS pass);
+
+/**
+ * @brief マクロ命令 "IN IBUF,LEN" をアセンブル
+ *
+ * @code
+ * PUSH 0,GR1
+ * PUSH 0,GR2
+ * LAD GR1,IBUF
+ * LAD GR2,LEN
+ * SVC 1
+ * POP GR2
+ * POP GR1
+ * @endcode
+ * @relatesalso Casl2cmd
+ *
+ *
+ * @return なし
+ *
+ * @param *cmdl 1行分のラベル・コマンド・オペランド
+ * @param pass アセンブラが何回目かを表す数
+ */
+void assemble_in(const CMDLINE *cmdl, PASS pass);
+
+/**
+ * @brief マクロ命令 "OUT OBUF,LEN" をアセンブル
+ *
+ * @code
+ * PUSH 0,GR1
+ * PUSH 0,GR2
+ * LAD GR1,OBUF
+ * LAD GR2,LEN
+ * SVC 2
+ * LAD GR1,=#A
+ * LAD GR2,=1
+ * SVC 2
+ * POP GR2
+ * POP GR1
+ * @endcode
+ * @relatesalso Casl2cmd
+ *
+ * @return なし
+ *
+ * @param *cmdl 1行分のラベル・コマンド・オペランド
+ * @param pass アセンブラが何回目かを表す数
+ */
+void assemble_out(const CMDLINE *cmdl, PASS pass);
+
+/**
+ * @brief マクロ命令 "RPUSH" をメモリに書き込む
+ *
+ * @code
+ * PUSH 0,GR1
+ * PUSH 0,GR2
+ * PUSH 0,GR3
+ * PUSH 0,GR4
+ * PUSH 0,GR5
+ * PUSH 0,GR6
+ * PUSH 0,GR7
+ * @endcode
+ * @relatesalso Casl2cmd
+ *
+ * @return なし
+ *
+ * @param *cmdl 1行分のラベル・コマンド・オペランド
+ * @param pass アセンブラが何回目かを表す数
+ */
+void assemble_rpush(const CMDLINE *cmdl, PASS pass);
+
+/**
+ * @brief マクロ命令 "RPOP" をメモリに書き込む
+ *
+ * @code
+ * POP GR7
+ * POP GR6
+ * POP GR5
+ * POP GR4
+ * POP GR3
+ * POP GR3
+ * POP GR2
+ * POP GR1
+ * @endcode
+ * @relatesalso Casl2cmd
+ *
+ * @return なし
+ *
+ * @param *cmdl 1行分のラベル・コマンド・オペランド
+ * @param pass アセンブラが何回目かを表す数
+ */
+void assemble_rpop(const CMDLINE *cmdl, PASS pass);
+
+/**
+ * @class Casl2cmd
+ * @brief casl2cmdから関数ポインタで呼び出される関数
+ */
+
+/**
+ * @brief アセンブラ言語CASL IIの命令を処理する。
+ *
+ * エラー発生時は、cerrを設定
+ *
+ * @relatesalso Casl2cmd
+ *
+ * @return 命令が表で定義されている場合はtrue、それ以外の場合はfalseを返す
+ *
+ * @param *cmdtbl アセンブラ言語CASL IIの命令表
+ * @param *cmdl 1行分のラベル・コマンド・オペランド
+ * @param pass アセンブルが何回目か
+ */
+bool casl2cmd(CMD *cmdtbl, const CMDLINE *cmdl, PASS pass);
+
+/**
+ * @brief システムCOMET IIの命令をアセンブルする
+ *
+ * @return アセンブル成功時はtrue、失敗時はfalseを返す
+ *
+ * @param *cmdl 1行分のラベル・コマンド・オペランド
+ * @param pass アセンブルが何回目か
+ */
+bool assemble_comet2cmd(const CMDLINE *cmdl, PASS pass);
+
+/**
+ * @brief トークンをアセンブルする
+ *
+ * @return アセンブル成功時はtrue、失敗時はfalseを返す
+ *
+ * @param *cmdl 1行分のラベル・コマンド・オペランド
+ * @param pass アセンブラが何回目かを表す数
+ */
+bool assembletok(const CMDLINE *cmdl, PASS pass);