精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

嵌入式開發還有必要學匯編嗎?

strongerHuang ? 來源:嵌入式專欄 ? 2023-07-10 11:22 ? 次閱讀

關注+星標公眾,不錯過精彩內容

最近又看到關于【嵌入式開發有沒有必要學匯編話題 我覺得學匯編有學匯編的道理,不學也有不學的道理,這個很正常。不同的人有不同的觀點,討論激烈也很正常。 現在可能很少看到匯編程序了,但單片機的啟動文件、RTOS底層等一些地方,依然還有匯編代碼的身影。 不知道大家有沒有學過匯編,或者有沒有用匯編語言編過程? 下面結合我學習匯編的經歷,以及匯編點燈給大家說說。

學習匯編語言

我在2010年學習單片機編程的時候,老師教學都還是用匯編教我們,包括教學實驗,也是要求我們用匯編寫程序。
MOV  A,#00H
MOV  P1,A
我記得那會兒,老師要求我們把匯編指令背下來。雖然現在很多匯編指令寫不出來了,但看到很多匯編代碼,還是基本明白它的意思。 以前計算機三級(PC技術)的上機考試,就是用匯編編程,我那個時候上機考試還是滿分。當時覺得自己很牛逼,現在看來就是一菜鳥

匯編轉C語言

剛開始學習匯編那會兒,我真的用匯編在51單片機上寫流水燈程序。后面看了用C語言寫流水燈程序,突然發現,哇,用C語言寫程序還能這么簡單、方便。 于是,我就那個時候開始放棄了匯編,轉向了C語言。包括后面我在大學實驗室自己學習、DIY做東西、以及后面的全國大學生電子設計競賽,都是用C語言編寫的程序。 10行匯編程序,可能只需要一行C語言代碼就能實現,這是C語言相比匯編簡化的優點。 但是,C語言編寫的程序,經過編譯,也會轉為匯編。比如我們在線調試代碼的時候,會看到類似的“匯編窗口”:0c18daa0-1eca-11ee-962d-dac502259ad0.png ?因為以前單片機的運行速度不高,且內存和Flash容量不大,要求節約程序空間。 所以使用匯編的優點:代碼運行效率更高、更節約代碼存儲空間

對比匯編和C語言點燈程序

匯編語言寫程序的主要缺點:語法復雜、可讀性差等。 下面分享一個實例:51單片機上的流水燈程序。分別用C語言和編寫出來,大家對比一下就知道了。 C語言版:
/******************** 宏定義 **************************/
#define   MAIN_Fosc    22118400L  //定義主時鐘


/******************** 延時函數 **************************/
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次下載

    嵌入式開發

    嵌入式開發就是指在嵌入式操作系統下進行開發嵌入式Linux是以Linux為基礎的嵌入式作業系統。這里提供了
    發表于 12-20 13:21
    <b class='flag-5'>嵌入式開發</b>

    嵌入式開發入門_嵌入式開發需要看哪些書籍

    現在嵌入式開發越來越吃香,很多人都想要學習卻不知道要從何下手。本文分析了學習嵌入式軟件開發需要具備哪些基本知識和技能,開發學習的基本步驟,并給出了各種參考資料及網站,同時小編還推薦了學
    的頭像 發表于 04-04 10:25 ?2.5w次閱讀

    什么是嵌入式開發板_嵌入式用什么開發

    本文首先介紹了嵌入式開發板的功能作用,其次闡述了嵌入式用什么開發板,分別推薦了fs4412開發板、mini2440
    發表于 05-18 11:14 ?7107次閱讀

    嵌入式開發什么嵌入式開發的一些入門教材推薦

    本文檔的主要內容詳細介紹的是嵌入式開發什么嵌入式開發的一些入門教材推薦資料免費下載教材包括了:ARM嵌入式項目開發三位一體實戰精講,C
    發表于 01-10 14:46 ?27次下載
    <b class='flag-5'>嵌入式開發</b>要<b class='flag-5'>學</b>什么<b class='flag-5'>嵌入式開發</b>的一些入門教材推薦

    嵌入式開發資料免費分享

    嵌入式開發資料免費分享嵌入式工程師經驗分享:如何學習嵌入式開發截取文檔部分學習嵌入式工程師經驗分享的資料分享給大家,文檔上從、嵌入式系統的概
    發表于 10-21 11:07 ?47次下載
    <b class='flag-5'>嵌入式開發</b>資料免費分享

    嵌入式開發培訓什么?嵌入式開發板知識講解

    嵌入式開發就是指在嵌入式操作系統下進行開發,一般常用的系統有WinCE,ucos,vxworks,linux,android等。另外,用c,c++或匯編
    發表于 11-02 20:21 ?16次下載
    <b class='flag-5'>嵌入式開發</b>培訓<b class='flag-5'>學</b>什么?<b class='flag-5'>嵌入式開發</b>板知識講解

    嵌入式學習培訓能學會嗎?嵌入式開發培訓都要什么?

    嵌入式學習培訓能學會嗎?嵌入式開發培訓都要什么?掌握Linux常用操作命令,與系統管理;理解嵌入式系統進程管理,文件管理,Linux內核;熟悉ARM在不同硬件平臺下的操作系統移植和設
    發表于 11-03 10:06 ?15次下載
    <b class='flag-5'>嵌入式</b>學習培訓能學會嗎?<b class='flag-5'>嵌入式開發</b>培訓都要<b class='flag-5'>學</b>什么?