diff --git a/emul_inst_decipher.c b/emul_inst_decipher.c index 2e39d0e..b05c629 100644 --- a/emul_inst_decipher.c +++ b/emul_inst_decipher.c @@ -99,11 +99,11 @@ void emul_inst_dec_update_pc() { int pc; // プログラムカウンタ取得 - pc = emul_reg_get(emul_inst_dec_get_operand("$pc\0")); + pc = emul_reg_get(Spc); // 呼び出すアドレスにプログラムカウンタを設定 emul_inst_dec_set_pc(pc); // プログラムカウンタをインクリメント - emul_reg_set(emul_inst_dec_get_operand("$pc\0"), pc+1); + emul_reg_set(Spc, pc+1); } int emul_inst_dec_load(const char *filename) { diff --git a/emul_inst_exec.c b/emul_inst_exec.c index eda7199..7c8dafa 100644 --- a/emul_inst_exec.c +++ b/emul_inst_exec.c @@ -232,7 +232,7 @@ emul_inst_dec_get_token(label); emul_inst_exec_pseudo_label( label, - emul_reg_get(emul_inst_dec_get_operand("$pc\0")) + emul_reg_get(Spc) ); break; //case RUN: @@ -405,7 +405,7 @@ int emul_inst_exec_run() { // step関数を終わるまで呼び出せばよい int exit_code; - while ( exit_code = emul_inst_exec_step() ); + while ( (exit_code = emul_inst_exec_step()) ); return exit_code; } diff --git a/emul_reg.h b/emul_reg.h index c29eac5..bd5cd73 100644 --- a/emul_reg.h +++ b/emul_reg.h @@ -1,7 +1,7 @@ #ifndef EMUL_REG__ #define EMUL_REG__ -#define REG_SIZE 31 +#define REG_SIZE 32 typedef enum { // 翻訳のための擬似オペランド OPERAND_DECODE_ERROR, diff --git a/test_asm/test.asm b/test_asm/test.asm index ebf1e94..8ac6197 100644 --- a/test_asm/test.asm +++ b/test_asm/test.asm @@ -9,3 +9,10 @@ :REGCAT $s0 slti $t0 $s0 10 bne $t0 $zero LOOP + +addi $s0 $zero 0 +:LABEL LOOP1 +addi $s0 $s0 1 +:REGCAT $s0 +slti $t0 $s0 10 +bne $t0 $zero LOOP1