色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開發(fā)>學(xué)習(xí)STM32時為什么要學(xué)習(xí)匯編?

學(xué)習(xí)STM32時為什么要學(xué)習(xí)匯編?

2021-04-12 | pdf | 333.73KB | 次下載 | 3積分

資料介紹

不同的平臺的匯編代碼是不一樣的,最早的匯編在50年代就發(fā)明了,比很多人的父母的年齡都大,老掉牙,不用學(xué)習(xí)怎么寫匯編。一個公司有一個人知道怎么寫匯編就夠了。但要學(xué)習(xí)讀匯編,為什么學(xué)習(xí)匯編?

1、性能

直接翻譯為機(jī)器語言,性能最高。優(yōu)秀的C語言效率只能達(dá)到匯編的80%左右。其他高級語言跟匯編一比差得更遠(yuǎn)。語言越高級性能越差。很多bootloader和BIOS用匯編寫,匯編操作的是電腦手機(jī)剛剛上電時,硬件和初始化的那些命令,它們的性能的要求比較高,效率高開機(jī)速度更快。

分析問題

個人認(rèn)為,編程人與機(jī)器對話,我們寫C,寫JAVA,但是電腦并不認(rèn)識這些語言,電腦只認(rèn)識0和1;所以需要一個人來翻譯這些語言,這個翻譯官就是編譯器,但是編譯器不能百分之百準(zhǔn)確的表達(dá)程序員的意思,也就是所謂的翻譯有反義。例如,編譯器為了性能好一點(diǎn),可能會優(yōu)化變量和語句,這個過程可能好心辦壞事,把有用的操作優(yōu)化了。因此只有看懂一些匯編語句,才能分析程序真正執(zhí)行的流程。在問題難以定位的情況下,匯編可能是分析問題的最后一根稻草。
幫助理解硬件

有些學(xué)校的單片機(jī)課程是以匯編進(jìn)行教學(xué)的,主要原因就是匯編更貼近硬件。不過我不贊成這種做法,C語言能快速做出一點(diǎn)東西,有利于學(xué)生在放棄之前,增加成就感,好堅(jiān)持下去。但是匯編確實(shí)更貼近硬件。

LDR指令

為了便于理解下文,先介紹下LDR指令,其格式如下:

LDR{條件} 目的寄存器 <存儲器地址>

作用:將 存儲器地址 所指地址處連續(xù)的4個字節(jié)(1個字)的數(shù)據(jù)傳送到目的寄存器中。LDR指令的尋址方式比較靈活,實(shí)例如下:

