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