LINUX.ORG.RU

64-битные регистры в nasm


0

0

Как переделать этот хелловорлд, используя 64-битность?

section .text
global _start

_start:
;write msg to standard output
mov edx,len
mov ecx,msg
mov ebx,1
mov eax,4
int 0x80

;exit from program
mov eax,1
int 0x80

section .data
msg db 'Hello, World!',0xa
len equ $ - msg

Ещё вопрос:
nasm -f elf hello.asm генерит вот такой файл:
hello.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped

После ld -s -o hello hello.o
hello: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), statically linked, stripped
ld: warning: i386 architecture of input file `hello.o' is incompatible with i386:x86-64 output

Почему?

anonymous

>Почему?

Потому что надо

ld -melf_i386 -s -o hello hello.o

xnix ★★
()

вроде nasm не умеет x86_64...

xnix ★★
()

Use YASM, young padavan, NASM suckz on amd64.

e
()
Ответ на: комментарий от anonymous

Вот пример. Компилить так:

as test.S -o test.o -64
ld -s -o test test.o

.data
msg:
	.string "hello world\n"
len:    .long	0

.globl	_start
_start:
	movq	$4,%rax
	movq	$1,%rbx
	movq	$msg,%rcx
	movq	$(len-msg),%rdx
	int	$0x80
	movq 	$1,%rax
	int $0x80 

xnix ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.