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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)累加器A與ACC區(qū)別

          單片機(jī)累加器A與ACC區(qū)別

          作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏
          累加器A與ACC區(qū)別

          累加器寫(xiě)成A或ACC在51匯編語(yǔ)言指令中是有區(qū)別的。

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

          ACC在匯編后的機(jī)器碼必有一個(gè)字節(jié)的操作數(shù),即累加器的字節(jié)地址E0H,A在匯編后則隱含在指令操作碼中。所以在指令中A不能用ACC來(lái)替代,而對(duì)A的特殊功能寄存器直接尋址和累加器某一位的尋址要用ACC,而不能寫(xiě)成A。

          例如,指令I(lǐng)NCA的機(jī)器碼是04H,屬于寄存器尋址,寫(xiě)成ACC后則成了INCDIRECT的格式,對(duì)應(yīng)機(jī)器碼為05E0H。

          A和ACC都表示累加器,但A是累加器的代號(hào),在指令中默認(rèn)是無(wú)地址的,而ACC是累加器在指令中的直接地址(E0H),可出現(xiàn)在用直接尋址的任何地方,例如:

          PUSHACC

          POPACC

          類似:工作寄存器R0~R7在指令中也有兩種不同的寫(xiě)法,生成的機(jī)器碼也不同,如:

          MOV40H,R0,

          MOV40H,00H

          假設(shè)當(dāng)前工作寄存器為0組,前者屬于寄存器尋址,后者屬于存儲(chǔ)器直接尋址。但R0和00H的級(jí)別不同,00H只是RAM區(qū)的一個(gè)普通單元,其讀寫(xiě)速度要比慢得多。微型計(jì)算機(jī)內(nèi)部通常設(shè)置工作寄存器組,運(yùn)算的結(jié)果可以放在寄存器中而不必每次都放到存儲(chǔ)器里,可以提高機(jī)器的工作速度。其實(shí)寄存器也是一種存儲(chǔ)器,只不過(guò)它是CPU中的部件,速度最快而已。

          寄存器和一般的存儲(chǔ)器是混疊的,同一單元用不同的指令,它就會(huì)執(zhí)行不同的功能。

          一般的說(shuō)法:A表示了累加器中的內(nèi)容【寄存器尋址】;ACC表示了累加器的地址【直接尋址】。

          A和ACC的實(shí)質(zhì)是一樣的,對(duì)應(yīng)地址都是0E0H,只是匯編在使用時(shí),在格式上取了兩個(gè)名字。使用有一定的規(guī)律:

          當(dāng)其要進(jìn)行位表示時(shí),必須用ACC,比如要寫(xiě)成ACC.7,而不能寫(xiě)成A.7;

          但當(dāng)其作為8位二進(jìn)制數(shù)時(shí),ACC和A都能用,但還是有區(qū)別:比如INCACC和INCA都能用,還有PUSHACC,POPACC不可以寫(xiě)成PUSHA和POPA

          在KeilC中用了這樣一個(gè)命令:PUSHA,匯編時(shí)提示錯(cuò)誤,后來(lái)我把PUSHA改為PUSHACC就可以通過(guò)了,請(qǐng)問(wèn)這是什么回事?A與ACC是同一個(gè)寄存器嗎?

          所謂“A”是相關(guān)指令對(duì)累加器A的缺省指定(不占操作數(shù)指令),例如:

          MOVA,#data

          這是一個(gè)2字節(jié)指令,第1個(gè)字節(jié)是操作碼,第2個(gè)字節(jié)是立即數(shù)。由于是默認(rèn)與ACC相關(guān),所以用A即可,且不占指令字節(jié)數(shù)。

          而PUSH和POP沒(méi)有缺省指定累加器,要訪問(wèn)累加器就必須采用其所允許的直接尋址方式,“ACC”就是累加器A的地址。PUSH是直接尋址,后面一定跟的是直接地址。你可以看到reg51.h中ACC的直接地址是0xe0;也可以PUSHE0h;累加器有A、ACC和E0H三種表示形式,分屬兩種不同的尋址方法,使用A時(shí),為寄存器尋址,指令碼為04H,使用ACC和E0H時(shí),為直接尋址,指令碼為05E0H。可A的位7,為什么非得用ACC.7而不用A.7。這與位尋址有關(guān)系,位地址有四種:直接位地址;字節(jié)地址加位序號(hào);位名稱;特殊寄存器加位序號(hào)。

          為什么pushacc必須用acc,而不能用a,相反movx@dptr,a只能用a,而不能用ac?acc和a有什么區(qū)別?ACCisregister。Aisaunseparatablepartofopcode。

          在mov指令中可通用,用"a"時(shí)為2字節(jié)1周期;用"acc"時(shí)為3字節(jié)2周期。

          盡管物理地址相同,但push是對(duì)寄存器操作,而movx是對(duì)累加器操作。

          匯編結(jié)果:"inca"為"04h"運(yùn)行時(shí)間1周期;"incacc"為"05h,e0h"運(yùn)行時(shí)間2周期。

          通俗的解釋為:acc是地址為E0H的寄存器,A是標(biāo)準(zhǔn)的無(wú)地址的累加器,自然后者便捷,但兩者在值上互為鏡像。




          關(guān)鍵詞: 單片機(jī)累加

          評(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); })();