だから私は楽しみのために私のMacでx86_64 nasmアセンブリを学んでいます。hello world といくつかの基本的な計算の後、このサイトから少し高度な hello world プログラムをコピーして 64 ビット Intel 用に変更しようとしましたが、この 1 つのエラー メッセージを取り除くことができません: 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