2016-12-25 57 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は値(A)= 70Hを保持していたということでした。

私はMOVとRL命令について検索しましたが、わかりましたが、残りの命令はどうなりますか?また、レジスタAの価値はどのように得られましたか? によって + PCとアキュムレータに格納する所定のアドレスに(または類似の「コードを移動」を意味MOVC)プログラムメモリから

+0

このコードはどのプロセッサ用ですか? – duskwuff

+0

マイクロプロセッサー8051 – stones

答えて

1

MOVC A, @A+PC移動データの8ビット。
@の存在は雄弁であり、それはregister indirect addressing modeを示すために使用され、完全な表現@A+PCは、それが実際にindexed addressing modeであることを指定する。 PCはすでにメモリアクセスを行うために使用された時点でインクリメントされた


  1. 注こと。 MOVC A, @A+PCので
    は1バイト長であり、そのセマンティックは:シンボリック表現@A+PC

    PC = PC + 1 
    A = (A+PC) 
    
  2. @+より少ない優先順位を有することを意味するので、@(A+PC)として理解されるべきです。

SJMPオペランドとして指定されたターゲットに、単に実行ショートジャンプ、それです。

MOV A, #04H 012hの値をAに移動します。
ここで、記号「#」はimmediate addressing modeを示す。

RL AAを1回転させるだけです。実行された場合MOVC A, @A+PC


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 

は、簡単に言えば、その後、のコードは Xから始まると仮定しましょう、バイトは8で追加された次の命令のアドレス(値から読み込まれ A)。
SJMP以降、次の命令は1バイト長で、 Contから7バイトを読み取るようなものです。
Contの7番目の項目は70hです。

関連する問題