在对有趣的东西进行逆向工程时,我遇到了以下组件:
move.b (a1)+,(a0)+
我知道括号的意思是“价值”,但加号代表什么?我如何准确地将其翻译为 C?
在对有趣的东西进行逆向工程时,我遇到了以下组件:
move.b (a1)+,(a0)+
我知道括号的意思是“价值”,但加号代表什么?我如何准确地将其翻译为 C?
括号表示间接寻址,+
表示后增量。在这种情况下,指令执行后,两者a1
都会a0
增加操作的大小。另一种常见的寻址模式是带有预减量的间接寻址,-(An)
.
对源寄存器和目标寄存器都使用后递增间接寻址的指令的典型用途是move
在循环中将数据从一个内存位置复制到另一个内存位置。
程序员参考手册对于任何 M68000 程序员来说都是无价之宝。
在 C 中,*a0++ = *a1++;
用于char *a0, *a1
变量。一个经典的简单 memcpy 的循环体一次只有 1 个字节。(对于较大的副本,您更喜欢move.w
or move.l
,或者更优化的 memcpy 实现。)
(a1)+
访问内存,a1
并按操作的大小递增a1
。在这种情况下 1. 你所拥有的看起来像是复制内存的典型循环的一部分。