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