LDR R0,[R1] ;將存儲器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0。
LDR R0,[R1,R2] ;將存儲器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器R0。
LDR R0,[R1,#8] ;將存儲器地址為R1+8的字?jǐn)?shù)據(jù)讀入寄存器R0。
LDR R0,[R1],R2 ;將存儲器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0,并將R1+R2的值存入R1。
LDR R0,[R1],#8 ;將存儲器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0,并將R1+8的值存入R1。
LDR R0,[R1,R2]! ;將存儲器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器R0,并將R1+R2的值存入R1。
LDR R0,[R1,LSL #3] ;將存儲器地址為R1*8的字?jǐn)?shù)據(jù)讀入寄存器R0。
LDR R0,[R1,R2,LSL #2] ;將存儲器地址為R1+R2*4的字?jǐn)?shù)據(jù)讀入寄存器R0。
LDR R0,[R1,,R2,LSL #2]!;將存儲器地址為R1+R2*4的字?jǐn)?shù)據(jù)讀入寄存器R0,并將R1+R2*4的值存入R1。
LDR R0,[R1],R2,LSL #2 ;將存儲器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0,并將R1+R2*4的值存入R1。
LDR R0,Label ;Label為程序標(biāo)號,Label必須是當(dāng)前指令的-4~4KB范圍內(nèi)。

要注意的是:

LDR Rd,[Rn],#0x04 ;這里Rd不允許是R15。

另外LDRB 的指令格式與LDR相似,只不過它是將存儲器地址中的8位(1個字節(jié))讀到目的寄存器中。LDRH的指令格式也與LDR相似,它是將內(nèi)存中的16位(半字)讀到目的寄存器中。

LDR R0,=0xff

這里的LDR不是arm指令,而是偽指令。這個時候與MOVE很相似,只不過MOV指令后的立即數(shù)是有限制的。這個立即數(shù)必須是0X00-OXFF范圍內(nèi)的數(shù)經(jīng)過偶數(shù)次右移得到的數(shù),所以MOV用起來比較麻煩,因?yàn)橛行?shù)不那么容易看出來是否合法。

2、如何在KEIL下閱讀匯編

按d進(jìn)入debug模式,在view下選擇disassembly window 。


看光標(biāo),c文件下指向了main函數(shù)的第一行。

匯編窗口也指向了對應(yīng)的語句。但是,在執(zhí)行C語言的第一行之前,仍然有許多操作要做,比如變量放在哪?在哪里調(diào)用了main函數(shù)等,這些操作都被集成開發(fā)環(huán)境IDE給封裝起來了。我們必須知道,在執(zhí)行main函數(shù)之前,有許多事情要做,只不過,初學(xué)的時候不必理會。以下是C語言源碼,功能是點(diǎn)亮LED

//main.c
#include   

int main(void)
{
    RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;

    GPIOB->CRL &= ~(0xf<<(1*4));

    GPIOB->CRL |= 0x2<<(1*4);     

    GPIOB->ODR &= ~(1<<1);

    return 0;             
}

//main.h
#define RCC_APB2ENR (*(unsigned int *)0x40021018)
#define GPIOB_CRL (*(unsigned int *)0x40010c00)
#define GPIOB_ODR (*(unsigned int *)0x40010c0c)

匯編窗口往上翻,確實(shí)很多語句,先看這幾行代碼的匯編:


先說最常用的兩句匯編:

LDR r0,[r1] r0 = *r1

STR r0,[r1] *r1 = r0

MOV r0,r1 r1->r0拷貝


從內(nèi)存0x0800 017c的32位數(shù)據(jù)拷貝到r0:

r0 = * 0x0800 017c

我們看到的 1000 4002其實(shí) 就是0x4002 1000。這里邊有個知識點(diǎn)叫做大小端模式,以下簡單講解,不能理解就記住。


這個數(shù)據(jù)是在地址是這么存放的:

  7C 7D 7E 7F
  00 10 02 40

實(shí)際數(shù)據(jù)是0x4002 1000

  * 0x0800 017c=0x4002 1000

然后r0的值+0x18也就是24 因?yàn)檫@個是第6號(第6號就是第7個的意思)元素

得到r0 = *0x4002 1018,r0的值由一個地址,變成了地址所存放的數(shù)據(jù)。

然后是或0x08操作,結(jié)果再復(fù)制給r0,*0x4002 1018 |=0x08

給r1分配地址,這個地址也是0x4002 1000, r1 = *0x4002 1000

把r0存放的值,(不是r0的地址,)存到r1+18的空間上

  *(r1+0x18) = r0
  *0x4002 1018 = (*0x4002 1018 |=0x08)
  *0x4002 1018|=0x08

最終結(jié)果:地址4002 1018的數(shù),執(zhí)行了或0x08的操作。再分析下一句 :


前兩句給r0分配空間,r0 = *0x4001 0c00

然后用BIC清除數(shù)據(jù)位,把4-7位清零,結(jié)果再賦值給r0。

*0x4001 0c00 &= ~(0xf0)
r1 = *0x4001 0c00
*0x4001 0c00 &= ~(0xf0)

剩下的不再詳細(xì)分析,直接給答案 :


***0x4001 0c00 |= 0x20
0x4001 0c0c &= ~(0x02)*

最終,可以看到C語句被翻譯成了意料之中的匯編語句,自己的意圖被機(jī)器準(zhǔn)確的理解了。

來源 | STM32嵌入式開發(fā)
整理文章為傳播相關(guān)技術(shù),版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系刪除

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1TC358743XBG評估板參考手冊
  2. 1.36 MB  |  330次下載  |  免費(fèi)
  3. 2開關(guān)電源基礎(chǔ)知識
  4. 5.73 MB  |  6次下載  |  免費(fèi)
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設(shè)計(jì)
  8. 0.60 MB  |  3次下載  |  免費(fèi)
  9. 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
  10. 0.61 MB  |  2次下載  |  免費(fèi)
  11. 6基于FPGA的C8051F單片機(jī)開發(fā)板設(shè)計(jì)
  12. 0.70 MB  |  2次下載  |  免費(fèi)
  13. 751單片機(jī)窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費(fèi)
  15. 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21548次下載  |  免費(fèi)
  9. 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537796次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191185次下載  |  免費(fèi)
  13. 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)
主站蜘蛛池模板: 国产中文字幕乱码一区 | 日韩精品无码久久一区二区三 | 永久免费的无码中文字幕 | 国产日韩亚洲精品视频 | 在线观看国产日韩 | 久久精品视频91 | 受被三个攻各种道具PLAY | 果冻传媒在线观看进入窗口 | 欧美日韩一区不卡在线观看 | 回复术士勇者免费观看全集 | 国产扒开美女双腿屁股流白浆 | 美女洗澡脱得一二干净 | 伊人久久中文字幕久久cm | 亚洲黄色免费观看 | 夜色88V精品国产亚洲AV | 美女岔开腿露出粉嫩花苞 | 白白操在线视频 | jizzjizz中国大学生 | qvod伦理片 | 戳女人屁股流水羞羞漫画 | 男人舔女人的阴部黄色骚虎视频 | 十二月综合缴缴情 | 国产AV麻豆出品在线播放 | 国产97视频在线观看 | 国产亚洲色婷婷久久精品99 | AV无码国产精品午夜A片麻豆 | 少女free大陆 | 最近更新2019中文字幕国语 | 有人在线观看的视频吗免费 | 天堂视频在线观看免费完整版 | 女的把腿张开男的往里面插 | 99re 这里只有精品 | 国产精品资源网站在线观看 | 动漫AV纯肉无码AV电影网 | 亚洲日韩欧美国产中文在线 | 天天啪免费视频在线看 | 麻豆Av国产在线播放 | 古风一女N男到处做高H | 欧美日韩中文国产一区发布 | 色欲狠狠躁天天躁无码中文字幕 | 亚洲深夜在线 |