1 #ifndef YACASL2_ASSEMBLE_INCLUDED
2 #define YACASL2_ASSEMBLE_INCLUDED
12 LABELSIZE = 8, /**<ラベルの最大文字数 */
13 OPDSIZE = 40, /**<オペラントの最大数。CASL IIシミュレータの制限 */
20 LINESIZE = 1024, /**<行の最大文字数 */
21 TOKENSIZE = 256, /**<トークンの最大文字数 */
28 bool src; /**<ソースを表示する場合はtrue */
29 bool label; /**<ラベル表を表示する場合はtrue */
30 bool onlylabel; /**<ラベル表を表示して終了する場合はtrue */
31 bool asdetail; /**<アセンブラ詳細結果を表示する場合はtrue */
32 bool onlyassemble; /**<アセンブルだけを行う場合はtrue */
38 * アセンブル時の、現在およびリテラルのアドレスとプログラム入口名
41 WORD ptr; /**<現在のアドレス */
42 WORD lptr; /**<リテラル(=付きの値)のアドレス */
43 char *prog; /**<他のプログラムで参照する入口名 */
62 ASCMDID cmdid; /**<アセンブル命令のID */
63 int opdc_min; /**<最小オペランド数 */
64 int opdc_max; /**<最大オペランド数 */
65 char *cmd; /**<コマンド名 */
82 MACROCMDID cmdid; /**<マクロ命令のID */
83 int opdc_min; /**<最小オペランド数 */
84 int opdc_max; /**<最大オペランド数 */
85 char *cmd; /**<コマンド名 */
92 char *prog; /**<プログラム */
93 char *label; /**<ラベル */
100 typedef struct _LABELTAB {
101 struct _LABELTAB *next; /**<リスト次項目へのポインタ */
102 char *prog; /**<プログラム名 */
103 char *label; /**<ラベル名 */
104 WORD adr; /**<アドレス */
125 void addcerrlist_label();
128 * プログラム名とラベルに対応するアドレスをラベル表から検索する
130 WORD getlabel(const char *prog, const char *label);
133 * プログラム名、ラベル、アドレスをラベル表に追加する
135 bool addlabel(const char *prog, const char *label, WORD word);
151 int opdc; /**<オペランド数 */
152 char *opdv[OPDSIZE]; /**<オペランド配列 */
159 char *label; /**<ラベル */
160 char *cmd; /**<コマンド */
161 OPD *opd; /**<オペランド */
167 void addcerrlist_tok();
170 * 空白またはタブで区切られた1行から、トークンを取得する
172 CMDLINE *linetok(const char *line);
177 void addcerrlist_assemble();
181 * 1回目ではラベルを登録し、2回目ではラベルからアドレスを読み込む
182 * アセンブル完了時はtrue、エラー発生時はfalseを返す
184 bool assemblefile(const char *file, PASS pass);
187 * 引数で指定したファイルにアセンブル結果を書込
189 void outassemble(const char *file);
191 #endif /* YACASL2_ASSEMBLE_INCLUDEDの終端 */