任何人都不会知道的任何良好的工具(我在寻找IDEs)编写大会。模式是一个有点麻烦我。

此外,英特尔苹果电脑,我可以使用的通用x86asm?或者是有一个修改的指令吗?任何有关信息后英特尔。

也:我知道,在windows,小型矿场可以运行一个模拟环境中创造的操作系统,以让码认为这是上运行其自己的专门机。不OS X提供同样的事情吗?

有帮助吗?

解决方案

安装后的任何版本的针对基于英特尔Mac,你应该可以写大会的代码。模式是一套工具,其中只有一个是IDE,所以你不要使用它,如果你不想要。(这就是说,如果有具体的东西,你找到笨重的,请文件的一个错误 苹果公司的错误报道 -每一个错误进程。) 此外,安装模式将安装两个Netwide汇编(NASM)和GNU汇编(天然气);这会让你用什么组装的语法你最舒服。

你还会想要看看 编译器和调试指南, ,因为那些文件的呼吁公约所使用的各种架构,Mac OS X上运行,以及如何在二元格式和装载工作。IA-32(x86-32)呼吁公约,特别是可能略有不同,从什么你用。

另一件事,要记住的是,该系统的电话接口Mac OS X上不同的是什么你可能会被用来在DOS/Windows、Linux、或其他BSD的味道。系统调用不认为一个稳定的API on Mac OS X;相反,你总是通过libSystem.这将确保你在写代码的便携式从一个释放的操作系统的下一步。

最后,请记住,Mac OS X在一个相当广泛的硬件-一切都从32位的核心单通过高端的四核至强.通过编码在大会你也许不是优化就像你以为;什么是最佳的一台机器上可以pessimal在另一个。苹果定期措施,其编译器和其妙的输出的"操作系统"优化标志是体面的跨线,并有广泛的矢量/质处理图书馆,你可以用得到高性能的方面调整的中央处理器-的具体方式实现的。

将会乐趣是巨大的。将大会的速度是不是胆小这些天。

其他提示

如前所述,不使用系统调用.你可以使用的标准C图书馆的电话虽然,但是要知道,叠必须16字节对准每个苹果 IA32功能呼叫ABI.

如果你不齐的叠堆,你的程序将崩溃 __dyld_misaligned_stack_error 当你打电话到任何库或框架。

下面的段组装和运行,在我的系统:

; File: hello.asm
; Build: nasm -f macho hello.asm && gcc -o hello hello.o

SECTION .rodata
hello.msg db 'Hello, World!',0x0a,0x00

SECTION .text

extern _printf ; could also use _puts...
GLOBAL _main

; aligns esp to 16 bytes in preparation for calling a C library function
; arg is number of bytes to pad for function arguments, this should be a multiple of 16
; unless you are using push/pop to load args
%macro clib_prolog 1
    mov ebx, esp        ; remember current esp
    and esp, 0xFFFFFFF0 ; align to next 16 byte boundary (could be zero offset!)
    sub esp, 12         ; skip ahead 12 so we can store original esp
    push ebx            ; store esp (16 bytes aligned again)
    sub esp, %1         ; pad for arguments (make conditional?)
%endmacro

; arg must match most recent call to clib_prolog
%macro clib_epilog 1
    add esp, %1         ; remove arg padding
    pop ebx             ; get original esp
    mov esp, ebx        ; restore
%endmacro

_main:
    ; set up stack frame
    push ebp
    mov ebp, esp
    push ebx

    clib_prolog 16
    mov dword [esp], hello.msg
    call _printf
    ; can make more clib calls here...
    clib_epilog 16

    ; tear down stack frame
    pop ebx
    mov esp, ebp
    pop ebp
    mov eax, 0          ; set return code
    ret

一个好的步骤x86Mac-具体的介绍见 http://peter.michaux.ca/articles/assembly-hello-world-for-os-x.其他链接,我已经试过有一些非Mac的陷阱。

最近我想了解如何编制英特尔x86on Mac OS X:

为nasm:

-o hello.tmp - outfile
-f macho - specify format
Linux - elf or elf64
Mac OSX - macho

为ld:

-arch i386 - specify architecture (32 bit assembly)
-macosx_version_min 10.6 (Mac OSX - complains about default specification)
-no_pie (Mac OSX - removes ld warning)
-e main - specify main symbol name (Mac OSX - default is start)
-o hello.o - outfile

用于壳体:

./hello.o - execution

一个班轮:

nasm -o hello.tmp -f macho hello.s && ld -arch i386 -macosx_version_min 10.6 -no_pie -e _main -o hello.o hello.tmp && ./hello.o

让我知道如果这有帮助!

我怎么写在我的博客在这里:

http://blog.burrowsapps.com/2013/07/how-to-compile-helloworld-in-intel-x86.html

为了更详细的解释,我解释我想在这里:

https://github.com/jaredsburrows/Assembly

运行的大会上的代码Mac是仅仅3个步骤。这是可以做到,使用低但更好的是使用NASM命令行工具。我的缓解我已经安装的模式,如果你已经安装低其良好。

但是你可以做它没有模式作为良好。

只有遵循:

  1. 首先安装NASM使用自制 brew install nasm
  2. 转换。asm文件进Obj文件使用这种命令 nasm -f macho64 myFile.asm
  3. 运行Obj文件以看出使用的命令 ld -macosx_version_min 10.7.0 -lSystem -o OutPutFile myFile.o && ./64

简单的文字的文件,名为myFile.asm是写下你的方便。

global start
section .text

start:
    mov     rax, 0x2000004 ; write
    mov     rdi, 1 ; stdout
    mov     rsi, msg
    mov     rdx, msg.len
    syscall

    mov     rax, 0x2000001 ; exit
    mov     rdi, 0
    syscall

section .data

msg:    db      "Assalam O Alaikum Dear", 10
.len:   equ     $ - msg

此外,英特尔苹果电脑,我可以使用的通用x86asm?或者是有一个修改的指令吗?任何有关信息后,英特尔Mac会有帮助。

它是相同的指令集;它是一样的筹码。

该特征可以使用依赖你的处理器。苹果采用相同的英特尔的东西,因为其他人。所以,是的,一般x86应收(假设你不是一个PPC:D)。

尽的工具,我认为你最好的赌注是一个良好的文本编辑器'的理解是'大会。

忘了找到一个IDE写/运营/编制的汇编。但是,记住mac是UNIX。看看 http://asm.sourceforge.net/articles/linasm.html.一个体面的指南(虽然短暂)运行汇编通过海湾合作委员会在Linux。你可以模仿这一点。Mac使用英特尔的芯片所以你想看看英特尔语法。

不要忘记,不同窗,所有基于Unix系统需要有源之前的目的地不同于Windows

在Windows其:

传$源%的目的地

但是Mac其周围的其他方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top