不知道能不能有一個適合我磨練的環境和機會?
一般而言, 組合語言比較適用於發展Firmware or BIOS的領域, Driver可能會用到一點, 目前有需求的廠商(Micro processor, Chipsets, PC Motherboard/system 的Designer/Manufacturer), 在這部分比較傾向找有經驗的, 完全不懂的也是有機會但是很少可能要看運氣。
最低限度會找了解組合語言的人進去後on job training。
想問您,為什組合語言大家都不敢去碰呢?
組合語言在語法上太接近機器語言, 而不像一般高階語言比較接近人類的數學敘述, 在學習、認知上會有比較多的挫折。
還有, 組合語言除了需要學習語法更需要了解CPU架構, 個人覺得最關鍵的是記憶體位址的觀念(尤其是Intel X86 CPU有所謂的 segment暫存器)以及其定址法的運用,
另外在存取IO裝置除了一般的IO位址還須了解index port/data port的觀念。
For details about the answer of your question, refer to the attached “Forward” of the book The Art of Assembly Language.
關於組合語言的語法與CPU(8051 or X86)的基本觀念可以參考市面上的一些書籍, 但若是想深入了解CPU architecture則須參考各家製造商的Data Sheet, 這部分很需要讀英文的功力;
這個URL可以找到並下載Intel X86 CPU的官方詳細資料: http://www.intel.com/design/pentium4/manuals/index_new.htm#sdm_vol1。
組合語言和硬體的那些方面有關呢?
所有可以被程式控制的硬體功能都可以由組合語言達成
可以直接存取CPU的各種 register, 控制CPU的各種功能, 讓CPU進入各種狀態
可以直接access記憶體的內容, 可以定址到任何位址
可以直接存取IO位址(大部分是一些IO裝置或是擴充卡內的 register or data buffer)
可以執行所有的CPU指令 (包括compiler不懂的指令)
能用在那些東西上面呢?
因為組合語言可以很輕易的控制到硬體-->用於撰寫成硬體啟始的控制程式 ,又 , 編譯連結後的執行碼所佔的空間比較小-->可以燒錄在空間並不是很大(相對於RAM or Disk)的ROM之內
所以傳統上用於發展PC的BIOS 或是一些微控制器系統的Firmware
Develop compiler or linker
Reverse-engineering.
On the bad side: viruses programming, security attacker,…