Dan*_*oof 5 assembly reverse-engineering 68000 addressing-mode
在进行逆向工程以获得乐趣时,我遇到了以下装配:
move.b (a1)+,(a0)+
我明白括号的意思是"价值",但加号代表什么?我如何准确地将其转换为C?
Dan*_*erg 6
括号表示间接寻址,+表示后增量。在这种情况下,a1和a0都会在指令执行后增加操作的大小。另一种常见的寻址方式是使用预递减的间接寻址,-(An)。
+
a1
a0
-(An)
move对于源寄存器和目标寄存器都使用带有后增量的间接寻址的指令的典型用途是在循环中将数据从一个存储器位置复制到另一个。
move
该程序员参考手册是无价的任何M68000程序员。
在 C 中,*a0++ = *a1++;用于char *a0, *a1变量。经典的简单化 memcpy 的循环体一次只运行 1 个字节。(对于较大的副本,您更喜欢move.w或move.l,或者更优化的 memcpy 实现。)
*a0++ = *a1++;
char *a0, *a1
move.w
move.l
fdr*_*ger 5
(a1)+以操作的大小访问内存a1并递增a1。在这种情况下 1. 你所拥有的看起来像是复制内存的典型循环的一部分。
(a1)+
归档时间:
12 年,10 月 前
查看次数:
817 次
最近记录:
12 年,4 月 前