2016-11-27 63 views
0

我已将此代码附加到此帖子。但是,当我在gdb上运行它时,一旦它扫描了第一个数字和第二个数字,它就会给我一个“程序接收到的信号SIGSEGV,分段错误”。错误。 我将不胜感激任何帮助来纠正这一点。 谢谢!SPARC装配Scanf错误

.align 4 
    .section  ".bss" 
    input: .skip 4 

    .section  ".data" 
    format: .asciz "%d" 
    string1: .asciz "Enter Number 1:\n" 
    string2: .asciz "Enter Number 2:\n" 
    string3: .asciz "The sum of %d and %d is %d\n" 

    .section  ".text" 

    .global main 
    main: 
    save %sp, -96, %sp 

    set string1, %o0 
    call printf 
    nop 
    set format, %o0 
    set input, %o1 
    call scanf 
    nop 
    set string2, %o0 
    call printf 
    nop 
    set format, %o0 
    set input, %o2 
    call scanf 
    nop 
    add %o1, %o2, %o3 
    set string3, %o0 
    ld [%o1], %o1 
    ld [%o2], %o2 
    ld [%o3], %o3 
    call printf 
    nop 
    ret 
    restore 

    mov 1, %g1 
    ta 0 
+2

好,你试图用'gdb'但尝试用它来效果更佳;)看看这些指令断层和原因。此外,请评论你的代码,特别是如果你想让别人帮忙。 'add%o1,%o2,%o3'没有任何意义(增加两个指针)。此外,您似乎依赖于保存被调用者保存的'%o'寄存器。另外,第二次调用'scanf'则设置'%o2'而不是'%o1'。 – Jester

+0

@Jester谢谢!感谢您的帮助,我能够找出答案。 – Jay

回答

0

我能问题由于要弄清楚的帮助斯特凡和小丑!

! SungJae Kim 

! b321024 !作业5 ! 2016年12月2日

.align 4 
.section ".bss" 
input1: .skip 4 
input2: .skip 4 

.section ".data" 
format: .asciz "%d" 
string1: .asciz "Enter Number 1:\n" 
string2: .asciz "Enter Number 2:\n" 
string3: .asciz "The sum of %d and %d is %d\n" 

.section ".text" 

.global main 
main: 
save %sp, -96, %sp 

set string1, %o0 
call printf 
nop 
set format, %o0 
set input1, %o1 
call scanf 
nop 
set string2, %o0 
call printf 
nop 
set format, %o0 
set input2, %o1 
call scanf 
nop 
set input1, %o1 
ld [%o1], %o1 
set input2, %o2 
ld [%o2], %o2 
add %o1, %o2, %o3 
set string3, %o0 
call printf 
nop 
ret 
restore 

mov 1, %g1 
ta 0 
0

我认为它应该看起来更像是这个,但我从来没有写过SPARC装配Ø:)

.align 4 
.section  ".bss" 
input1: .skip 4 
input2: .skip 4 

.section  ".data" 
format: .asciz "%d" 
string1: .asciz "Enter Number 1:\n" 
string2: .asciz "Enter Number 2:\n" 
string3: .asciz "The sum of %d and %d is %d\n" 

.section  ".text" 

.global main 
main: 
save %sp, -96, %sp 

set string1, %o0 
call printf 

set format, %o0 
set input1, %o1 
call scanf 

set string2, %o0 
call printf 

set format, %o0 
set input2, %o1 
call scanf 

set input1, %o1 
ld [%o1], %o1 
set input2, %o2 
ld [%o2], %o2 
add %o1, %o2, %o3 

set string3, %o0 
call printf 
nop 
ret 
restore 

mov 1, %g1 
ta 0 
+0

谢谢!感谢您的帮助,我能够找出答案。 – Jay