楽しみのために何かをリバース エンジニアリングしているときに、次のアセンブリの一部に出くわしました。
move.b (a1)+,(a0)+
括弧が「の値」を意味することは理解していますが、プラス記号は何を表していますか? これをCに正確に翻訳するにはどうすればよいですか?
楽しみのために何かをリバース エンジニアリングしているときに、次のアセンブリの一部に出くわしました。
move.b (a1)+,(a0)+
括弧が「の値」を意味することは理解していますが、プラス記号は何を表していますか? これをCに正確に翻訳するにはどうすればよいですか?
括弧は間接アドレッシングを+
意味し、ポストインクリメントを意味します。この場合、a1
との両方a0
が、命令の実行後に操作のサイズだけ増加します。もう 1 つの一般的なアドレッシング モードは、プリ デクリメントを使用した間接アドレッシング-(An)
です。
ソース レジスタとデスティネーション レジスタの両方にポスト インクリメントによる間接アドレッシングが使用される命令の一般的な用途はmove
、ループ内で 1 つのメモリ ロケーションから別のメモリ ロケーションにデータをコピーすることです。
Programmer's Reference Manualは、M68000 プログラマーにとって非常に貴重です。
C では*a0++ = *a1++;
、char *a0, *a1
変数の場合。一度に 1 バイトしか処理しない従来の単純な memcpy のループ本体。(より大きなコピーの場合は、move.w
またはmove.l
、またはより最適化された memcpy 実装をお勧めします。)
(a1)+
でメモリにアクセスし、操作のサイズa1
だけインクリメントします。a1
この場合 1. メモリをコピーする典型的なループの一部のように見えます。