Я некоторые коды, как показано ниже: Assembly (max.s файл)Сегментация Fault при компоновке программы сборки с `ld`
.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-битной системе. – rkhb
Да. Этот код принадлежит моему учителю. Он собрал его на класс и, конечно же, побежал. Я пошел домой и повторно использовал этот код и не работал, потому что я не думаю, что 32 бит отличается от 64 бит. –
Существуют существенные различия между 32 бит и 64 бит. В вашем случае вы наткнулись на вызывающие соглашения: [cdecl (32bit - ваша система)] (http://en.wikipedia.org/wiki/X86_calling_conventions#cdecl) и [System_V_AMD64 (64 бит - система учителя)] (http: //en.wikipedia.org/wiki/X86_calling_conventions#System_V_AMD64_ABI) – rkhb