SPARC装配Scanf错误
问题描述:
我已将此代码附加到此帖子。但是,当我在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
答
我能问题由于要弄清楚的帮助斯特凡和小丑!
! 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
答
我认为它应该看起来更像是这个,但我从来没有写过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
好,你试图用'gdb'但尝试用它来效果更佳;)看看这些指令断层和原因。此外,请评论你的代码,特别是如果你想让别人帮忙。 'add%o1,%o2,%o3'没有任何意义(增加两个指针)。此外,您似乎依赖于保存被调用者保存的'%o'寄存器。另外,第二次调用'scanf'则设置'%o2'而不是'%o1'。 – Jester
@Jester谢谢!感谢您的帮助,我能够找出答案。 – Jay