Fibonacci序列是一个很棒的'hello-world'应用程序,以新语言开始。我想制作一个纯粹的机器程序来执行它,不会浪费中间VM上的任何资源,不必要的内存管理等。
最好的解决方案是写下汇编代码并将其编译为本机二进制文件。但是我从未使用汇编语言,那么最好的起点是什么?
我正在使用iMac 64位双核x86系统。
答案 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://www.freebsd.org/doc/en/books/developers-handbook/x86-system-calls.html
http://peter.michaux.ca/articles/assembly-hello-world-for-os-x
如果要创建库,请查看链接器和加载器。