Error del ensamblador: Mach-O de 64 bits no admite direcciones absolutas de 32 bits

Así que estoy aprendiendo x86_64 ensamblaje nasm en mi mac por diversión. Después de hello world y algo de aritmética básica, intenté copiar un programa hello world un poco más avanzado deeste siti y modificándolo para Intel de 64 bits, pero no puedo deshacerme de este mensaje de error:hello.s:53: error: Mach-O 64-bit format does not support 32-bit absolute addresses. Aquí está el comando que uso para ensamblar y vincular:nasm -f macho64 hello.s && ld -macosx_version_min 10.6 hello.o. Y aquí está la línea relevante:

cmp rsi, name+8

rsi es el registro que estoy usando para mi índice en el bucle, y name es una palabra cuádruple reservada para la entrada del usuario, que es el nombre, que en este punto ya se ha escrito.

Aquí hay una parte del código (para ver el resto, haga clic en el enlace y vaya al final, la única diferencia es que 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

Respuestas a la pregunta(2)

Su respuesta a la pregunta