成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用匯編和C語言 寫流水燈程序

開發(fā) 后端
現(xiàn)在可能很少看到匯編程序了,但單片機(jī)的啟動(dòng)文件、RTOS底層代碼等一些地方,依然還有匯編代碼的身影。不知道大家有沒有學(xué)過匯編,或者有沒有用匯編語言編過程?

 [[394717]]

現(xiàn)在可能很少看到匯編程序了,但單片機(jī)的啟動(dòng)文件、RTOS底層代碼等一些地方,依然還有匯編代碼的身影。

不知道大家有沒有學(xué)過匯編,或者有沒有用匯編語言編過程?

今天就給大家分享一下匯編語言的那些事。

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

我在10年學(xué)習(xí)單片機(jī)編程的時(shí)候,老師教學(xué)都還是用匯編教我們,包括教學(xué)實(shí)驗(yàn),也是要求我們用匯編寫程序。

  1. MOV  A,#00H 
  2. MOV  P1,A 

我記得那會(huì)兒,老師要求我們把匯編指令背下來。雖然現(xiàn)在很多匯編指令寫不出來了,但看到很多匯編代碼,還是基本明白它的意思。

以前計(jì)算機(jī)三級(jí)(PC技術(shù))的上機(jī)考試,就是用匯編編程,我那個(gè)時(shí)候上機(jī)考試還是滿分。當(dāng)時(shí)覺得自己很牛逼,現(xiàn)在看來就是一菜鳥圖片

2匯編轉(zhuǎn)C語言

剛開始學(xué)習(xí)匯編那會(huì)兒,我真的用匯編在51單片機(jī)上寫流水燈程序。后面看了用C語言寫流水燈程序,突然發(fā)現(xiàn),哇,用C語言寫程序還能這么簡單、方便。

于是,我就那個(gè)時(shí)候開始放棄了匯編,轉(zhuǎn)向了C語言。包括后面我在大學(xué)實(shí)驗(yàn)室自己學(xué)習(xí)、DIY做東西、以及后面的全國大學(xué)生電子設(shè)計(jì)競(jìng)賽,都是用C語言編寫的程序。

10行匯編程序,可能只需要一行C語言代碼就能實(shí)現(xiàn),這是C語言相比匯編簡化的優(yōu)點(diǎn)。

但是,C語言編寫的程序,經(jīng)過編譯,也會(huì)轉(zhuǎn)為匯編。比如我們?cè)诰€調(diào)試代碼的時(shí)候,會(huì)看到類似的“匯編窗口”:

因?yàn)橐郧皢纹瑱C(jī)的運(yùn)行速度不高,且內(nèi)存和Flash容量不大,要求節(jié)約程序空間。

所以使用匯編的優(yōu)點(diǎn):代碼運(yùn)行效率更高、更節(jié)約代碼存儲(chǔ)空間。

3對(duì)比用匯編和C語言寫流水燈程序

匯編語言寫程序的主要缺點(diǎn):語法復(fù)雜、可讀性差、代碼量大等。

下面分享一個(gè)實(shí)例:51單片機(jī)上的流水燈程序。分別用C語言和匯編寫出來,大家對(duì)比一下就知道了。

