diff --git a/emul_inst_exec.c b/emul_inst_exec.c index 372362b..c4e9a84 100644 --- a/emul_inst_exec.c +++ b/emul_inst_exec.c @@ -59,6 +59,7 @@ int emul_inst_exec_load(char *filename) { int current_pc = emul_reg_get(Spc); + emul_out_std_debug("emul_inst_exec_load..."); // プログラムカウンタを更新する emul_inst_dec_update_pc(); // ロードできないなら終了 @@ -66,6 +67,7 @@ emul_inst_dec_reset_pc(current_pc); // できたらラベルも読み込み emul_inst_exec_load_label(); + emul_out_std_debug("[Finish]\n"); return 1; } @@ -287,7 +289,7 @@ /* :OUTPUT * レジスタの値をASCII文字として画面に出力する,改行はない*/ void emul_inst_exec_pseudo_output(int reg) { - emul_out_std("%c", (char)emul_reg_get(reg)); + emul_out_std("%d", (char)emul_reg_get(reg)); } /* :CRLF diff --git a/emul_label.c b/emul_label.c index bd2d0a5..b466488 100644 --- a/emul_label.c +++ b/emul_label.c @@ -22,6 +22,7 @@ * Return: * -1 : int = エラー * other: int = 見つけた添え字 */ +/* int search_label(const char *labelname, int start_n, int end_n) { int result; if (start_n == end_n) { @@ -35,6 +36,16 @@ else return -1; } } +*/ +int search_label(const char *labelname, int start_n, int end_n) { + int i; + for (i = start_n; i < end_n; i++) { + if ( strcmp(label_dict[i].name, labelname) == 0 ) { + return i; + } + } + return -1; +} /* Summary: * ラベル名からメモリ番地を解決する diff --git a/emul_mem.c b/emul_mem.c index 9d2eaef..8ec7cf5 100644 --- a/emul_mem.c +++ b/emul_mem.c @@ -15,10 +15,10 @@ int emul_mem_get_word(int address) { int word = 0; - word |= mem[address+0] << 0; - word |= mem[address+1] << 8; - word |= mem[address+2] << 16; - word |= mem[address+3] << 24; + word |= (0x000F&mem[address+0]) << 0; + word |= (0x000F&mem[address+1]) << 8; + word |= (0x000F&mem[address+2]) << 16; + word |= (0x000F&mem[address+3]) << 24; return word; } diff --git a/lib/printf.asm b/lib/printf.asm new file mode 100644 index 0000000..e722e9c --- /dev/null +++ b/lib/printf.asm @@ -0,0 +1,40 @@ +j FUNC_END + +#LABEL printf +addi $sp $sp -4 + +sw $s0 0 $sp + +add $s0 $zero $a0 + +#LABEL LOOP +lw $t0 0 $s0 +#OUTPUT $t0 +addi $s0 $s0 1 +bne $t0 $zero LOOP + +lw $s0 0 $sp + +addi $sp $sp 4 +jr $ra + + +#LABEL FUNC_END + +#INPUT $t0 + +addi $s0 $zero 10 +addi $s1 $zero 65 + +sw $s1 0 $s0 +addi $s0 $s0 1 +addi $s1 $s1 1 +sw $s1 0 $s0 +addi $s0 $s0 1 +addi $s1 $s1 1 +sw $s1 0 $s0 + +addi $a0 $zero 10 +jal printf + +#INPUT $t0