匯編語言入門教程 怎樣學(xué)習(xí)匯編語言更容易?
怎樣學(xué)習(xí)匯編語言更容易?匯編語言是一種面向機(jī)器的編程語言。在實(shí)際應(yīng)用中,它通常用于底層、硬件操作和要求較高的程序優(yōu)化。驅(qū)動程序、嵌入式操作系統(tǒng)和實(shí)時運(yùn)行程序都需要匯編語言。如何學(xué)好匯編語言?首先要有一
怎樣學(xué)習(xí)匯編語言更容易?
匯編語言是一種面向機(jī)器的編程語言。在實(shí)際應(yīng)用中,它通常用于底層、硬件操作和要求較高的程序優(yōu)化。驅(qū)動程序、嵌入式操作系統(tǒng)和實(shí)時運(yùn)行程序都需要匯編語言。
如何學(xué)好匯編語言?首先要有一定的理論知識儲備,如編譯原理、計算機(jī)原理、微機(jī)原理、體系結(jié)構(gòu)和教學(xué)體系等。其次,我們應(yīng)該閱讀更多的例子,編寫更多的調(diào)試匯編代碼。
雖然不同的硬件平臺和匯編語言不同,但它們離不開數(shù)據(jù)傳輸、條件設(shè)置、控制傳輸、位移和位操作、特權(quán)指令、浮點(diǎn)和多媒體、偽操作等。
多年使用匯編語言的經(jīng)驗(yàn)是:代碼完整規(guī)范,盡量使用常規(guī)指令,棧和上下文的保護(hù)和恢復(fù)做得很好。
謝謝。
反匯編與逆向編程的區(qū)別?
反匯編:一般情況下,只有編譯器根據(jù)高級語言生成的可以直接在芯片上執(zhí)行的機(jī)器代碼被“解析”為人類可讀的匯編形式代碼(實(shí)際上,最早的計算機(jī)操作人員具有直接讀取機(jī)器代碼和使用機(jī)器代碼編程的能力,不需要轉(zhuǎn)換成匯編形式,這是隨著模數(shù)的爆炸式增長,計算機(jī)的流行編程規(guī)則,人們需要轉(zhuǎn)換成匯編代碼來讀取機(jī)器代碼程序
]早期的反匯編被編譯器制造商用來檢查編譯器生成的代碼的性能。
現(xiàn)在我們主要研究分析別人沒有源代碼的程序,比如病毒程序分析,系統(tǒng)漏洞挖掘,或者黑灰產(chǎn)業(yè)鏈上的抄襲。通過反匯編分析了該算法的功能、算法和邏輯。
拆卸實(shí)際上是一個相反的過程。在分析了別人的功能、算法和邏輯之后,我們可以根據(jù)開發(fā)過程中的實(shí)際需要,重新開發(fā)、添加補(bǔ)丁開發(fā)、國防產(chǎn)品開發(fā)等,例如,通過分析匯編代碼得到的算法可以用任何其他編程語言復(fù)制,逆向編程是逆向工程中的逆向編程,逆向編程一般是指利用其他編程語言對其他程序的功能進(jìn)行逆向分析,從而再現(xiàn)其功能。
逆向分析(Reverse Engineering)不僅是反匯編,而且針對不同的系統(tǒng)平臺、語言平臺和芯片平臺包含不同的內(nèi)容。例如反匯編基本上包括對各種芯片的反匯編(如8086、arm、C51等)
反匯編實(shí)際上屬于反編譯,反編譯包括從低級或中級到高級的各種語言的分析,如。Net平臺下反編譯是反編譯的一個分支,反編譯是實(shí)現(xiàn)逆向編程的必要步驟,這些都屬于IT領(lǐng)域的“逆向工程”。
現(xiàn)代匯編教材還是基于8086,對理解當(dāng)今CPU(如i9)有幫助嗎,還是教程太滯后?
裝配不工作?胡說
!裝配難學(xué)嗎?胡說
!任何高端應(yīng)用場景都需要組裝帶來的高效率和可靠性!什么是高端?軍工醫(yī)療領(lǐng)域!這些領(lǐng)域?qū)\(yùn)行效率和可靠性的要求是無止境的。用C語言調(diào)用第三方函數(shù)庫可以方便地編寫PID,但它是如何實(shí)現(xiàn)的呢?效率有多高?如果有問題怎么辦?如何提高效率?你不知道!如果你能在匯編中編寫一個PID,你會發(fā)現(xiàn)一切都在你的控制之下!跑步速度達(dá)到極限!所有的數(shù)據(jù)更改都是根據(jù)您的設(shè)計來操作的,這就是所謂的自主控制
!很多人說中國沒有自己的工業(yè)軟件?為什么?大多數(shù)人不知道怎么寫,因?yàn)楦呒壵Z言不提供現(xiàn)成的庫。。。國內(nèi)PLC的品牌很多,但很少有自己的編譯平臺。為什么?因?yàn)橛肅語言不能編寫PLC級編譯器。梯形圖語言本身是匯編語言的增量式版本,比C語言更接近底層,當(dāng)然C語言不能滿足要求。例如,許多人抱怨數(shù)控機(jī)床不如進(jìn)口機(jī)床精確。這個精度的瓶頸,除了國內(nèi)冶金行業(yè)技術(shù)的差距外,最大的原因就是編程語言的局限!由于效率和運(yùn)行速度的差異,高級語言根本不能勝任這種應(yīng)用程序!更不用說三軸聯(lián)動、五軸聯(lián)動等技術(shù)了。
綜上所述,匯編語言的意義不僅僅是計算機(jī)的基礎(chǔ),幫助理解高級語言這么簡單!匯編語言是高端應(yīng)用領(lǐng)域的必備工具
!匯編語言難學(xué)嗎?當(dāng)然,學(xué)習(xí)并不難!任何芯片的內(nèi)部資源都是極其有限的,因此CPU所能提供的匯編指令也是極其有限的。只有這么多的指令,而且您不會像高級語言那樣有一堆第三方庫需要跟進(jìn)。而匯編語言的指令函數(shù)非常簡單易懂,通常是一個非常單一的函數(shù),比如如何處理源操作數(shù),然后寫到目標(biāo)操作數(shù)的地址,非常簡單直接!與高級語言(甚至C)相比,學(xué)習(xí)的難度在下降。
但必須指出的是,裝配很難使用!很難使用!要完成一個特定的任務(wù),就必須學(xué)會將任務(wù)分解成匯編指令可以完成的各種小目標(biāo),這就意味著用匯編來編寫程序?qū)λ惴ㄓ泻艽蟮囊蕾囆?,這也是程序員技術(shù)高超、腦力極度消耗的根本原因,也是非常有價值的
!總而言之,匯編語言就像基本的漢字,高級語言就像名言的全集。如果你想獲得諾貝爾文學(xué)獎,靠別人的名言是行不通的。即使你想講自己的原創(chuàng)故事,那也是不可能的,因?yàn)槟愀究床欢?!【酷拖】【酷拖】【酷?/p>
目前組裝主要分為兩類,一類是PC端的x86系列,另一類是嵌入式領(lǐng)域的MCU(51、PIC、AVR等)、arm(含手機(jī))和DSP。
學(xué)習(xí)裝配可分為幾個類別。有些人在學(xué)習(xí)組裝時會想拆開。有些人需要最快的代碼運(yùn)行效率,比如DSP匯編,而有些人則將匯編的一小部分嵌入其中。
一些啟動代碼是在匯編中編寫的,這是最有效的。
目前,裝配和拆卸軟件更加先進(jìn)。1981年開始學(xué)Z80組裝,1985年開始學(xué)51組裝,自己寫了super 51反匯編。后來,它被嵌入到hotisp中,hotisp采用了代碼和數(shù)據(jù)分離技術(shù)。
后來,我學(xué)習(xí)了x86匯編,主要使用DOS嵌入式調(diào)試.com反匯編和跟蹤調(diào)試。(如下圖所示,是1991年福祿克公司CRC32保護(hù)軟件狗破解時的拆卸調(diào)試說明)
學(xué)會PIC拆裝。
學(xué)習(xí)DSP組裝(非常頭痛)。
現(xiàn)在我不想拆卸。當(dāng)然,51拆卸非常簡單。
簡而言之,嵌入式域編程,必須能夠進(jìn)行一些匯編。
匯編應(yīng)該怎么學(xué)?
實(shí)際上玩組裝真的意味著“拆卸”。
我學(xué)習(xí)了Z80匯編,51匯編,我寫了51超級反匯編disasm51,后來嵌入到hotisp。網(wǎng)上有。(我認(rèn)為它是最好的51個反匯編程序之一)
我學(xué)習(xí)了x86匯編程序和宏匯編程序,并使用了反匯編軟件。
學(xué)習(xí)PIC組裝和拆卸軟件。宏C語言HPL是由宏匯編而成的。
使用Keil C51進(jìn)行調(diào)試時,您將在調(diào)試時看到(反匯編)說明。
當(dāng)然,其他MCU、arm和DSP編譯軟件在調(diào)試時可以看到匯編指令。
所以,玩匯編,如果它有宏匯編,它會更有趣,它可以讓你感受到“發(fā)明語言”的樂趣
如下圖所示,我在1991年用DOS嵌入了它調(diào)試.com反匯編破解了美國福祿克公司CRC32保護(hù)軟件狗的截圖。當(dāng)時是用打印機(jī)打印反匯編部分代碼,然后粘貼在筆記本上。
那時候真的很難