developer.apple.com/library/content/documentation/...
я изучаю сборку носа x86_64 на моем Mac для удовольствия. После Hello World и некоторой базовой арифметики я попытался скопировать немного более продвинутую программу Hello World изэтот сайт и изменив его для 64-битной Intel, но я не могу избавиться от этого сообщения об ошибке:hello.s:53: error: Mach-O 64-bit format does not support 32-bit absolute addresses
, Вот команда, которую я использую для сборки и ссылки: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