最新のプロセッサーでは、メモリーからレジスターをロードしてから、インデックス・ポインターを目的の値で事後変更することができます。たとえば、組み込みプロセッサでは、これは次のように行われます。
ldr r0, [r1], +12
つまり、r1 が指す値を r0 にロードし、r1 を 12 ずつ増やします。
r0 = [r1]
r1 = r1 + 12
C 言語では、ポインター演算を使用して、ポインターを使用して値を代入し、ポインターを 1 進めることができます。
char i, *p, a[3]={10, 20, 30};
p = &(a[0]);
i = *p++;
// now i==10 and p==&(a[1]).
ポインターを 1 以外のオフセットで事後変更しながら逆参照する方法を探しています。これは C で可能ですか?同様の asm 命令にうまくマップされますか?
ご了承ください:
i = *p+=2;
ポインターを変更せずに a[0] の値を増やします。
i = *(p+=2);
はポインターを事前に変更するため、この場合はi==30
.