關(guān)注+星標(biāo)公眾號,不錯過精彩內(nèi)容
最近又看到關(guān)于【嵌入式開發(fā)有沒有必要學(xué)匯編】的話題。 我覺得學(xué)匯編有學(xué)匯編的道理,不學(xué)也有不學(xué)的道理,這個很正常。不同的人有不同的觀點(diǎn),討論激烈也很正常。 現(xiàn)在可能很少看到匯編程序了,但單片機(jī)的啟動文件、RTOS底層等一些地方,依然還有匯編代碼的身影。 不知道大家有沒有學(xué)過匯編,或者有沒有用匯編語言編過程? 下面結(jié)合我學(xué)習(xí)匯編的經(jīng)歷,以及匯編點(diǎn)燈給大家說說。
學(xué)習(xí)匯編語言
我在2010年學(xué)習(xí)單片機(jī)編程的時候,老師教學(xué)都還是用匯編教我們,包括教學(xué)實驗,也是要求我們用匯編寫程序。
MOV A,#00H
MOV P1,A
我記得那會兒,老師要求我們把匯編指令背下來。雖然現(xiàn)在很多匯編指令寫不出來了,但看到很多匯編代碼,還是基本明白它的意思。
以前計算機(jī)三級(PC技術(shù))的上機(jī)考試,就是用匯編編程,我那個時候上機(jī)考試還是滿分。當(dāng)時覺得自己很牛逼,現(xiàn)在看來就是一菜鳥
匯編轉(zhuǎn)C語言
剛開始學(xué)習(xí)匯編那會兒,我真的用匯編在51單片機(jī)上寫流水燈程序。后面看了用C語言寫流水燈程序,突然發(fā)現(xiàn),哇,用C語言寫程序還能這么簡單、方便。 于是,我就那個時候開始放棄了匯編,轉(zhuǎn)向了C語言。包括后面我在大學(xué)實驗室自己學(xué)習(xí)、DIY做東西、以及后面的全國大學(xué)生電子設(shè)計競賽,都是用C語言編寫的程序。 10行匯編程序,可能只需要一行C語言代碼就能實現(xiàn),這是C語言相比匯編簡化的優(yōu)點(diǎn)。 但是,C語言編寫的程序,經(jīng)過編譯,也會轉(zhuǎn)為匯編。比如我們在線調(diào)試代碼的時候,會看到類似的“匯編窗口”: ?因為以前單片機(jī)的運(yùn)行速度不高,且內(nèi)存和Flash容量不大,要求節(jié)約程序空間。 所以使用匯編的優(yōu)點(diǎn):代碼運(yùn)行效率更高、更節(jié)約代碼存儲空間。對比匯編和C語言點(diǎn)燈程序
匯編語言寫程序的主要缺點(diǎn):語法復(fù)雜、可讀性差等。 下面分享一個實例:51單片機(jī)上的流水燈程序。分別用C語言和匯編寫出來,大家對比一下就知道了。 C語言版:
/******************** 宏定義 **************************/
/******************** 延時函數(shù) **************************/
void delay_ms(u8 ms)
{
u16 i;
do{
i = MAIN_Fosc / 13000;
while(--i) ; //14T per loop
}while(--ms);
}
/******************** 主函數(shù) **************************/
void main(void)
{
P0M1 = 0; P0M0 = 0; //設(shè)置為準(zhǔn)雙向口
P1M1 = 0; P1M0 = 0; //設(shè)置為準(zhǔn)雙向口
P2M1 = 0; P2M0 = 0; //設(shè)置為準(zhǔn)雙向口
P3M1 = 0; P3M0 = 0; //設(shè)置為準(zhǔn)雙向口
P4M1 = 0; P4M0 = 0; //設(shè)置為準(zhǔn)雙向口
P5M1 = 0; P5M0 = 0; //設(shè)置為準(zhǔn)雙向口
P6M1 = 0; P6M0 = 0; //設(shè)置為準(zhǔn)雙向口
P7M1 = 0; P7M0 = 0; //設(shè)置為準(zhǔn)雙向口
while(1)
{
P17 = 0;
delay_ms(250);
delay_ms(250);
P17 = 1;
P16 = 0;
delay_ms(250);
delay_ms(250);
P16 = 1;
P47 = 0;
delay_ms(250);
delay_ms(250);
P47 = 1;
P46 = 0;
delay_ms(250);
delay_ms(250);
P46 = 1;
}
}
匯編語言版:
宏定義 **************************/
Fosc_KHZ EQU 22118 ;22118KHZ
STACK_POIRTER EQU 0D0H ;堆棧開始地質(zhì)
延時函數(shù) **************************/
F_delay_ms:
PUSH 02H ;入棧R2
PUSH 03H ;入棧R3
PUSH 04H ;入棧R4
MOV R2,A
L_delay_ms_1:
MOV R3, #HIGH (Fosc_KHZ / 13)
MOV R4, #LOW (Fosc_KHZ / 13)
L_delay_ms_2:
MOV A, R4 ;1T Total 13T/loop
DEC R4 ;2T
JNZ L_delay_ms_3 ;4T
DEC R3
L_delay_ms_3:
DEC A ;1T
ORL A, R3 ;1T
JNZ L_delay_ms_2 ;4T
DJNZ R2, L_delay_ms_1
POP 04H ;出棧R2
POP 03H ;出棧R3
POP 02H ;出棧R4
RET
主程序 **************************/
ORG 0100H ;reset
F_Main:
CLR A
MOV P0M1, A ;設(shè)置為準(zhǔn)雙向口
MOV P0M0, A
MOV P1M1, A ;設(shè)置為準(zhǔn)雙向口
MOV P1M0, A
MOV P2M1, A ;設(shè)置為準(zhǔn)雙向口
MOV P2M0, A
MOV P3M1, A ;設(shè)置為準(zhǔn)雙向口
MOV P3M0, A
MOV P4M1, A ;設(shè)置為準(zhǔn)雙向口
MOV P4M0, A
MOV P5M1, A ;設(shè)置為準(zhǔn)雙向口
MOV P5M0, A
MOV P6M1, A ;設(shè)置為準(zhǔn)雙向口
MOV P6M0, A
MOV P7M1, A ;設(shè)置為準(zhǔn)雙向口
MOV P7M0, A
MOV SP, #STACK_POIRTER
MOV PSW, #0 ;選擇第0組R0~R7
L_MainLoop:
CLR P1.7
MOV A, #250
LCALL F_delay_ms ;延時250ms
LCALL F_delay_ms ;延時250ms
SETB P1.7
CLR P1.6
MOV A, #250
LCALL F_delay_ms ;延時250ms
LCALL F_delay_ms ;延時250ms
SETB P1.6
CLR P4.7
MOV A, #250
LCALL F_delay_ms ;延時250ms
LCALL F_delay_ms ;延時250ms
SETB P4.7
CLR P4.6
MOV A, #250
LCALL F_delay_ms ;延時250ms
LCALL F_delay_ms ;延時250ms
SETB P4.6
SJMP L_MainLoop
上面兩個程序,實現(xiàn)的功能都一樣(流水燈),但對比代碼,大家發(fā)現(xiàn)有啥區(qū)別?
對于有匯編基礎(chǔ)的同學(xué)來說,可能這個簡單的流水燈程序還是很好理解。
但是,對于大部分人來說,肯定都會覺得匯編很難讀。是的,這個是匯編的“特點(diǎn)”。
最后
匯編語法,對于絕大部分讀者來說,我現(xiàn)在是不建議再深入學(xué)習(xí)了,只需要了解一些基礎(chǔ)的內(nèi)容即可。 有少部分人,想從事底層開發(fā),比如底層驅(qū)動、單片機(jī)驗證、固件庫開發(fā)等這些讀者,有時間還是可以進(jìn)一步了解匯編的一些技術(shù)。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
C語言
+關(guān)注
關(guān)注
180文章
7575瀏覽量
134087 -
嵌入式開發(fā)
+關(guān)注
關(guān)注
18文章
1006瀏覽量
47352 -
代碼
+關(guān)注
關(guān)注
30文章
4671瀏覽量
67767
原文標(biāo)題:嵌入式開發(fā)還有必要學(xué)匯編嗎?
文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
學(xué)嵌入式軟件開發(fā)需要些什么知識??
CE。linux C linux shell 等都要會。另外,嵌入式肯定要學(xué)的是arm,因為要以arm為平臺開發(fā)項目。還有就是QTdesigner ,是做圖形化界面用的,
發(fā)表于 09-30 09:32
嵌入式開發(fā)要學(xué)什么內(nèi)容 嵌入式開發(fā)學(xué)習(xí)路線介紹
,創(chuàng)客學(xué)院嵌入式開發(fā)講師在這里介紹嵌入式開發(fā)學(xué)習(xí)路線,希望對于嵌入式開發(fā)學(xué)習(xí)內(nèi)容不了解的讀者可以有所幫助?! ?b class='flag-5'>嵌入式開發(fā)要學(xué)什么內(nèi)容
發(fā)表于 03-01 10:13
嵌入式開發(fā)要學(xué)什么內(nèi)容 嵌入式開發(fā)學(xué)習(xí)路線介紹
客學(xué)院嵌入式開發(fā)講師在這里介紹嵌入式開發(fā)學(xué)習(xí)路線,希望對于嵌入式開發(fā)學(xué)習(xí)內(nèi)容不了解的讀者可以有所幫助。嵌入式開發(fā)要學(xué)什么內(nèi)容
發(fā)表于 06-30 10:07
嵌入式開發(fā)要學(xué)什么內(nèi)容 嵌入式開發(fā)學(xué)習(xí)路線介紹
學(xué)院嵌入式開發(fā)講師在這里介紹嵌入式開發(fā)學(xué)習(xí)路線,希望對于嵌入式開發(fā)學(xué)習(xí)內(nèi)容不了解的讀者可以有所幫助。嵌入式開發(fā)要學(xué)什么內(nèi)容
發(fā)表于 07-27 09:49
嵌入式開發(fā)要學(xué)什么?
隨著智能硬件的迅速發(fā)展,越來越多的人把目光投向了嵌入式開發(fā),想要更快進(jìn)入嵌入式開發(fā)領(lǐng)域,先來了解一下嵌入式開發(fā)要學(xué)什么? 以下是學(xué)員總結(jié)的心得,具體
發(fā)表于 09-06 16:21
嵌入式開發(fā)要學(xué)什么
。嵌入式開發(fā)要學(xué)哪些,嵌入式可以簡單分為硬件與軟件,然而其中的知識體系卻是異常的龐大,這也是眾多新手望而卻步的一個原因,那究竟要如何才能成為一名嵌入式大咖呢?
發(fā)表于 01-18 06:36
嵌入式開發(fā)的基礎(chǔ)知識和入門必要步驟
ARM嵌入式開發(fā)是嵌入式開發(fā)領(lǐng)略比較熱門的技術(shù),本文針對ARM嵌入式開發(fā)的入門者給出嵌入式開發(fā)的基礎(chǔ)知識和入門必要步驟。1. 做個最小系統(tǒng)板
發(fā)表于 12-14 07:32
嵌入式開發(fā)
嵌入式開發(fā)就是指在嵌入式操作系統(tǒng)下進(jìn)行開發(fā),嵌入式Linux是以Linux為基礎(chǔ)的嵌入式作業(yè)系統(tǒng)。這里提供了
發(fā)表于 12-20 13:21
學(xué)嵌入式開發(fā)入門_學(xué)嵌入式開發(fā)需要看哪些書籍
現(xiàn)在嵌入式開發(fā)越來越吃香,很多人都想要學(xué)習(xí)卻不知道要從何下手。本文分析了學(xué)習(xí)嵌入式軟件開發(fā)需要具備哪些基本知識和技能,開發(fā)學(xué)習(xí)的基本步驟,并給出了各種參考資料及網(wǎng)站,同時小編還推薦了學(xué)
什么是嵌入式開發(fā)板_學(xué)嵌入式用什么開發(fā)板
本文首先介紹了嵌入式開發(fā)板的功能作用,其次闡述了學(xué)嵌入式用什么開發(fā)板,分別推薦了fs4412開發(fā)板、mini2440
發(fā)表于 05-18 11:14
?6963次閱讀
嵌入式開發(fā)要學(xué)什么嵌入式開發(fā)的一些入門教材推薦
本文檔的主要內(nèi)容詳細(xì)介紹的是嵌入式開發(fā)要學(xué)什么嵌入式開發(fā)的一些入門教材推薦資料免費(fèi)下載教材包括了:ARM嵌入式項目開發(fā)三位一體實戰(zhàn)精講,C
發(fā)表于 01-10 14:46
?27次下載
嵌入式開發(fā)的產(chǎn)品有哪些_嵌入式開發(fā)的流程
本文主要闡述了嵌入式開發(fā)的產(chǎn)品,其次介紹了嵌入式開發(fā)的流程。
發(fā)表于 08-31 15:38
?1.1w次閱讀
嵌入式開發(fā)資料免費(fèi)分享
嵌入式開發(fā)資料免費(fèi)分享嵌入式工程師經(jīng)驗分享:如何學(xué)習(xí)嵌入式開發(fā)截取文檔部分學(xué)習(xí)嵌入式工程師經(jīng)驗分享的資料分享給大家,文檔上從、嵌入式系統(tǒng)的概
發(fā)表于 10-21 11:07
?46次下載
嵌入式開發(fā)培訓(xùn)學(xué)什么?嵌入式開發(fā)板知識講解
嵌入式開發(fā)就是指在嵌入式操作系統(tǒng)下進(jìn)行開發(fā),一般常用的系統(tǒng)有WinCE,ucos,vxworks,linux,android等。另外,用c,c++或匯編
發(fā)表于 11-02 20:21
?16次下載
嵌入式學(xué)習(xí)培訓(xùn)能學(xué)會嗎?嵌入式開發(fā)培訓(xùn)都要學(xué)什么?
嵌入式學(xué)習(xí)培訓(xùn)能學(xué)會嗎?嵌入式開發(fā)培訓(xùn)都要學(xué)什么?掌握Linux常用操作命令,與系統(tǒng)管理;理解嵌入式系統(tǒng)進(jìn)程管理,文件管理,Linux內(nèi)核;熟悉ARM在不同硬件平臺下的操作系統(tǒng)移植和設(shè)
發(fā)表于 11-03 10:06
?15次下載
評論