新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機累加器A與ACC區別

        單片機累加器A與ACC區別

        作者: 時間:2016-11-27 來源:網絡 收藏
        累加器A與ACC區別

        累加器寫成A或ACC在51匯編語言指令中是有區別的。

        本文引用地址:http://www.104case.com/article/201611/322125.htm

        ACC在匯編后的機器碼必有一個字節的操作數,即累加器的字節地址E0H,A在匯編后則隱含在指令操作碼中。所以在指令中A不能用ACC來替代,而對A的特殊功能寄存器直接尋址和累加器某一位的尋址要用ACC,而不能寫成A。

        例如,指令INCA的機器碼是04H,屬于寄存器尋址,寫成ACC后則成了INCDIRECT的格式,對應機器碼為05E0H。

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

        PUSHACC

        POPACC

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

        MOV40H,R0,

        MOV40H,00H

        假設當前工作寄存器為0組,前者屬于寄存器尋址,后者屬于存儲器直接尋址。但R0和00H的級別不同,00H只是RAM區的一個普通單元,其讀寫速度要比慢得多。微型計算機內部通常設置工作寄存器組,運算的結果可以放在寄存器中而不必每次都放到存儲器里,可以提高機器的工作速度。其實寄存器也是一種存儲器,只不過它是CPU中的部件,速度最快而已。

        寄存器和一般的存儲器是混疊的,同一單元用不同的指令,它就會執行不同的功能。

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

        A和ACC的實質是一樣的,對應地址都是0E0H,只是匯編在使用時,在格式上取了兩個名字。使用有一定的規律:

        當其要進行位表示時,必須用ACC,比如要寫成ACC.7,而不能寫成A.7;

        但當其作為8位二進制數時,ACC和A都能用,但還是有區別:比如INCACC和INCA都能用,還有PUSHACC,POPACC不可以寫成PUSHA和POPA

        在KeilC中用了這樣一個命令:PUSHA,匯編時提示錯誤,后來我把PUSHA改為PUSHACC就可以通過了,請問這是什么回事?A與ACC是同一個寄存器嗎?

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

        MOVA,#data

        這是一個2字節指令,第1個字節是操作碼,第2個字節是立即數。由于是默認與ACC相關,所以用A即可,且不占指令字節數。

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

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

        在mov指令中可通用,用"a"時為2字節1周期;用"acc"時為3字節2周期。

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

        匯編結果:"inca"為"04h"運行時間1周期;"incacc"為"05h,e0h"運行時間2周期。

        通俗的解釋為:acc是地址為E0H的寄存器,A是標準的無地址的累加器,自然后者便捷,但兩者在值上互為鏡像。




        關鍵詞: 單片機累加

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 类乌齐县| 定陶县| 扎囊县| 射阳县| 安远县| 屏东县| 南陵县| 吉木乃县| 昌邑市| 克拉玛依市| 鄂尔多斯市| 浮山县| 佛山市| 仲巴县| 金阳县| 咸阳市| 区。| 仁怀市| 西畴县| 元阳县| 汝阳县| 原阳县| 砀山县| 高清| 江油市| 禹州市| 崇礼县| 昭觉县| 平遥县| 清远市| 石家庄市| 鹤壁市| 大港区| 莱州市| 钟山县| 普兰县| 巨鹿县| 霍邱县| 浦城县| 开阳县| 蒲城县|