2016-12-25 71 views
-1

我有這樣的代碼在8051彙編:8051彙編程序的指令序列是做什麼的?

MOV A,#04H 
    RL A 
    MOVC A,@A+PC 
    SJMP Cont 
Cont: DB 10H, 20H, 30H, 40H, 50H, 60H, 70H, 80H 

的問題是,這些指令執行後,什麼是有價值的;答案是A保持值(A)= 70H。

我已經搜索了關於MOV和RL的指令,並且我明白了,但是我不清楚,剩下的指令和我們如何得到寄存器A的值?

+0

此代碼的處理器是什麼? – duskwuff

+0

8051微處理器 – stones

回答

1

MOVC A, @A+PC移動從程序存儲器的數據的8位(MOVC代表「移動代碼」或類似的)在由 + PC並將其存儲給定到累加器的地址。
@的存在是雄辯的,它用於表示register indirect addressing mode,完整表達式@A+PC指定它實際上是indexed addressing mode
需要注意的是:

  1. PC已經被它是用來做內存存取時間遞增。
    由於MOVC A, @A+PC是1個字節長,它的語義是:

    PC = PC + 1 
    A = (A+PC) 
    
  2. 在符號表達式@A+PC,將@是爲了有+優先,所以它應被理解爲@(A+PC)

SJMPSHORT JUMP和它簡單地執行被指定爲操作數的目標。

MOV A, #04H將值04h移動到A
這裏符號「#」表示immediate addressing mode

RL A只需將一個位置右轉A即可。


假設代碼開始於X,然後

Address Data  Instruction  State before   State after    Description 
X + 00 : 74 04 : MOV A, #04  : A = ? PC = X  : A = 4 PC = X + 02 Set A to 4 
X + 02 : 23  : RL A    : A = 4 PC = X + 02 : A = 8 PC = X + 03 Rotate left 4 = 0000 0100 -> 0000 1000 = 8, now A is 8 
X + 03 : 83  : MOVC A, @A+PC : A = 8 PC = X + 03 : A = 70 PC = X + 04 Read from memory A+PC, A = MEM[A + PC after] = MEM[8 + X + 04] = MEM[X + 0C] = 70 
X + 04 : 80 00 : SJMP X + 06  : A = 70 PC = X + 04 : A = 70 PC = X + 06 Goto X + 06, PC <- X + 06 
X + 06 : 10 
X + 07 : 20 
X + 08 : 30 
X + 09 : 40 
X + 0A : 50 
X + 0B : 60 
X + 0C : 70 
X + 0D : 80 

簡單地說,在執行時MOVC A, @A+PC,一個字節由8添加的下一個指令(地址值讀取在A)。
由於SJMP,下一條指令的長度爲1個字節,就像從Cont讀取7個字節。
Cont的第七項是70h。

相關問題