Я использую 64-разрядный ubuntu и пытаюсь запустить файл .asm на NASM. Но он возвращает эту ошибку, когда я пытаюсь запустить следующий код. То, что я пытаюсь сделать, - это создать исполняемый файл путем компиляции (или сборки) объектного файла из источника
$ nasm -f elf hello.asm
, а затем после создания файла hello.o
создает сам исполняемый файл из файла объекта, вызывая компоновщик
$ ld -s -o hello hello.o
Это, наконец, создаст приветственный исполняемый файл.
Я следую этому руководству http://www.faqs.org/docs/Linux-HOWTO/Assembly-HOWTO.html
Ошибка:
i386 архитектура входного файла `hello.o 'несовместима с i386: выход x86-64
Код:
section .data ;section declaration
msg db "Hello, world!",0xa ;our dear string
len equ $ - msg ;length of our dear string
section .text ;section declaration
;we must export the entry point to the ELF linker or
global _start ;loader. They conventionally recognize _start as their
;entry point. Use ld -e foo to override the default.
_start:
;write our string to stdout
mov edx,len ;third argument: message length
mov ecx,msg ;second argument: pointer to message to write
mov ebx,1 ;first argument: file handle (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
;and exit
mov ebx,0 ;first syscall argument: exit code
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel