68k汇编 - 加上地址寄存器上的符号

Dan*_*oof 5 assembly reverse-engineering 68000 addressing-mode

在进行逆向工程以获得乐趣时,我遇到了以下装配:

move.b  (a1)+,(a0)+
Run Code Online (Sandbox Code Playgroud)

我明白括号的意思是"价值",但加号代表什么?我如何准确地将其转换为C?

Dan*_*erg 6

括号表示间接寻址,+表示后增量。在这种情况下,a1a0都会在指令执行后增加操作的大小。另一种常见的寻址方式是使用预递减的间接寻址,-(An)

move对于源寄存器和目标寄存器都使用带有后增量的间接寻址的指令的典型用途是在循环中将数据从一个存储器位置复制到另一个。

程序员参考手册是无价的任何M68000程序员。

在 C 中,*a0++ = *a1++;用于char *a0, *a1变量。经典的简单化 memcpy 的循环体一次只运行 1 个字节。(对于较大的副本,您更喜欢move.wmove.l,或者更优化的 memcpy 实现。)


fdr*_*ger 5

(a1)+以操作的大小访问内存a1并递增a1。在这种情况下 1. 你所拥有的看起来像是复制内存的典型循环的一部分。