2011-11-29 25 views
2

從新語言開始時,斐波那契數列是一個偉大的「hello-world」應用程序。我想製作一個純粹的機器程序,可以在不浪費中間虛擬機,不必要的內存管理等任何資源的情況下執行此操作。Mac上的彙編語言的純函數

最好的解決方案是寫下彙編代碼並將其編譯爲本機二進制文件。但是我從來沒有用過彙編語言,所以最好從哪裏入手?

我使用的是iMac 64位雙核x86系統。

+0

一個C程序可以編譯成(或多或少)與彙編語言程序相同的代碼,那麼爲什麼不直接用C編寫程序呢?實際上,學習特定彙編語言並沒有太多意義,但是關於如何學習計算機的一般操作(這將涉及學習彙編和/或「機器」語言)還有很多要說的,所以根據你的目標是什麼答案可能完全不同。 – user786653

+0

@ user786653不正確。編譯的C程序有很多運行時庫開銷(如果不是性能,則大小):http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html –

+0

那麼,這就是爲什麼我寫了「或多或少「,除此之外沒有人強迫你鏈接到任何類型的運行時庫。 – user786653

回答

3

使用匯編語言很有趣,它是學習更多關於內部機器的好方法。我不確定你是否正在使用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

看一看資源系統調用BSD內核和內核馬赫的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

看一看鏈接器和加載,如果你想創建庫。

+2

請注意,Mac OS X上的'int 0x80'(和'sysenter')系統調用接口沒有正式記錄,可能會發生變化(儘管公平起見,它們不太可能這樣做)。'libSystem'中的包裝是官方支持的API。 – duskwuff