mac上nasm汇编helloworld

osx 10.9上自带的nasm版本比较低,然后不能编译64位的程序。

www.nasm.us直接下载最新的版本;路径加入系统的PATH环境变量里面就好了。

mac上面的gcc编译.o文件的时候默认的入口是_main,而使用ld命令时,默认的是start

SECTION .data

msg: db "hello xiaozi!", 0x0a
len: equ $-msg

SECTION .text
global _main

kernel:
    syscall
    ret

_main:
    mov rax,0x2000004
    mov rdi,1
    mov rsi,msg
    mov rdx,len
    call kernel

    mov rax,0x2000001
    mov rdi,0
    call kernel
nasm -f macho64 -o asm1.o asm1.asm
ld -o asm1 -e _main asm1.o
./asm1

标签: none

已有 15 条评论

  1. mac 下brew info nasm 的版本非常新,是2.11.06的。我看官方的最新的是2.11.08

  2. 谢谢!我现在在学习汇编,汇编环境真的让我好生纠结啊。
    手里的教程是基于linux 32 环境的,然后开了虚拟机。很多代码我都跑不通,比如call puts 需要extern puts, 可是centos虚拟机又告诉我no such instruction: extern puts'`

    本来想以mac 环境学习的,可是mac 汇编好像资源特别少,没有找到系统介绍mac 汇编的书籍。

  3. drake drake

    求教楼主在Mac上用什么编辑器写汇编啊?

  4. gym gym

    您好,我在连接的时候遇到了一些问题不知道该怎么解决啊
    GanYimingdeMacBook-Pro:Desktop ganyiming$ ld -o test -e _main test.o
    ld: warning: -macosx_version_min not specified, assuming 10.8
    Undefined symbols for architecture x86_64:
    "_main", referenced from:

    implicit entry/start for main executable

    ld: symbol(s) not found for inferred architecture x86_64
    请问这是什么问题啊

    1. Camilla Camilla

      我刚刚也遇到这个问题,把.asm文件的程序入口改成_main就好了

  5. bannychen bannychen

    求教:我的可以执行第一句,但执行第二句出现“-bash: ld: command not found”,请问高手是怎么回事?

    1. ld命令没有,你可以尝试安装一下xcode的命令行工具

  6. Edison Edison

    你好前辈,您可以发表一篇在OS X 10.9.2上进行汇编练习的一个完整的步骤吗?甚至包括命令行什么的都写出来。
    刚开始学习汇编,这方面的知识不是很懂,请您辛苦一下吧~~~

    1. 我也刚开始学,资料都是google来的

  7. [code lang=text]print('哇')[/code]

添加新评论