54583


アセンブラの独習の際にエラーが出ましたが解決策がわかりません。英語ソースだと同じような質問が多いのですが知識がないせいか読み解けません、よろしくお願いします。以下のコード.asmを

> $ nasm -f macho64 ninestars.asm

で実行した際

[code]

    section .text
        global main ; must be declared for linker (gcc)
    main:           ; tell linker entry point
        mov edx,len ; message length
        mov ecx,msg ; message to write
        mov ebx,1   ; file descriptor (stdout)
        mov eax,4   ; system call number (sys_write)
        int 0x80    ; call kernel
    
        mov edx,9   ; message length
        mov ecx,s2  ; message to write
        mov ebx,1   ; file descriptor (stdout)
        mov eax,4   ; system call number (sys_write)
        int 0x80    ; call kernel
        mov eax,1   ; system call number (sys_exit)
        int 0x80    ; call kernel
    
    section  .data
    msg: db 'Displaying 9 stars',0xa ; a message
    len: equ $ - msg                 ; length of message
    s2: times 9 db '*'
    
[/code]

次のエラーが出ました。

> ninestars.asm:5: error: Mach-O 64-bit format does not support 32-bit
> absolute addresses  
>  ninestars.asm:11: error: Mach-O 64-bit format does not support 32-bit
> absolute addresses

おそらく`ecx`というレジスタがダメなようです


CC BY-SA 4.0
2019-04-29T23:07:08.633
54582
2019-04-29T23:29:32.107
question
x86
Mach-O 64-bit format does not support 32-bitのエラー


レジスタの先頭を`e`から`r`に変えるとうまくいきました

  * eは32bit
  * rは64bit

のようです


CC BY-SA 4.0
2019-04-29T23:29:32.107
54583
2019-04-29T23:29:32.107
54582
answer