累加器A與ACC區別

2022-03-24 00:22:08 字數 2483 閱讀 4750

累加器a與

acc區別

累加器寫成a

或acc在51

組合語言指令中是有區別的。

acc在彙編後的機器碼必有乙個位元組的運算元,是累加器的位元組位址

e0h,

a在彙編後則隱含在指令操作碼中。

所以在指令中a

不能用acc

來替代,而對

a的特殊功能暫存器

直接定址

和累加器某一

位的定址

要用acc

,而不能寫成a。

例如,指令inc a

的機器碼是

04h,屬於

暫存器定址

,寫成acc後則成了

inc direct

的格式,對應機器碼為05e0h。a和

acc都表示累加器,但

a是累加器的代號,在指令中預設是無位址的,而

acc是累加器在中的直接位址

(oeh)

,可出現在用直接定址的任何地方,例如: 

push acc 

pop acc

類似:工作暫存器r0~r7

在指令中也有兩種不同的寫法,生成的機器碼也不同,如:

mov 40h,

r0 , 

mov 40h,

00h假設當前工作暫存器為0

組,前者屬於暫存器定址,後者屬於儲存器直接定址。但r0和

00h的級別不同,

00h只是

ram區的乙個普通單元,其讀寫速度要比慢得多。微型計算機內部通常設定工作暫存器組,運算的結果可以放在暫存器中而不必每次都放到儲存器裡,可以提高機器的工作速度。其實暫存器也是一種儲存器,只不過它是

cpu中的部件,速度最快而已。

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

一般的說法:a

表示了累加器中的內容【暫存器定址】

;acc表示了累加器的位址【直接定址】。

a和acc

的實質是一樣的,對應位址都是

0e0h

,只是彙編在使用時,在格式上取了兩個名字。使用有一定的規律:

當其要進行位表示時,必須用acc

,比如要寫成

acc.7

,而不能寫成a.7

;但當其作為8

位二進位制數時,

acc和

a都能用,但還是有區別:比如 

inc acc

和inc a 

都能用,還有

push acc,

pop acc

不可以寫成

push a和

pop a

在keil c

中用了這樣乙個命令:

push

a ,彙編時提示錯誤,後來我把

push

a 改為 

push

acc 就可以通過了,請問這是什麼回事?a與

acc是同乙個暫存器嗎?

所謂「a」

是相關指令對累加器

a的預設指定(不佔運算元指令),

而push

和pop

沒有預設指定累加器,要訪問累加器就必須採用其所允許的直接定址方式,

「acc」

就是累加器

a的位址。

push

是直接定址,後面一定跟的是直接位址。你可以看到reg51.h

中acc

的直接位址是

0xe0

;也可以

push

e0h;累加器有a、

acc和

e0h三種表示形式,分屬兩種不同的定址方法,使用

a時,為暫存器定址,指令碼為

04h,使用

acc和

e0h時,為直接定址,指令碼為

05e0h。可a

的位7,為什麼非得用

acc.7

而不用a.7

為什麼push acc

必須用acc

,而不能用

a,相反

movx @dptr

,a只能用

a,而不能用ac?

acc和

a有什麼區別?

accis register

。ais a unseparatable part of opcode

。在mov

指令中可通用,用

"a"時為2位元組

1週期;用

"acc"時為3

位元組2週期。 

儘管實體地址相同,但push

是對暫存器操作,而

movx

是對累加器操作。 

彙編結果:"inc a"

為"04h"

執行時間1週期

;"inc acc"為

"05h

,e0h"執行時間

2週期。 

通俗的解釋為:acc

是位址為e0h

的暫存器,

a是標準的無位址的累加器,自然後者便捷,但兩者在值上互為映象

廣播變數與累加器

能不能將乙個rdd使用廣播變數廣播出去?不能 因為rdd是不存資料的。可以將rdd的結果廣播出去。廣播變數只能在driver端定義,不能在executor端定義。在driver端可以修改廣播變數的值,在executor端無法修改廣播變數的值。如果executor端用到了driver的變數,如果不使用...

Spark廣播變數與累加器

在dirver定義乙個變數,executor去使用,如果存在多個task,則會建立多個變數的副本,耗費記憶體。如果當前變數是乙個需要計算的值,在driver端是無法獲取的。scala實現 scala 實現 import org.apache.spark.util.doubleaccumulator ...

spark 廣播變數與累加器

如何理解廣播變數?適用場景 大變數,比如100m以上的大集合。運算元函式中使用到外部變數時,預設情況下,spark會將該變數複製多個副本,通過網路傳輸到task中,此時每個task都有乙個變數副本。如果變數本身比較大的話 比如100m,甚至1g 那麼大量的變數副本在網路中傳輸的效能開銷,以及在各個節...