From 80d4fc2d9a7022362c88cac0adbddd32ce7a3a62 Mon Sep 17 00:00:00 2001 From: j8takagi Date: Wed, 27 Apr 2011 00:20:54 +0900 Subject: [PATCH] =?utf8?q?=E3=83=88=E3=83=BC=E3=82=AF=E3=83=B3=E5=8F=96?= =?utf8?q?=E5=BE=97=E3=81=AE=E3=83=AB=E3=83=BC=E3=83=81=E3=83=B3=E3=82=92?= =?utf8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- include/struct.h | 43 +++++++++++++++++++------------------------ src/token.c | 3 ++- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/include/struct.h b/include/struct.h index e862786..05ff5f9 100644 --- a/include/struct.h +++ b/include/struct.h @@ -47,42 +47,37 @@ extern SYSTEM *sys; /** * COMET II 命令 - * 命令タイプは、オペランドにより6種類に分類 + * 命令タイプは、オペランドにより5種類に分類 */ typedef enum { /** - * オペランド数2または3。命令語長2 - * 第1オペランド: 汎用レジスタ - * 第2オペランド: アドレス - * 第3オペランド: 指標レジスタ + * オペランド数2または3 + * - 第1オペランド: 汎用レジスタ。必須 + * - 第2オペランド: アドレス。必須 + * - 第3オペランド: 指標レジスタとして用いる汎用レジスタ。任意 */ - R_ADR_X = 010, + R_ADR_X = 01, /** - * オペランド数2または3。。命令語長2 - * 第1オペランド: 汎用レジスタ - * 第2オペランド: アドレスに格納されている内容 - * 第3オペランド: 指標レジスタ + * オペランド数2 + * - 第1オペランド: 汎用レジスタ。必須 + * - 第2オペランド: 汎用レジスタ。必須 */ - R1_R2 = 020, + R1_R2 = 02, /** - * オペランド数1または2。命令語長1 - * 第1オペランド: アドレス - * 第2オペランド: 指標レジスタ + * オペランド数1または2 + * - 第1オペランド: アドレス。必須 + * - 第2オペランド: 指標レジスタとして用いる汎用レジスタ。任意 */ - ADR_X = 030, + ADR_X = 03, /** - * オペランド数1。命令語長1 - * 第1オペランド: 汎用レジスタ + * オペランド数1 + * - 第1オペランド: 汎用レジスタ。必須 */ - R_ = 040, + R_ = 04, /** - * オペランドなし。命令語長1 + * オペランドなし */ - NONE = 0, - /** - * COMET II命令以外 - */ - NOTCMD = 077, + NONE = 00, } CMDTYPE; /** diff --git a/src/token.c b/src/token.c index de29faf..dac982f 100644 --- a/src/token.c +++ b/src/token.c @@ -119,7 +119,7 @@ CMDLINE *linetok(const char *line) break; } } - if(*tokens != '\0') { + if(*tokens != '\n' && *tokens != '\0') { p = tokens; cmdl = malloc_chk(sizeof(CMDLINE), "cmdl"); /* ラベルの取得。行の先頭が空白またはタブの場合、ラベルは空 */ @@ -143,6 +143,7 @@ CMDLINE *linetok(const char *line) if(cmdl->label != NULL) { /* ラベルが定義されていて命令がない場合はエラー */ setcerr(105, NULL); /* no command in the line */ } + FREE(cmdl); } else { /* 命令の取得 */ sepp = p + strcspn(p, " \t\n"); -- 2.18.0