C語言版:

  1. /******************** 宏定義 **************************/ 
  2. #define   MAIN_Fosc    22118400L  //定義主時(shí)鐘 
  3.  
  4. /******************** 延時(shí)函數(shù) **************************/ 
  5. void  delay_ms(u8 ms) 
  6.      u16 i; 
  7.    do{ 
  8.         i = MAIN_Fosc / 13000; 
  9.       while(--i)  ;   //14T per loop 
  10.      }while(--ms); 
  11.  
  12. /******************** 主函數(shù) **************************/ 
  13. void main(void) 
  14.   P0M1 = 0;  P0M0 = 0;  //設(shè)置為準(zhǔn)雙向口 
  15.   P1M1 = 0;  P1M0 = 0;  //設(shè)置為準(zhǔn)雙向口 
  16.   P2M1 = 0;  P2M0 = 0;  //設(shè)置為準(zhǔn)雙向口 
  17.   P3M1 = 0;  P3M0 = 0;  //設(shè)置為準(zhǔn)雙向口 
  18.   P4M1 = 0;  P4M0 = 0;  //設(shè)置為準(zhǔn)雙向口 
  19.   P5M1 = 0;  P5M0 = 0;  //設(shè)置為準(zhǔn)雙向口 
  20.   P6M1 = 0;  P6M0 = 0;  //設(shè)置為準(zhǔn)雙向口 
  21.   P7M1 = 0;  P7M0 = 0;  //設(shè)置為準(zhǔn)雙向口 
  22.  
  23.   while(1) 
  24.   { 
  25.     P17 = 0; 
  26.     delay_ms(250); 
  27.     delay_ms(250); 
  28.     P17 = 1; 
  29.     P16 = 0; 
  30.     delay_ms(250); 
  31.     delay_ms(250); 
  32.     P16 = 1; 
  33.     P47 = 0; 
  34.     delay_ms(250); 
  35.     delay_ms(250); 
  36.     P47 = 1; 
  37.     P46 = 0; 
  38.     delay_ms(250); 
  39.     delay_ms(250); 
  40.     P46 = 1; 
  41.   } 

匯編語言版:

  1. ;******************** 宏定義 **************************/ 
  2. Fosc_KHZ  EQU  22118  ;22118KHZ 
  3.  
  4. STACK_POIRTER  EQU    0D0H  ;堆棧開始地質(zhì) 
  5.  
  6.  
  7. ;******************** 延時(shí)函數(shù) **************************/ 
  8. F_delay_ms: 
  9.   PUSH  02H    ;入棧R2 
  10.   PUSH  03H    ;入棧R3 
  11.   PUSH  04H    ;入棧R4 
  12.  
  13.   MOV    R2,A 
  14.  
  15. L_delay_ms_1: 
  16.   MOV    R3, #HIGH (Fosc_KHZ / 13) 
  17.   MOV    R4, #LOW (Fosc_KHZ / 13) 
  18.    
  19. L_delay_ms_2: 
  20.   MOV    A, R4      ;1T    Total 13T/loop 
  21.   DEC    R4        ;2T 
  22.   JNZ    L_delay_ms_3  ;4T 
  23.   DEC    R3 
  24. L_delay_ms_3: 
  25.   DEC    A        ;1T 
  26.   ORL    A, R3      ;1T 
  27.   JNZ    L_delay_ms_2  ;4T 
  28.    
  29.   DJNZ  R2, L_delay_ms_1 
  30.  
  31.   POP    04H    ;出棧R2 
  32.   POP    03H    ;出棧R3 
  33.   POP    02H    ;出棧R4 
  34.   RET 
  35.  
  36.  
  37. ;******************** 主程序 **************************/ 
  38.     ORG    0100H    ;reset 
  39. F_Main: 
  40.   CLR    A 
  41.   MOV    P0M1, A   ;設(shè)置為準(zhǔn)雙向口 
  42.    MOV    P0M0, A 
  43.   MOV    P1M1, A   ;設(shè)置為準(zhǔn)雙向口 
  44.    MOV    P1M0, A 
  45.   MOV    P2M1, A   ;設(shè)置為準(zhǔn)雙向口 
  46.    MOV    P2M0, A 
  47.   MOV    P3M1, A   ;設(shè)置為準(zhǔn)雙向口 
  48.    MOV    P3M0, A 
  49.   MOV    P4M1, A   ;設(shè)置為準(zhǔn)雙向口 
  50.    MOV    P4M0, A 
  51.   MOV    P5M1, A   ;設(shè)置為準(zhǔn)雙向口 
  52.    MOV    P5M0, A 
  53.   MOV    P6M1, A   ;設(shè)置為準(zhǔn)雙向口 
  54.    MOV    P6M0, A 
  55.   MOV    P7M1, A   ;設(shè)置為準(zhǔn)雙向口 
  56.    MOV    P7M0, A 
  57.  
  58.   MOV    SP, #STACK_POIRTER 
  59.   MOV    PSW, #0    ;選擇第0組R0~R7 
  60.  
  61. L_MainLoop: 
  62.   CLR    P1.7 
  63.   MOV    A, #250 
  64.   LCALL  F_delay_ms    ;延時(shí)250ms 
  65.   LCALL  F_delay_ms    ;延時(shí)250ms 
  66.   SETB  P1.7 
  67.  
  68.   CLR    P1.6 
  69.   MOV    A, #250 
  70.   LCALL  F_delay_ms    ;延時(shí)250ms 
  71.   LCALL  F_delay_ms    ;延時(shí)250ms 
  72.   SETB  P1.6 
  73.  
  74.   CLR    P4.7 
  75.   MOV    A, #250 
  76.   LCALL  F_delay_ms    ;延時(shí)250ms 
  77.   LCALL  F_delay_ms    ;延時(shí)250ms 
  78.   SETB  P4.7 
  79.  
  80.   CLR    P4.6 
  81.   MOV    A, #250 
  82.   LCALL  F_delay_ms    ;延時(shí)250ms 
  83.   LCALL  F_delay_ms    ;延時(shí)250ms 
  84.   SETB  P4.6 
  85.  
  86.   SJMP  L_MainLoop 

