2016-10-15 4 views
0

この質問は、投稿されたこの質問に接線方向で関連しています。Why isn't syscall working for MIPSscanfをMIPSで使用する

MIPSアセンブリでscanfを使用して、コマンドラインからユーザー入力を読み取ろうとしています。私はa.outファイルを実行すると、私はセグメンテーション違反を得る

.option pic0 

    .rdata # read-only data 

    .align 2 

fromatInt: 
    .asciz "%d" 
    .asciz "%c" 

    .align 2 

resultFormat: 
    .asciz "(%d/%u)\n" 

    .text 
    .align 2 

scanFormat: 
    .word 1 

    .text 
    .align 2 


     .global print 

print: 

    addiu $sp, $sp, -4 
    sw $ra, ($sp)  

    move $a1, $a0 
    la $a0, resultFormat 
    jal printf 
    move $a0, $a1 

    lw $ra, ($sp)  
    addiu $sp, $sp, +4 

    jr $ra 

    .global main 

main: 

    la $a0, fromatInt 
    la $a1, scanFormat 
    jal scanf 
    lw $s0, scanFormat 

    move $a0, $s0 
    jal print 

    jal exit 

は、ここに私のコードです。それ以外の場合は私が印刷してスキャンするシステムコールを使用することになり、私たちは本当のMIPSプロセッサを使用している

Program received signal SIGSEGV, Segmentation fault. 
0x77e821b0 in _IO_vfscanf_internal (s=0x77fa5bc0 <_IO_2_1_stdin_>, 
    format=<optimized out>, argptr=0x7fff6614, errp=0x0) at vfscanf.c:1826 
1826 vfscanf.c: No such file or directory. 

:私は、GDBを実行したときと、これがステップスルー時に私が得る結果です。私はまた、それを効果的に使用するのに十分なLinuxカーネルのシステムを理解していません。どんな助けでも大歓迎です。

答えて

1

が、私はこの方法を使用する方法を見つけ出すことができませんでしたが、あなたは簡単代わりにスタックから

addiu $sp, $sp, -4 

add $s0, $0, $sp 

la $a0, fromatInt 
add $a1, $0, $s0 
jal scanf 
lw $a0, 0($s0) 
#---------------------- 
#add function calls here 
#---------------------- 
addiu $sp, $sp, +4 #deallocate 
+0

おかげでスペースを使用することができ、それが働きました! – MuffinMan1042

関連する問題