2014-11-06 46 views
0

我正在确定一个数字在我的函数中是否为零。如果它是零,我需要传递一些像“Is Zero”这样的字符串到我已经声明为B的变量中。我的函数确定它是否为零,但是当我尝试使用我的SPARC源代码将字符串传递到变量B时我seg错误。Seg Faulting SPARC Assembly

以下是我在C驱动一直在努力:

void display(double, char*); 
char B[100]; 
double x = 0.000; 
display(x, &B); 

printf("%s", B); 

这里是我的SPARC代码:

ZERO: .asciz "Is Zero\n" 



.global display 
.section ".text" 
.align 4 
display:  
     save %sp, -96, %sp 


     mov %i0, %o0 
     mov %i1, %o1 
     mov%i2, %o2 

     call is_zero   ! check if number is zero 
     cmp %o0, 0 
     bne zero 
     nop 


zero: 
     save %sp, -96, %sp 
     set  ZERO, %l0 
     ldub [%l0], %l1 
     cmp  %l1, 0   ! exit when zero byte reached 
     beq  done 
     nop 
     stb  %l1, [%i2] 
     inc  %l0 
     inc  %i2 

     ba  zero 
     nop 
done: 
     ret 
     restore 

回答

1

& B是为char数组B. 显示功能,带指针第二个参数中的字符指针。 display(x,& B)应显示(x,B)。

+0

当我编译我的代码但它不能解决seg故障时,我从“不兼容的指针类型”警告中删除了“classify'的arg 2”警告。 – Alfred 2014-11-06 03:22:16

+0

@Alfred,我建议你在C中编写'display'函数来测试你的程序。之后,您可以将'display'功能转换为汇编语言。 – bkyee 2014-11-07 06:56:21