Mac上汇编语言的纯函数

时间:2011-11-29 18:47:45

标签: objective-c macos assembly

Fibonacci序列是一个很棒的'hello-world'应用程序,以新语言开始。我想制作一个纯粹的机器程序来执行它,不会浪费中间VM上的任何资源,不必要的内存管理等。

最好的解决方案是写下汇编代码并将其编译为本机二进制文件。但是我从未使用汇编语言,那么最好的起点是什么?

我正在使用iMac 64位双核x86系统。

1 个答案:

答案 0 :(得分:4)

使用汇编语言很有趣,这是了解内部机器的好方法。我不确定你是否在使用objective-c来浪费那么多资源来计算斐波那契序列,但也许你可以证明我错了。

学习汇编开始时非常简单,然后添加更多函数和输入和输出,以了解系统调用和函数调用序列,然后获得更多创意。

请务必记录每一行,因为它很难维护装配。

对于Mac OS X

创建一个名为simple.asm的文件: -

; simple.asm - exit

section .text

global simple                ; make the main function externally visible

simple:
    mov eax, 0x1              ; system call number for exit
    sub esp, 4                ; OS X (and BSD) system calls needs "extra space" on stack
    int 0x80                  ; make the system call

编译并链接它: -

nasm -f macho simple.asm
ld -o simple -e simple simple.o

运行它: -

asm $ ./simple 
asm $ echo $?
1

x86汇编在线有很多免费资源以及intel 64位具体细节。

http://en.wikibooks.org/wiki/X86_Assembly

http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

查看用于bxd内核和mach内核的系统调用的资源,以获取osx特定的系统调用。

http://osxbook.com

http://www.freebsd.org/doc/en/books/developers-handbook/x86-system-calls.html

http://peter.michaux.ca/articles/assembly-hello-world-for-os-x

如果要创建库,请查看链接器和加载器。