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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 幾種延時(shí)的匯編執(zhí)行代碼對(duì)比與總結(jié)

          幾種延時(shí)的匯編執(zhí)行代碼對(duì)比與總結(jié)

          作者: 時(shí)間:2013-04-07 來(lái)源:網(wǎng)絡(luò) 收藏

          拜讀了網(wǎng)上《 Keil C 的簡(jiǎn)單研究 》(by: InfiniteSpace Studio/isjfk, 1.21.2004 )一文,借鑒了文中的方法,測(cè)試發(fā)現(xiàn)有一點(diǎn)點(diǎn)出入,原文作者在計(jì)算延時(shí)時(shí)間的時(shí)候是否忘了加上RET指令……下面介紹我的測(cè)試結(jié)果,歡迎交流探討——

          一、單獨(dú)定義變量,for語(yǔ)句

          28: delay1(1);

          C:0x0005 7F01 MOV R7,#0x01

          C:0x0007 1121 ACALL delay1(C:0021)

          12: void delay1(unsigned char k)

          13: {

          17: unsigned char i=0;

          C:0x0021 E4 CLR A

          C:0x0022 FE MOV R6,A

          18: for(i=0;i0;i--);相同

          C:0x0023 EE MOV A,R6

          C:0x0024 C3 CLR C

          C:0x0025 9F SUBB A,R7

          C:0x0026 5003 JNC C:002B

          C:0x0028 0E INC R6

          C:0x0029 80F8 SJMP C:0023

          19: }

          C:0x002B 22 RET

          分析:

          delay1(1); 410-390=20

          delay1(2); 439-411=28

          delay1(3); 476-440=36

          即:指令周期(即實(shí)際延時(shí))= 12 + 延時(shí)參數(shù) * 8

          二、不再重新定義變量,for語(yǔ)句

          28: delay1(1);

          C:0x0005 7F01 MOV R7,#0x01

          C:0x0007 1123 ACALL delay1(C:0023)

          12: void delay1(unsigned char k)

          13: {

          18: for(;k>0;k--);

          C:0x0023 EF MOV A,R7

          C:0x0024 D3 SETB C

          C:0x0025 9400 SUBB A,#0x00

          C:0x0027 4003 JC C:002C

          C:0x0029 1F DEC R7

          C:0x002A 80F7 SJMP delay1(C:0023)

          19: }

          C:0x002C 22 RET

          分析:

          delay1(1); 491-473=18

          delay1(2); 518-492=26

          指令周期(即實(shí)際延時(shí))= 10 + 延時(shí)參數(shù) * 8

          對(duì)比一和二可知,延時(shí)函數(shù)中有重新定義循環(huán)變量i時(shí),理所當(dāng)然地多了2行代碼

          不知原文中 “其生成的代碼是一樣的?!钡慕Y(jié)論是如何得來(lái)的?

          三、for語(yǔ)句,改變循環(huán)結(jié)束條件

          23: delay1(1);

          C:0x0005 7F01 MOV R7,#0x01

          C:0x0007 1123 ACALL delay1(C:0023)

          11: void delay1(unsigned char i)

          12: {

          13: // while(--i);

          14: // while(i--);

          15: for(; i != 0; i--);

          C:0x0023 EF MOV A,R7

          C:0x0024 6003 JZ C:0029

          C:0x0026 1F DEC R7

          C:0x0027 80FA SJMP delay1(C:0023)


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();