<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)C與匯編自由轉(zhuǎn)換

          單片機(jī)C與匯編自由轉(zhuǎn)換

          作者: 時(shí)間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
          keil3現(xiàn)在流行一種怪毛病,就是安裝了keil后用不了,那么那里出了問題?
          用這樣的注冊(cè)機(jī),要把keil軟件里的ID好考過來覆蓋上面的00000-000000,再生成注冊(cè)碼就能用了。

          ②在KILE軟件的菜單中,選擇Project-->Options for Target Target 1,-->Listing選擇Assembly code就能生產(chǎn)*.LST文件。在LST文件中就有生產(chǎn)的匯編代碼。如果便于直觀查看,在調(diào)試時(shí),選擇Disassembly可以單步調(diào)試擦看C-->匯編的轉(zhuǎn)換。

          本文引用地址:http://www.ex-cimer.com/article/201611/316995.htm

          ③C轉(zhuǎn)匯編的實(shí)際過程是,C--->匯編,C--->HEX--->匯編,后面的這個(gè)叫反匯編。再有了LST,那么如何轉(zhuǎn)呢?

          1、匯編和C語言都一樣,通常都是程序模塊化寫程序,那么匯編和C都按照模塊化轉(zhuǎn)過來。

          2、注意不要堆棧溢出,比如CALL不要用得過多,多添加jmp跳轉(zhuǎn)。

          3、修改完畢后,注意時(shí)間的匹配、注意代碼書寫的優(yōu)化。

          4、如果是改為不同芯片的使用,PIC<--->51、AVR<--->51、430<---->51等待都要注意匯編指令功能相似,但是格式有變,仔細(xì)修改反復(fù)運(yùn)行幾次方能得到理想效果。

          5、綜上,C<--->匯編,無論你是正轉(zhuǎn)還是反轉(zhuǎn),你必須對(duì)要轉(zhuǎn)成的語言非常熟悉,實(shí)際上你懂原理,基本上都能重寫一遍,只是通過這樣的轉(zhuǎn)換,能極大地提高效率,修修改改就完事。

          ④C語言調(diào)用匯編子程序,把匯編語句嵌入C代碼中,或把匯編封裝起來。按如下設(shè)置:

          1、在Project Workspace中右鍵.c文件,并寫勾選OptionsforFile中的兩項(xiàng),Generate Assembler SRC File和Assemble SRC File(勾選后成實(shí)線勾)

          2、代碼書寫有這樣兩種格式:(仿真時(shí)在.src文件中我們能看到整體編譯后的匯編)

          #pragma ASM
          MOV A, #0xAA
          MOV P1, A
          #pragma ENDASM

          或者

          __asm MOV A, #0x33

          __asm MOV P2, A

          3、若要把匯編直接改為C這個(gè)沒辦法,只能按匯編語句逐步用C修改,把寄存器的位配置好,時(shí)間達(dá)到要求,按匯編的時(shí)序改就簡(jiǎn)單可靠了。

          4、對(duì)于ARM你就自認(rèn)倒霉吧,動(dòng)不動(dòng)就用C直接調(diào)用匯編子程序(為了效率)。盡量別把底層匯編改了。



          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();