上面兩個(gè)程序,實(shí)現(xiàn)的功能都一樣(流水燈),但對(duì)比代碼,大家發(fā)現(xiàn)有啥區(qū)別?

對(duì)于有匯編基礎(chǔ)的同學(xué)來說,可能這個(gè)簡單的流水燈程序還是很好理解。

但是,對(duì)于大部分人來說,肯定都會(huì)覺得匯編很難讀。是的,這個(gè)是匯編的“特點(diǎn)”。

4最后

匯編語法,對(duì)于絕大部分讀者來說,我現(xiàn)在是不建議再深入學(xué)習(xí)了,只需要了解一些基礎(chǔ)的內(nèi)容即可。

有少部分人,想從事底層開發(fā),比如底層驅(qū)動(dòng)、單片機(jī)驗(yàn)證、固件庫開發(fā)等這些讀者,有時(shí)間還是可以進(jìn)一步了解匯編的一些技術(shù)。

 

責(zé)任編輯:武曉燕 來源: 嵌入式專欄
相關(guān)推薦

2017-01-12 22:36:30

2020-12-14 08:48:45

C語言嵌入式gcc

2009-08-13 17:04:09

C#語言C#程序

2014-04-15 15:35:32

CC語言

2010-03-25 18:13:06

Python編程語言

2022-02-19 22:47:46

編程語言開發(fā)C++

2009-09-11 08:44:36

2024-06-03 09:04:30

2015-03-19 09:46:32

程序員

2020-12-22 11:54:42

C語言Cortex-A9LED匯編

2012-03-20 09:20:40

Go語言

2010-04-07 14:54:20

Unix操作系統(tǒng)

2011-01-14 14:08:17

Linux匯編語言

2014-12-24 09:41:05

x86C#

2022-03-25 21:57:49

匯編Go語言

2014-08-22 16:29:12

應(yīng)用匯游戲評(píng)級(jí)資源策略

2021-05-27 08:59:09

Go匯編命令

2011-01-14 14:39:32

Linux匯編語言

2010-01-22 11:23:06

C++程序

2018-04-26 15:18:49

RTOS應(yīng)用MPU
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 超碰在线97国产 | 伊人精品视频 | 久草视频观看 | 国产精品国产a级 | 国产一级视频在线观看 | 一区二区三区视频在线 | 精品久久久久一区二区国产 | 国产一区二区三区在线 | 久久免费精品 | 成人国产毛片 | 人人爽人人草 | 欧美精品一区二区三区在线播放 | 黄色亚洲 | 狠狠干在线 | 综合久| 伊人久久在线 | 国产亚洲精品久久久久久牛牛 | 国产精品一区在线观看 | 亚洲福利免费 | 日本在线视频中文字幕 | 久久九精品 | 在线播放国产一区二区三区 | 欧美一级淫片免费视频黄 | 免费高清av| 国产成人免费 | a在线视频观看 | 日韩一区在线播放 | 91久久网站 | 久久草在线视频 | 先锋资源亚洲 | 国产电影一区 | 逼逼网 | 欧美久久久网站 | 日韩一及片| 91久久精品国产 | 亚洲天堂精品一区 | 成人免费视频7777777 | 欧美日韩免费视频 | 亚洲精品视频免费 | 国产成人在线观看免费 | 亚洲视频一区在线 |