一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式開(kāi)發(fā)還有必要學(xué)匯編嗎?

strongerHuang ? 來(lái)源:嵌入式專欄 ? 2023-07-10 11:22 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

關(guān)注+星標(biāo)公眾號(hào),不錯(cuò)過(guò)精彩內(nèi)容

最近又看到關(guān)于【嵌入式開(kāi)發(fā)有沒(méi)有必要學(xué)匯編的話題。 我覺(jué)得學(xué)匯編有學(xué)匯編的道理,不學(xué)也有不學(xué)的道理,這個(gè)很正常。不同的人有不同的觀點(diǎn),討論激烈也很正常。 現(xiàn)在可能很少看到匯編程序了,但單片機(jī)的啟動(dòng)文件、RTOS底層等一些地方,依然還有匯編代碼的身影。 不知道大家有沒(méi)有學(xué)過(guò)匯編,或者有沒(méi)有用匯編語(yǔ)言編過(guò)程? 下面結(jié)合我學(xué)習(xí)匯編的經(jīng)歷,以及匯編點(diǎn)燈給大家說(shuō)說(shuō)。

學(xué)習(xí)匯編語(yǔ)言

我在2010年學(xué)習(xí)單片機(jī)編程的時(shí)候,老師教學(xué)都還是用匯編教我們,包括教學(xué)實(shí)驗(yàn),也是要求我們用匯編寫程序。
MOV  A,#00H
MOV  P1,A
我記得那會(huì)兒,老師要求我們把匯編指令背下來(lái)。雖然現(xiàn)在很多匯編指令寫不出來(lái)了,但看到很多匯編代碼,還是基本明白它的意思。 以前計(jì)算機(jī)三級(jí)(PC技術(shù))的上機(jī)考試,就是用匯編編程,我那個(gè)時(shí)候上機(jī)考試還是滿分。當(dāng)時(shí)覺(jué)得自己很牛逼,現(xiàn)在看來(lái)就是一菜鳥(niǎo)

匯編轉(zhuǎn)C語(yǔ)言

剛開(kāi)始學(xué)習(xí)匯編那會(huì)兒,我真的用匯編在51單片機(jī)上寫流水燈程序。后面看了用C語(yǔ)言寫流水燈程序,突然發(fā)現(xiàn),哇,用C語(yǔ)言寫程序還能這么簡(jiǎn)單、方便。 于是,我就那個(gè)時(shí)候開(kāi)始放棄了匯編,轉(zhuǎn)向了C語(yǔ)言。包括后面我在大學(xué)實(shí)驗(yàn)室自己學(xué)習(xí)、DIY做東西、以及后面的全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽,都是用C語(yǔ)言編寫的程序。 10行匯編程序,可能只需要一行C語(yǔ)言代碼就能實(shí)現(xiàn),這是C語(yǔ)言相比匯編簡(jiǎn)化的優(yōu)點(diǎn)。 但是,C語(yǔ)言編寫的程序,經(jīng)過(guò)編譯,也會(huì)轉(zhuǎn)為匯編。比如我們?cè)诰€調(diào)試代碼的時(shí)候,會(huì)看到類似的“匯編窗口”:0c18daa0-1eca-11ee-962d-dac502259ad0.png ?因?yàn)橐郧皢纹瑱C(jī)的運(yùn)行速度不高,且內(nèi)存和Flash容量不大,要求節(jié)約程序空間。 所以使用匯編的優(yōu)點(diǎn):代碼運(yùn)行效率更高、更節(jié)約代碼存儲(chǔ)空間。

對(duì)比匯編和C語(yǔ)言點(diǎn)燈程序

匯編語(yǔ)言寫程序的主要缺點(diǎn):語(yǔ)法復(fù)雜、可讀性差等。 下面分享一個(gè)實(shí)例:51單片機(jī)上的流水燈程序。分別用C語(yǔ)言和編寫出來(lái),大家對(duì)比一下就知道了。 C語(yǔ)言版:
/******************** 宏定義 **************************/
#define   MAIN_Fosc    22118400L  //定義主時(shí)鐘


/******************** 延時(shí)函數(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;
  }
}
匯編語(yǔ)言版:
;******************** 宏定義 **************************/
Fosc_KHZ  EQU  22118  ;22118KHZ


STACK_POIRTER  EQU    0D0H  ;堆棧開(kāi)始地質(zhì)




