Ошибка ассемблера: 64-разрядная версия Mach-O не поддерживает абсолютную 32-битные адреса

Итак, я изучаю сборку nasm x86_64 на своем Mac для развлечения. После hello world и некоторой базовой арифметики я попытался скопировать чуть более продвинутую программу hello world с этого сайта и модифицировать ее для 64-битной Intel , но я не могу избавиться от этого сообщения об ошибке: hello.s: 53: error: 64-разрядный формат Mach-O не поддерживает 32-разрядные абсолютные адреса . Вот Команда, которую я использую для сборки и компоновки: nasm -f macho64 hello.s && ld -macosx_version_min 10.6 hello.o . И вот соответствующая строка:

cmp rsi, name+8

rsi - это регистр, который я использую для своего индекса в цикле, а name - это четверное слово, зарезервированное для пользовательского ввода, которое является именем, которое к этому моменту уже было записано.

Вот часть кода (чтобы увидеть остальное, щелкните ссылку и перейдите в конец, единственная разница в том, что я использую 64-битные регистры):

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

5
задан mk12 5 July 2011 в 02:37
поделиться