Erro do Assembly: o Mach-O de 64 bits não suporta endereços absolutos de 32 bits
Então, estou aprendendo a montagem x86_64 nasm no meu mac por diversão. Depois do hello world e de uma aritmética básica, tentei copiar um programa hello world um pouco mais avançado deesse sit e modificá-lo para intel de 64 bits, mas não consigo me livrar dessa mensagem de erro:hello.s:53: error: Mach-O 64-bit format does not support 32-bit absolute addresses
. Aqui está o comando que eu uso para montar e vincular:nasm -f macho64 hello.s && ld -macosx_version_min 10.6 hello.o
. E aqui está a linha relevante:
cmp rsi, name+8
rsi é o registro que estou usando para o meu índice no loop, e name é uma palavra quad reservada para a entrada do usuário, que é o nome que, a essa altura, já foi gravad
Aqui está uma parte do código (para ver o resto, clique no link e vá para o final, a única diferença é que eu uso registros de 64 bits):
loopAgain:
mov al, [rsi] ; al is a 1 byte register
cmp al, 0x0a ; if al holds an ascii newline...
je exitLoop ; then jump to label exitLoop
; If al does not hold an ascii newline...
mov rax, 0x2000004 ; System call write = 4
mov rdi, 1 ; Write to stdout = 1
mov rdx, 1 ; Size to write
syscall
inc rsi
cmp rsi, name+8 ; LINE THAT CAUSES ERROR
jl loopAgain