从最简单的实例学习ARM 指令集(二)

       本篇研究赋值运算是如何实现的。我们在上一篇的范例test2.c的基础上,加上赋值语句:

test3.c

#include <stdio.h>
void main()
{
  int d = 4;
  char b = 2;
  d = b;
}
       然后编译:arm-linux-gnueabihf-gcc test.c -o test3

      然后看看汇编代码:arm-linux-gnueabihf-objdump -D test3

0000835c <main>:
1    835c:       b480            push    {r7}
2    835e:       b083            sub     sp, #12
3    8360:       af00            add     r7, sp, #0
4    8362:       f04f 0304       mov.w   r3, #4
5    8366:       603b            str     r3, [r7, #0]
6    8368:       f04f 0302       mov.w   r3, #2
7    836c:       71fb            strb    r3, [r7, #7]

从栈里取出变量b的值赋给 r3:
8    836e:       79fb            ldrb    r3, [r7, #7]

跟新栈里的变量d的新的值--存储r3的值到stack里的变量d的位置:
9    8370:       603b            str     r3, [r7, #0]


10    8372:       f107 070c       add.w   r7, r7, #12
11    8376:       46bd            mov     sp, r7
12    8378:       bc80            pop     {r7}
13    837a:       4770            bx      lr

      其中,1-7行以及10到13行与test2.c里代码相同,只有8-9行不同。从8-9行可以看出原来赋值运算 d = b 很简单:从从栈里(内存)加载( load ) 赋值运算符右边变量(b)的值到寄存器上,然后把此寄存器保存到赋值元算符左边变量(这里是d)的位置(在stack里)的内存里。请看示意图:


        赋值前d的位置内存是4,b的位置内存是2

      赋值后栈里变量d的位置的内存也变成了2

      下一篇,我们学习下子函数调用。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嵌入式开发工具 ARM Developer Suite v1.2 ARM Developer Suite? ADS 是全套的实时开发软件工具包编译器生成的代码密度和执行速度优异可快速低价地创建ARM 结构应用ADS包括三种调试器ARM eXtended Debugger AXD 向下兼容的ARMDebugger for Windows/ARM Debugger for UNIX 和ARM 符号调试器其中AXD 不仅拥有低版本ARM 调试器的所有功能还新添了图形用户界麵更方便的视窗管理数据显示格式化和编辑以及全套的命令行界麵该產品还包括RealMonitor? 可以在前台调试的同时断点续存并且在不中断应用的情况下读写内存跟踪调试工具 ARM 的Real-Time Trace? 和RealMonitor 均為重要的实时调试解决方案能够缩短开发周期提供特殊软件调试功能可运行於带深度嵌入处理器内核的高集成系统芯片SoC ARM 的Real-Time Trace 產品包括跟踪调试工具MultiTrace 嵌入式跟踪宏单元和Multi-ICE ARM 的RealMonitor包括RMTarget? RMHost? 是ARM Developer Suite (ADS) 的补充硬件 Integrator? Integrator 系列是灵活高效的系统芯片开发平台集成ARM PrimeCell?外设和相关驱动器等软件和硬件能够缩短產品开发周期降低生產总成本固件 ARM Firmware Suite? ARM 固件组是跟底层硬件相关的应用封装能在ARM 开发平台上迅速建立基於Integrator 或其它ARM内核的应用和操作系统模型工具 ModelGen ModelGen 是在模拟器上开发和支持复杂半导体器件保留模块的先进建模工具為ARM 独家拥有ARM 的合作伙伴采用ModelGen 在各种仿真器和计算平台上实现信号传输质量和时序模拟 操作可看http://blog.163.com/haoshida_nanjing/blog/static/213358122009622111013200/
嵌入式开发工具 ARM Developer Suite v1.2 ARM Developer Suite™ ADS 是全套的实时开发软件工具包编译器生成的代码密度和执行速度优异可快速低价地创建ARM 结构应用ADS包括三种调试器ARM eXtended Debugger AXD 向下兼容的ARMDebugger for Windows/ARM Debugger for UNIX 和ARM 符号调试器其中AXD 不仅拥有低版本ARM 调试器的所有功能还新添了图形用户界麵更方便的视窗管理数据显示格式化和编辑以及全套的命令行界麵该產品还包括RealMonitor™ 可以在前台调试的同时断点续存并且在不中断应用的情况下读写内存跟踪调试工具 ARM 的Real-Time Trace™ 和RealMonitor 均為重要的实时调试解决方案能够缩短开发周期提供特殊软件调试功能可运行於带深度嵌入处理器内核的高集成系统芯片SoC ARM 的Real-Time Trace 產品包括跟踪调试工具MultiTrace 嵌入式跟踪宏单元和Multi-ICE ARM 的RealMonitor包括RMTarget™ RMHost™ 是ARM Developer Suite (ADS) 的补充硬件 Integrator™ Integrator 系列是灵活高效的系统芯片开发平台集成ARM PrimeCell™外设和相关驱动器等软件和硬件能够缩短產品开发周期降低生產总成本固件 ARM Firmware Suite™ ARM 固件组是跟底层硬件相关的应用封装能在ARM 开发平台上迅速建立基於Integrator 或其它ARM内核的应用和操作系统模型工具 ModelGen ModelGen 是在模拟器上开发和支持复杂半导体器件保留模块的先进建模工具為ARM 独家拥有ARM 的合作伙伴采用ModelGen 在各种仿真器和计算平台上实现信号传输质量和时序模拟 操作可看http://blog.163.com/haoshida_nanjing/blog/static/213358122009622111013200/

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值