從新語言開始時,斐波那契數列是一個偉大的「hello-world」應用程序。我想製作一個純粹的機器程序,可以在不浪費中間虛擬機,不必要的內存管理等任何資源的情況下執行此操作。Mac上的彙編語言的純函數
最好的解決方案是寫下彙編代碼並將其編譯爲本機二進制文件。但是我從來沒有用過彙編語言,所以最好從哪裏入手?
我使用的是iMac 64位雙核x86系統。
從新語言開始時,斐波那契數列是一個偉大的「hello-world」應用程序。我想製作一個純粹的機器程序,可以在不浪費中間虛擬機,不必要的內存管理等任何資源的情況下執行此操作。Mac上的彙編語言的純函數
最好的解決方案是寫下彙編代碼並將其編譯爲本機二進制文件。但是我從來沒有用過彙編語言,所以最好從哪裏入手?
我使用的是iMac 64位雙核x86系統。
使用匯編語言很有趣,它是學習更多關於內部機器的好方法。我不確定你是否正在使用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://www.freebsd.org/doc/en/books/developers-handbook/x86-system-calls.html
http://peter.michaux.ca/articles/assembly-hello-world-for-os-x
看一看鏈接器和加載,如果你想創建庫。
請注意,Mac OS X上的'int 0x80'(和'sysenter')系統調用接口沒有正式記錄,可能會發生變化(儘管公平起見,它們不太可能這樣做)。'libSystem'中的包裝是官方支持的API。 – duskwuff
一個C程序可以編譯成(或多或少)與彙編語言程序相同的代碼,那麼爲什麼不直接用C編寫程序呢?實際上,學習特定彙編語言並沒有太多意義,但是關於如何學習計算機的一般操作(這將涉及學習彙編和/或「機器」語言)還有很多要說的,所以根據你的目標是什麼答案可能完全不同。 – user786653
@ user786653不正確。編譯的C程序有很多運行時庫開銷(如果不是性能,則大小):http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html –
那麼,這就是爲什麼我寫了「或多或少「,除此之外沒有人強迫你鏈接到任何類型的運行時庫。 – user786653