我正在嘗試將彙編語言學習爲一種「豐富」練習。我有一臺Mac,似乎是學習Linux的最佳資源。我唯一的Linux運行在Parallels Desktop for OSX上。由於彙編基於操作系統和芯片組,我是否會在嘗試通過虛擬機組裝Linux彙編語言時遇到很多額外的問題?我明白,OSX大會不是最好的學習。Mac上的組裝
謝謝!上X86-64
-jP
我正在嘗試將彙編語言學習爲一種「豐富」練習。我有一臺Mac,似乎是學習Linux的最佳資源。我唯一的Linux運行在Parallels Desktop for OSX上。由於彙編基於操作系統和芯片組,我是否會在嘗試通過虛擬機組裝Linux彙編語言時遇到很多額外的問題?我明白,OSX大會不是最好的學習。Mac上的組裝
謝謝!上X86-64
-jP
Linux和OS X使用相同ABI - 至少,調用約定,堆棧設置等,有在組裝指令的輕微差異。它們在系統調用中的區別在哪裏,但如果您只是編寫函數,特別是簡單的葉函數,那麼它並不重要。無論如何,優化熱點是在userland組裝的幾個原因之一。最小的OS X功能可能如下所示:
.text
.p2align 4 ## 16-byte aligned start.
.globl _foo_bar ## leading underscore in name.
_foo_bar:
## your code ##
L__some_label_for_jump_destination
## more code ##
ret
它被組裝成Mach-O文件格式。對於Linux(GNU彙編):
.text
.p2align 4 ## or other.
.globl foo_bar ## no leading underscore in name.
.type foo_bar,@function
foo_bar:
## your code ##
.L__some_label_for_jump_destination ## dot before label
## more code ##
ret
.size foo_bar,[.-foo_bar] ## not strictly needed - ELF object info.
還有的.align
指令的不同變化,但我發現.p2align 4
涵蓋ELF平臺和OS X,所以我不.align 4,0x90
在OS X上如果懶得有疑問只是看一下簡單函數的一些C代碼彙編輸出:clang/gcc -c -S foo.c
也許你想先嚐試內聯彙編。我不能推薦this教程。 Clang接受GCC's inline assembly syntax。
感謝您的回答......我不完全確定這就是我正在尋找的東西,但也許我還沒有完全理解程序集。 –