;******************** 延時(shí)函數(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    ;延時(shí)250ms
  LCALL  F_delay_ms    ;延時(shí)250ms
  SETB  P1.7


  CLR    P1.6
  MOV    A, #250
  LCALL  F_delay_ms    ;延時(shí)250ms
  LCALL  F_delay_ms    ;延時(shí)250ms
  SETB  P1.6


  CLR    P4.7
  MOV    A, #250
  LCALL  F_delay_ms    ;延時(shí)250ms
  LCALL  F_delay_ms    ;延時(shí)250ms
  SETB  P4.7


  CLR    P4.6
  MOV    A, #250
  LCALL  F_delay_ms    ;延時(shí)250ms
  LCALL  F_delay_ms    ;延時(shí)250ms
  SETB  P4.6


  SJMP  L_MainLoop
上面兩個(gè)程序,實(shí)現(xiàn)的功能都一樣(流水燈),但對(duì)比代碼,大家發(fā)現(xiàn)有啥區(qū)別? 對(duì)于有匯編基礎(chǔ)的同學(xué)來(lái)說(shuō),可能這個(gè)簡(jiǎn)單的流水燈程序還是很好理解。 但是,對(duì)于大部分人來(lái)說(shuō),肯定都會(huì)覺(jué)得匯編很難讀。是的,這個(gè)是匯編的“特點(diǎn)”。

最后

匯編語(yǔ)法,對(duì)于絕大部分讀者來(lái)說(shuō),我現(xiàn)在是不建議再深入學(xué)習(xí)了,只需要了解一些基礎(chǔ)的內(nèi)容即可。 有少部分人,想從事底層開(kāi)發(fā),比如底層驅(qū)動(dòng)、單片機(jī)驗(yàn)證、固件庫(kù)開(kāi)發(fā)等這些讀者,有時(shí)間還是可以進(jìn)一步了解匯編的一些技術(shù)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141773
  • 嵌入式開(kāi)發(fā)

    關(guān)注

    18

    文章

    1077

    瀏覽量

    48878
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70751

原文標(biāo)題:嵌入式開(kāi)發(fā)還有必要學(xué)匯編嗎?

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    學(xué)嵌入式軟件開(kāi)發(fā)需要些什么知識(shí)??

    CE。linux C linux shell 等都要會(huì)。另外,嵌入式肯定要學(xué)的是arm,因?yàn)橐詀rm為平臺(tái)開(kāi)發(fā)項(xiàng)目。還有就是QTdesigner ,是做圖形化界面用的,
    發(fā)表于 09-30 09:32

    嵌入式開(kāi)發(fā)學(xué)什么內(nèi)容 嵌入式開(kāi)發(fā)學(xué)習(xí)路線介紹

    ,創(chuàng)客學(xué)院嵌入式開(kāi)發(fā)講師在這里介紹嵌入式開(kāi)發(fā)學(xué)習(xí)路線,希望對(duì)于嵌入式開(kāi)發(fā)學(xué)習(xí)內(nèi)容不了解的讀者可以有所幫助?! ?b class='flag-5'>嵌入式開(kāi)發(fā)要學(xué)什么內(nèi)容
    發(fā)表于 03-01 10:13

    嵌入式開(kāi)發(fā)學(xué)什么內(nèi)容 嵌入式開(kāi)發(fā)學(xué)習(xí)路線介紹

    客學(xué)院嵌入式開(kāi)發(fā)講師在這里介紹嵌入式開(kāi)發(fā)學(xué)習(xí)路線,希望對(duì)于嵌入式開(kāi)發(fā)學(xué)習(xí)內(nèi)容不了解的讀者可以有所幫助。嵌入式開(kāi)發(fā)學(xué)什么內(nèi)容
    發(fā)表于 06-30 10:07

    嵌入式開(kāi)發(fā)學(xué)什么內(nèi)容 嵌入式開(kāi)發(fā)學(xué)習(xí)路線介紹

    學(xué)院嵌入式開(kāi)發(fā)講師在這里介紹嵌入式開(kāi)發(fā)學(xué)習(xí)路線,希望對(duì)于嵌入式開(kāi)發(fā)學(xué)習(xí)內(nèi)容不了解的讀者可以有所幫助。嵌入式開(kāi)發(fā)學(xué)什么內(nèi)容
    發(fā)表于 07-27 09:49

    嵌入式開(kāi)發(fā)學(xué)什么?

      隨著智能硬件的迅速發(fā)展,越來(lái)越多的人把目光投向了嵌入式開(kāi)發(fā),想要更快進(jìn)入嵌入式開(kāi)發(fā)領(lǐng)域,先來(lái)了解一下嵌入式開(kāi)發(fā)學(xué)什么?  以下是學(xué)員總結(jié)的心得,具體
    發(fā)表于 09-06 16:21

    嵌入式開(kāi)發(fā)學(xué)什么

    。嵌入式開(kāi)發(fā)學(xué)哪些,嵌入式可以簡(jiǎn)單分為硬件與軟件,然而其中的知識(shí)體系卻是異常的龐大,這也是眾多新手望而卻步的一個(gè)原因,那究竟要如何才能成為一名嵌入式大咖呢?
    發(fā)表于 01-18 06:36

    嵌入式開(kāi)發(fā)的基礎(chǔ)知識(shí)和入門必要步驟

    ARM嵌入式開(kāi)發(fā)嵌入式開(kāi)發(fā)領(lǐng)略比較熱門的技術(shù),本文針對(duì)ARM嵌入式開(kāi)發(fā)的入門者給出嵌入式開(kāi)發(fā)的基礎(chǔ)知識(shí)和入門必要步驟。1. 做個(gè)最小系統(tǒng)板
    發(fā)表于 12-14 07:32

    基于ARM的嵌入式開(kāi)發(fā)

    基于ARM的嵌入式開(kāi)發(fā):華清遠(yuǎn)見(jiàn)/孫天澤基于ARM的嵌入式開(kāi)發(fā)內(nèi)容有:ARM簡(jiǎn)介,基于ARM的嵌入式產(chǎn)品,ARM架構(gòu),基于ARM的嵌入式開(kāi)發(fā)。
    發(fā)表于 10-04 08:49 ?83次下載

    嵌入式開(kāi)發(fā)

    嵌入式開(kāi)發(fā)就是指在嵌入式操作系統(tǒng)下進(jìn)行開(kāi)發(fā),嵌入式Linux是以Linux為基礎(chǔ)的嵌入式作業(yè)系統(tǒng)。這里提供了
    發(fā)表于 12-20 13:21
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>

    學(xué)嵌入式開(kāi)發(fā)入門_學(xué)嵌入式開(kāi)發(fā)需要看哪些書(shū)籍

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

    什么是嵌入式開(kāi)發(fā)板_學(xué)嵌入式用什么開(kāi)發(fā)

    本文首先介紹了嵌入式開(kāi)發(fā)板的功能作用,其次闡述了學(xué)嵌入式用什么開(kāi)發(fā)板,分別推薦了fs4412開(kāi)發(fā)板、mini2440
    發(fā)表于 05-18 11:14 ?7496次閱讀

    嵌入式開(kāi)發(fā)學(xué)什么嵌入式開(kāi)發(fā)的一些入門教材推薦

    本文檔的主要內(nèi)容詳細(xì)介紹的是嵌入式開(kāi)發(fā)學(xué)什么嵌入式開(kāi)發(fā)的一些入門教材推薦資料免費(fèi)下載教材包括了:ARM嵌入式項(xiàng)目開(kāi)發(fā)三位一體實(shí)戰(zhàn)精講,C
    發(fā)表于 01-10 14:46 ?27次下載
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>要<b class='flag-5'>學(xué)</b>什么<b class='flag-5'>嵌入式開(kāi)發(fā)</b>的一些入門教材推薦

    嵌入式開(kāi)發(fā)資料免費(fèi)分享

    嵌入式開(kāi)發(fā)資料免費(fèi)分享嵌入式工程師經(jīng)驗(yàn)分享:如何學(xué)習(xí)嵌入式開(kāi)發(fā)截取文檔部分學(xué)習(xí)嵌入式工程師經(jīng)驗(yàn)分享的資料分享給大家,文檔上從、嵌入式系統(tǒng)的概
    發(fā)表于 10-21 11:07 ?47次下載
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>資料免費(fèi)分享

    嵌入式開(kāi)發(fā)培訓(xùn)學(xué)什么?嵌入式開(kāi)發(fā)板知識(shí)講解

    嵌入式開(kāi)發(fā)就是指在嵌入式操作系統(tǒng)下進(jìn)行開(kāi)發(fā),一般常用的系統(tǒng)有WinCE,ucos,vxworks,linux,android等。另外,用c,c++或匯編
    發(fā)表于 11-02 20:21 ?16次下載
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>培訓(xùn)<b class='flag-5'>學(xué)</b>什么?<b class='flag-5'>嵌入式開(kāi)發(fā)</b>板知識(shí)講解

    嵌入式學(xué)習(xí)培訓(xùn)能學(xué)會(huì)嗎?嵌入式開(kāi)發(fā)培訓(xùn)都要學(xué)什么?

    嵌入式學(xué)習(xí)培訓(xùn)能學(xué)會(huì)嗎?嵌入式開(kāi)發(fā)培訓(xùn)都要學(xué)什么?掌握Linux常用操作命令,與系統(tǒng)管理;理解嵌入式系統(tǒng)進(jìn)程管理,文件管理,Linux內(nèi)核;熟悉ARM在不同硬件平臺(tái)下的操作系統(tǒng)移植和設(shè)
    發(fā)表于 11-03 10:06 ?15次下載
    <b class='flag-5'>嵌入式</b>學(xué)習(xí)培訓(xùn)能學(xué)會(huì)嗎?<b class='flag-5'>嵌入式開(kāi)發(fā)</b>培訓(xùn)都要<b class='flag-5'>學(xué)</b>什么?