X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Fassemble.c;h=15d991a43c20d0be5f791ec159a953764569bbb7;hp=bfd15e1feed986bf89c1ad8125e2f0b3b53c7e15;hb=cc884e475afe3f48804b35336e68bce4088be61a;hpb=0dab7eab4cf4b834ba7c4628a334a5f32304c167 diff --git a/src/assemble.c b/src/assemble.c index bfd15e1..15d991a 100644 --- a/src/assemble.c +++ b/src/assemble.c @@ -83,7 +83,9 @@ WORD getadr(const char *prog, const char *str, PASS pass) adr = getint(str); } else { if(pass == SECOND && (adr = getlabel(prog, str)) == 0xFFFF) { - setcerr(103, str); /* label not found */ + if(prog != NULL) { + setcerr(103, str); /* label not found */ + } } } return adr; @@ -299,7 +301,6 @@ bool macrocmd(const CMDLINE *cmdl, PASS pass) return status; } - /* 機械語命令の書込 書込に成功した場合はtrue、それ以外の場合はfalseを返す */ bool cometcmd(const CMDLINE *cmdl, PASS pass) @@ -335,7 +336,7 @@ bool cometcmd(const CMDLINE *cmdl, PASS pass) if((cmd = getcmdcode(cmdl->cmd, R1_R2)) == 0xFFFF) { setcerr(109, cmdl->cmd); /* not command of operand "r1,r2" */ return false; - } + } cmd |= ((r1 << 4) | r2); if(cerrno == 0 && writememory(cmd, ptr++, pass) == true) { status = true; @@ -388,7 +389,8 @@ bool cometcmd(const CMDLINE *cmdl, PASS pass) それ以外の場合は同一プログラム内のラベルを取得 */ if(cmd == 0x8000) { /* CALL命令 */ adr = getadr(NULL, cmdl->opd->opdv[0], pass); - } else { + } + if(cmd != 0x8000 || (pass == SECOND && adr == 0xFFFF)) { adr = getadr(prog, cmdl->opd->opdv[0], pass); } writememory(cmd, ptr++, pass);