0

さまざまなデータがあるテーブルを作成しました。このテーブルからデータを取り出して変更し、同じ位置に書き戻す必要がありますが、何らかの理由でデータがその位置に書き込まれません

これが私のコードです

CSEG AT 3h
precos: DB 100, 200, 150, 170

Lookup:
    MOV DPTR, #precos    ; DPTR points to the start of the lookup table
    MOV A, #0           ; A is the offset from the start of the lookup table
    MOVC A, @A + DPTR   ; Moves the (A+1)th item into the Accumulator
    ADD A, #20
    MOV R1, #precos
    MOV @R1, A
    JMP Lookup

コードをループすると、A は 0 から 100 から 120 になり、アドレス 3 (テーブルの位置 0) に書き込んで、再度取得し、さらに 20 を追加する必要があります。次のように動作します。

A = 0 - first iteration
A = 100
A = 120
A = 0 - second iteration
A = 100
A = 120
etc

私が実際に必要としているのは、メモリ位置にアクセスし、それを変更してから更新する方法です。これ:

A = 0 - first iteration
A = 100
A = 120
A = 0 - second iteration
A = 120
A = 140
etc

私はさまざまなものを読んでいますが、うまくいく答えを見つけることができませんでした。たとえば、ここでは指示を示していますが、出力例は示していません: http://www.keil.com/support/man/docs/is51/is51_mov.htm

編集:必ずしもこのように使用する必要はありません。Cのように変数を持ち、次のようなことをする方法が必要です:

int 変数 = 100;

for(;;) var += 20;

4

1 に答える 1