【问题标题】:68k assembly - plus symbol on address registers68k 汇编 - 地址寄存器上的加号
【发布时间】:2013-01-10 07:59:56
【问题描述】:

在进行有趣的逆向工程时,我遇到了以下组件:

move.b  (a1)+,(a0)+

我知道括号的意思是“价值”,但加号代表什么?我如何准确地将其翻译为 C?

【问题讨论】:

    标签: assembly reverse-engineering 68000 addressing-mode


    【解决方案1】:

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

    move 指令的典型用途是在循环中将数据从一个内存位置复制到另一个内存位置,其中后递增间接寻址用于源寄存器和目标寄存器。

    Programmer's Reference Manual 对于任何 M68000 编程器来说都是无价之宝。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 啊……这很有意义……然后下面是一个'bne.s'。我想这意味着它将继续直到找到 \0 ...谢谢!我会在 5 分钟内接受答案。
      猜你喜欢
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多