【问题标题】:Assembly code meaning in memory disassembly view内存反汇编视图中的汇编代码含义
【发布时间】:2018-06-06 10:22:55
【问题描述】:

以下汇编指令集是什么意思:

flashEraseSector:
00005f24:   push    {r7, lr}
00005f26:   sub     sp, #24
00005f28:   add     r7, sp, #0
00005f2a:   str     r0, [r7, #4]
 17                   temp1 = (locat << 8);
00005f2c:   ldr     r3, [r7, #4]
00005f2e:   lsls    r3, r3, #8
00005f30:   str     r3, [r7, #20]
 18                   temp1 = temp1 >> 24;
00005f32:   ldr     r3, [r7, #20]
00005f34:   asrs    r3, r3, #24
00005f36:   str     r3, [r7, #20]
 19                   temp2 = (locat << 16);
00005f38:   ldr     r3, [r7, #4]
00005f3a:   lsls    r3, r3, #16
00005f3c:   str     r3, [r7, #16]
 20                   temp2 = temp2 >> 24;
00005f3e:   ldr     r3, [r7, #16]
00005f40:   asrs    r3, r3, #24
00005f42:   str     r3, [r7, #16]
 21                   temp3 = (locat << 24);

这是我编译好的c代码

        temp1 = (locat << 8);
        temp1 = temp1 >> 24;
        temp2 = (locat << 16);
        temp2 = temp2 >> 24;
        temp3 = (locat << 24);
        temp3 = temp3 >> 24;

如果有人解释这里发生的事情,那就太好了。为什么这些存储 20,20,16,16?他们必须存储 -4,4,12,20 对吗?

00005f30:   str     r3, [r7, #20]
00005f36:   str     r3, [r7, #20]
00005f3c:   str     r3, [r7, #16]
00005f42:   str     r3, [r7, #16]

提前致谢。

【问题讨论】:

  • 看起来您编译了一些禁用优化的 C,因此您的编译器为每条指令分别加载/移位/存储。这就是代码如此冗余的原因。

标签: assembly arm thumb


【解决方案1】:

0x00000800是函数flashLocat的地址。 接下来,第一列表示指令在内存中的地址,第二列表示指令,第三列表示参数。 “;”之后的任何内容表示评论。

【讨论】:

  • 行 `00005cea: movs r3, #128 是什么意思; 0x80`?它是否将值 128 移动到 r3 寄存器中?
  • @user8540390 是的,没错。
  • 所以行 00005cea: movs r3, #128 ; 0x80`表示:在地址00005cea放置一条指令。该指令说将 0x80(十进制表示 128,这就是为什么存在 # 表示数字以十进制为基数)移动到寄存器 r3。请询问是否仍有不清楚的地方。
猜你喜欢
  • 1970-01-01
  • 2015-12-21
  • 2012-12-14
  • 1970-01-01
  • 2013-07-21
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
相关资源
最近更新 更多