From: j8takagi Date: Sun, 28 Feb 2010 08:03:16 +0000 (+0900) Subject: コメントの修正 X-Git-Tag: v0.1~8 X-Git-Url: https://j8takagi.net/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5f2f1bc616559d5bfd6dd557bf7d2396c2b8aa72;p=YACASL2.git コメントの修正 --- diff --git a/src/exec.c b/src/exec.c index 17ac66b..8f91d48 100644 --- a/src/exec.c +++ b/src/exec.c @@ -310,14 +310,17 @@ void exec() if(cerrno > 0) { goto execerr; } + /* traceオプション指定時、レジスタを出力 */ if(execmode.trace){ fprintf(stdout, "#%04X: Register::::\n", PR); dspregister(); } + /* dumpオプション指定時、メモリを出力 */ if(execmode.dump){ fprintf(stdout, "#%04X: Memory::::\n", PR); dumpmemory(); } + /* どちらかのオプション指定時、改行を出力 */ if(execmode.dump || execmode.trace) { fprintf(stdout, "\n"); } @@ -328,6 +331,7 @@ void exec() val = GR[x_r2]; } else if(cmdtype == R_ADR_X || cmdtype == R_ADR_X_ || cmdtype == ADR_X) { + assert(x_r2 < REGSIZE); /* 実効アドレス(値または値が示す番地)を取得 */ val = memory[PR++]; /* 指標アドレスを加算 */ @@ -351,7 +355,7 @@ void exec() /* 命令の実行 */ switch(op) { - case 0x0: /* NOP */ + case 0x0: /* NOP */ break; case 0x1000: /* LD */ setfr(GR[r_r1] = val); @@ -362,87 +366,87 @@ void exec() case 0x1200: /* LAD */ GR[r_r1] = val; break; - case 0x2000: /* ADDA */ + case 0x2000: /* ADDA */ GR[r_r1] = adda(GR[r_r1], val); break; - case 0x2100: /* SUBA */ + case 0x2100: /* SUBA */ GR[r_r1] = suba(GR[r_r1], val); break; - case 0x2200: /* ADDL */ + case 0x2200: /* ADDL */ GR[r_r1] = addl(GR[r_r1], val); break; - case 0x2300: /* SUBL */ + case 0x2300: /* SUBL */ GR[r_r1] = subl(GR[r_r1], val); break; - case 0x3000: /* AND */ + case 0x3000: /* AND */ setfr(GR[r_r1] &= val); break; - case 0x3100: /* OR */ + case 0x3100: /* OR */ setfr(GR[r_r1] |= val); break; - case 0x3200: /* XOR */ + case 0x3200: /* XOR */ setfr(GR[r_r1] ^= val); break; - case 0x4000: /* CPA */ + case 0x4000: /* CPA */ cpa(GR[r_r1], val); break; - case 0x4100: /* CPL */ + case 0x4100: /* CPL */ cpl(GR[r_r1], val); break; - case 0x5000: /* SLA */ + case 0x5000: /* SLA */ GR[r_r1] = sla(GR[r_r1], val); break; - case 0x5100: /* SRA */ + case 0x5100: /* SRA */ GR[r_r1] = sra(GR[r_r1], val); break; - case 0x5200: /* SLL */ + case 0x5200: /* SLL */ GR[r_r1] = sll(GR[r_r1], val); break; - case 0x5300: /* SRL */ + case 0x5300: /* SRL */ GR[r_r1] = srl(GR[r_r1], val); break; - case 0x6100: /* JMI */ + case 0x6100: /* JMI */ if((FR & SF) > 0) { PR = val; } break; - case 0x6200: /* JNZ */ + case 0x6200: /* JNZ */ if((FR & ZF) == 0) { PR = val; } break; - case 0x6300: /* JZE */ + case 0x6300: /* JZE */ if((FR & ZF) > 0) { PR = val; } break; - case 0x6400: /* JUMP */ + case 0x6400: /* JUMP */ PR = val; break; - case 0x6500: /* JPL */ + case 0x6500: /* JPL */ if((FR & (SF | ZF)) == 0) { PR = val; } break; - case 0x6600: /* JOV */ + case 0x6600: /* JOV */ if((FR & OF) > 0) { PR = val; } break; - case 0x7000: /* PUSH */ + case 0x7000: /* PUSH */ assert(SP > endptr && SP <= memsize); memory[--SP] = val; break; - case 0x7100: /* POP */ + case 0x7100: /* POP */ assert(SP > endptr && SP <= memsize); GR[r_r1] = memory[SP++]; break; - case 0x8000: /* CALL */ + case 0x8000: /* CALL */ assert(SP > endptr && SP <= memsize); memory[--SP] = PR; PR = val; break; - case 0x8100: /* RET */ + case 0x8100: /* RET */ assert(SP > endptr && SP <= memsize); if(SP == memsize) { return; @@ -450,7 +454,7 @@ void exec() PR = memory[SP++]; break; } - case 0xf000: /* SVC */ + case 0xF000: /* SVC */ switch(val) { case 0x0: /* EXIT */