【问题标题】:Seg Faulting SPARC Assembly分段故障 SPARC 组件
【发布时间】:2014-11-06 02:26:34
【问题描述】:

我正在确定我的函数中的数字是否为零。如果它为零,我需要将一些字符串(如“Is Zero”)传递给我声明为 B 的变量。我的函数确定它是否为零,但是当我尝试使用我的 SPARC 源代码将字符串传递给变量 B 时我段错误。

这是我在 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

【问题讨论】:

    标签: c sparc


    【解决方案1】:

    &B 是指向字符数组 B 的指针。 显示函数在第二个参数中采用 char 指针。 display(x, &B) 应该是 display(x, B)。

    【讨论】:

    • 当我编译我的代码时,这会消除我的“从不兼容的指针类型传递 `classify' 的 arg 2”警告,但它不能解决 seg 错误。
    • @Alfred,我建议你用 C 语言编写 display 函数来测试你的程序。之后,您可以将display 函数转换为汇编语言。
    猜你喜欢
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    相关资源
    最近更新 更多