彙編語言怎麼入門學習?


彙編語言入門一:環境準備

•\t現階段,找個方便好使的編程環境還是比較蛋疼的,對於部分想過癮或者想從學習實踐中學習的小夥伴來說,確屬不易。結合國內本科時的Ubuntu及gcc/nasm環境來講解吧環境來分享吧。

•\t環境

•\tUbuntu

•\tgcc/nasm

你先安裝一個能正常使用的Ubuntu再說吧,然後順便熟悉一些相關的概念和操作。後面若沒有特殊說明,那我們討論的問題都是在這個軟件環境下。

環境檢查

先打開終端,安裝所需軟件(注意$開頭的才是命令,並且$並不屬於命令的一部分):

$ 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





校園小喇叭


彙編目前主要用於逆向了,之前很多用匯編寫的硬件設備也改用了C等高級語言了。

編程語言說實在的沒什麼入門捷徑,首先搞定語法還有關鍵字,至於編程邏輯一般問題都不大。然後就是練習。

如果沒有學習過任何一個編程語言,那麼按照範例寫一些簡單的程序,跑起來看結果,然後修改,這樣就會更容易入門一些。

如果你是懂其他語言比如C,然後做逆向,那可以用C寫一個簡單的小程序,然後反編譯後,再去看看代碼,這樣就容易和熟悉的語言對上,方便理解和深入開展。


一刻科技


彙編語言的學習首先要對計算機硬件基礎知識有所瞭解,特別是寄存器,內存等。同時要對二進制有所瞭解。同時你得了解與,或,非,異或等數理邏輯計算的相關知識;你同時對數字電路知識要了解,瞭解邏輯與或非在數字電路上如何實現。另外不但對數字電路,對於模擬電路你也要了解。諸於A/D,D/A轉換,光電轉換等等都要有所瞭解。這些東西對於你掌握彙編語言用於工業控制有很大幫助。順便說一下,有很多工業控制的程序是用C語言編寫的,C語言雖然也比較難,但較彙編語言方便多了。


多瑙河中的魚


用慣了子程序後,彙編語言也沒那麼難弄。


分享到:


相關文章: