【发布时间】:2013-01-10 07:59:56
【问题描述】:
在进行有趣的逆向工程时,我遇到了以下组件:
move.b (a1)+,(a0)+
我知道括号的意思是“价值”,但加号代表什么?我如何准确地将其翻译为 C?
【问题讨论】:
标签: assembly reverse-engineering 68000 addressing-mode
在进行有趣的逆向工程时,我遇到了以下组件:
move.b (a1)+,(a0)+
我知道括号的意思是“价值”,但加号代表什么?我如何准确地将其翻译为 C?
【问题讨论】:
标签: assembly reverse-engineering 68000 addressing-mode
括号表示间接寻址,+ 表示后增量。在这种情况下,a1 和a0 在指令执行后都会增加操作的大小。另一种常见的寻址模式是带有预减量的间接寻址,-(An)。
move 指令的典型用途是在循环中将数据从一个内存位置复制到另一个内存位置,其中后递增间接寻址用于源寄存器和目标寄存器。
Programmer's Reference Manual 对于任何 M68000 编程器来说都是无价之宝。
在 C 中,*a0++ = *a1++; 用于 char *a0, *a1 变量。一个经典的简单 memcpy 的循环体一次只有 1 个字节。 (对于更大的副本,您更喜欢 move.w 或 move.l,或者更优化的 memcpy 实现。)
【讨论】:
(a1)+ 在a1 处访问内存并将a1 增加操作的大小。在这种情况下 1. 你所拥有的看起来像是复制内存的典型循环的一部分。
【讨论】: