-
1 # 一刻科技
-
2 # 多瑙河中的魚
組合語言的學習首先要對計算機硬體基礎知識有所瞭解,特別是暫存器,記憶體等。同時要對二進位制有所瞭解。同時你得了解與,或,非,異或等數理邏輯計算的相關知識;你同時對數位電路知識要了解,瞭解邏輯與或非在數位電路上如何實現。另外不但對數位電路,對於類比電路你也要了解。諸於A/D,D/A轉換,光電轉換等等都要有所瞭解。這些東西對於你掌握組合語言用於工業控制有很大幫助。順便說一下,有很多工業控制的程式是用C語言編寫的,C語言雖然也比較難,但較組合語言方便多了。
-
3 # 校園小喇叭
組合語言入門一:環境準備
• 現階段,找個方便好使的程式設計環境還是比較蛋疼的,對於部分想過癮或者想從學習實踐中學習的小夥伴來說,確屬不易。結合國內本科時的Ubuntu及gcc/nasm環境來講解吧環境來分享吧。
• 環境
• Ubuntu
• gcc/nasm
環境檢查
先開啟終端,安裝所需軟體(注意$開頭的才是命令,並且$並不屬於命令的一部分):
$ sudo apt-get install gcc nasm vim gcc-multilib -y
在終端中分別執行which nasm和which gcc,得到如下結果,則表示環境已經安裝完畢。
$ which nasm
/usr/bin/nasm
$ which gcc
/usr/bin/gcc
開始第一個程式
在組合語言環境下,我們先別急著搞什麼Hello World,在這裡要打印出Hello World還不是一個簡單的事情,這也算是初入彙編比較讓人不解的地方,成天都在扯什麼暫存器定址啥的,說好的變數分支迴圈函式呢?
別說話,先按照我的套路把環境配好,程式跑起來了再說。注意,不是Hello World。先亮出第一個程式的C語言等價程式碼:
int main() {
return 0;
}
不好意思,大括號沒換行。你以為接下來我要gcc -S嗎?Too naive。我這可是正宗手工藝,非機械化生產。
說正事,先一股腦啥都不知道地把程式碼敲完,跑起來再說:
首先準備個檔案,暫且叫做first.asm吧,然後把下面的程式碼搞進去:
global main
main:
mov eax, 0
ret
好了程式寫完了,你能感受到這裡的0就是上面C程式碼裡的0,說明你有學習彙編的天賦。
OK接下來就要編譯運行了。來一堆命令先:
$ nasm -f elf first.asm -o first.o
$ gcc -m32 first.o -o first
這下,程式就編譯好了,像這樣:
$ ls
first first.asm first.o
好了我們執行一下:
$ ./first ; echo $?
別問我為何上面的命令後面多了一串奇怪的程式碼,你自己把它刪掉之後再看就能猜出來是幹啥的了。如果還有疑惑,可以再次做實驗確認,比如把程式碼裡的0改成1。變成這樣:
global main
main:
mov eax, 1
ret
再按照同樣的套路來編譯執行:
$ nasm -f elf first.asm -o first.o
$ gcc -m32 first.o -o first
$ ./first ; echo $?
1
OK,咱們的環境準備工作大功告成。
出國到了MIT以後,計算機體系結構第一門課,教授給了個學習平臺叫做lc-3。連結如下:
主頁 Introduction to Computing Systems
https://highered.mheducation.com/sites/0072467509/student_view0/lc-3_simulator.html
模擬器 LC 3 Simulator Windows Version 3.01 (385.0K)
https://highered.mheducation.com/sites/0072467509/student_view0/lc-3_simulator.html
指令手冊 AppendixA.pdf
https://highered.mheducation.com/sites/dl/free/0072467509/104691/pat67509_appa.pdf
這個平臺有哪些好處?
1.指令少,只有最基本的17條指令。文件每條指令用法都有具體描述,這裡不多說
2.開發環境簡單。一個編譯器,一個虛擬機器,另外一個console視窗。
3.減法,堆疊,函式呼叫都需要自己實現。夯實基礎。
學習體會:
這個平臺掌握之後。stm32指令集基本是對著指令手冊就可以直接動手寫了。
另附LC-3指令參考一份連結如下:
http://www.cs.utexas.edu/users/fussell/cs310h/lectures/Lecture_10-310h.pdf
-
4 # Ren
本行汽車電子,之前某老平臺幾次大的軟體變更升級,CPU計算資源非常緊張,有些低優先順序中斷已經開始丟失了,我用powerpc彙編把原來c語言的基礎演算法庫重寫了一遍,重點照顧了耗時最長的查表map程式,優化了分支預測特性,減少不必要的流水線等待,結果程式執行時間減少30%,不丟中斷了,老平臺又苟延殘喘了幾年。
彙編怎麼學?一句話,多看手冊,多反編譯,就那麼幾種套路,組合語言還是很純粹的,沒有太多花活。
回覆列表
彙編目前主要用於逆向了,之前很多用匯編寫的硬體裝置也改用了C等高階語言了。
程式語言說實在的沒什麼入門捷徑,首先搞定語法還有關鍵字,至於程式設計邏輯一般問題都不大。然後就是練習。
如果沒有學習過任何一個程式語言,那麼按照範例寫一些簡單的程式,跑起來看結果,然後修改,這樣就會更容易入門一些。
如果你是懂其他語言比如C,然後做逆向,那可以用C寫一個簡單的小程式,然後反編譯後,再去看看程式碼,這樣就容易和熟悉的語言對上,方便理解和深入開展。