【发布时间】:2014-11-29 18:26:14
【问题描述】:
我有一些汇编代码如下:(max.s 文件)
.section .data
d1: .double 12.5
d2: .double 6.5
formatstr: .asciz "Max value is: %lf\n"
.section .text
.globl _start
_start:
movsd d1,%xmm0
movsd d2,%xmm1
ucomisd %xmm1,%xmm0
ja endif
then:
movsd %xmm1,%xmm0
endif:
mov $formatstr,%edi
mov $1,%eax
call printf
call exit
当我编译它时:
as max.s -o max.o
ld -lc -dynamic-linker /lib/ld-linux.so.2 -o max max.o
然后没有发生错误。
但是当我通过./max 运行此文件时,出现以下错误:分段错误
【问题讨论】:
-
这是一个适用于 64 位 Linux 的程序。因为你没有收到来自
ld的错误,我猜你试图在 32 位系统上构建它。 -
是的。该代码属于我的老师。他在课堂上编译它,当然它运行了。我回家重用了那个代码但没有用,因为我不认为 32bit 与 64bit 不同
-
32 位和 64 位之间存在很大差异。在您的情况下,您偶然发现了调用约定:cdecl (32bit - your system ) 与 System_V_AMD64 (64bit - teacher's system)
标签: assembly segmentation-fault