1.几条汇编指令

1. LDR :(load)读内存

LDR   R0 , [R1]                       // 假设R1的值是x,读取地址x上的数据,保存到R0中。

2. STR :(store)写内存

STR   R0 , [R1]                      // 假设R1的值是x,把R0的值写到地址x上。

3. B:跳转

halt:  b  halt                     // 此例用于实现死循环功能,避免程序跑飞。

4. MOV :(move)(移动) 赋值

LDR   R0 , R1                        // 把R1的值赋给R0,R0 = R1。

LDR   R0 , #0x01                   // 把立即数的值赋给R0,R0 = 0x01。

5. LDR :伪指令用法

LDR   R0 ,= 0x12345678      // 把 0x12345678 这个值赋给R0,R0 = 0x12345678。

伪指令会被拆分为几条真正的arm指令执行,引入伪指令是因为使用MOV指令赋值时真正值得小于寄存位宽。

2.汇编代码


.text
.global _start
_start:/*配置GPF4为输出引脚*//*把0x100写到地址0x56000050*/LDR r0,=0x56000050LDR r1,=0x100    /* mov R0,#0X100 */str r1,[r0]/*设置GPF4为输出高电平*//*把0写到地址0x56000054*/LDR r0,=0x56000054LDR r1,=0x00    /* mov R0,#0X00 */str r1,[r0]/* 死循环 */
mainloop:b mainloop

.text和.global 是arm-gcc编译器的关键词。

.text 段保存代码,是只读和【可执行】的,后面那些指令都属于【.text段。
.global 告诉编译器后续跟的是一个全局可见的名字【可能是变量,也可以是函数名】;
在本例中,_start是一个函数的起始地址,也是编译、链接后程序的【起始地址】。由于程序是通过加载器来加载的,必须要找到 _start 名字的函数,因此_start必须定义成全局的,以便存在于编译后的全局符合表中,供其它程序【如加载器】寻找到。

3.Makefile

led.bin:led.sarm-linux-gcc -c -o led_on.o led_on.Sarm-linux-ld -Ttext 0 led_on.o -o led_on.elfarm-linux-objcopy -O binary -S led_on.elf led_on.bin/* 把可执行文件反汇编,此处用于分析代码 */arm-linux-objdump -D led_on.elf > led_on.disclean:rm -f *.bin  *.o *.elf

4.反汇编结果

可见其中的地址、机器码和汇编码。

一灯大师:一点就是好几年相关推荐

  1. 树莓派绿灯闪了几下不闪了_城市猎人的树莓派笔记一灯大师

    " 城市猎人的树莓派笔记" 06 一灯大师 VS2019新建一个.NET core控制台应用程序(不再重复放图了,之前有),并命名为DualColorLed 先引用模块原理图,两个 ...

  2. 武林外传—一灯大师与众弟子漫谈Api网关选型

    南帝段王爷隐居桃源后,潜心研究,构筑了一套武林秘籍访问系统,系统是微服务部署的,拆分为多个模块,每个模块只做一件事情.系统刚上线的时候非常顺利,但随着访问量的增大,模块的增多,新问题越来越显现出来,他 ...

  3. 一灯大师,点亮ESP32的LED

    零. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:ESP-IDF基本介绍,主要会涉及模组,芯片,开发板的介绍,环境搭建,程序编译下载,启动流程等一些基本的操作,让你对 ...

  4. 一灯大师之点亮OK6410开发板上4个LED裸机程序---嵌入式回归第十篇

    接着上一篇关闭mmu和cache后,这一篇来点亮开发板上的一盏LED小灯,前面所作的初始化工作基本看不到效果,其实这一段也是最麻烦的!如果有问题调试很麻烦!点亮了LED之后就可以用LED来看程序是否如 ...

  5. 一灯大师,基于imx6ull点亮LED灯

    一.imx6ull GPIO原理 1. STM32 GPIO回顾 我们一般拿到一款全新的芯片,第一个要做的事情的就是驱动其 GPIO,控制其 GPIO 输出高低电平,我们学习 I.MX6U 也一样的, ...

  6. GUI一灯大师,LVGL『LED控件』介绍

    一. LVGL GUI LED控件的概念 LED 是矩形(或圆形)的对象.它的亮度可以调节.亮度降低时,LED 的颜色会变暗. 二. LVGL GUI LED小部件和样式 LED 只有一个主要部分,称 ...

  7. STM32 一灯大师——寄存器点亮流水灯

    目录 1.配置端口输出数据寄存器(ODR) 2.配置低寄存器(CRL) 3.配置复位和时钟控制寄存器(RCC) 4.拓展:如何让PC2和PC3两个LED灯同时闪烁? 5.总结: GPIO功能框图和常用 ...

  8. stm32f103 GPIO—— 一灯大师之库函数版

    在使用库函数之前,我们先来看GPIO寄存器的结构体 该结构体中的成员,包含了引脚,输出速度,输出模式.我们可以使用这个结构体来对I/O口进行配置. GPIO_InitTypeDef GPIO_Init ...

  9. 一灯大师--关于如何进行裸机开发的学习心得

    今天!是万里长征第一步.在原子哥的资料自学下终于完成了在I.MX6ULL下的第一个裸机点灯.写这个是总结一下点灯的步骤(当然以后所有的裸机开发基本步骤都差不多). 在I.MX6ULL上点灯其实和STM ...

最新文章

  1. 如何通过代码连接SQL Server数据库
  2. BZOJ4327 : JSOI2012 玄武密码
  3. 如何将自己的站点与Ucenter整合——详解
  4. pyenv 让 python 版本完美切换
  5. mysql isam cache_Mysql性能优化基础篇
  6. 让皮肤变水嫩的15条小妙招 - 健康程序员,至尚生活!
  7. json session cookie介绍和使用
  8. 一些值得注意的算法题——队列、栈
  9. 中国天然石墨行业市场供需与战略研究报告
  10. 他:32岁,公司骨干技术,月薪1万,加班猝死
  11. linux 挂起后无法唤醒屏幕
  12. python批量转换数据类型_玩转python 各种数据类型的转换
  13. TTPlayer越来越靓了
  14. php.ini中设置session过期时间
  15. java缓存有几种_JAVA几种缓存技术介绍说明
  16. django 过滤器 、日期格式化参数
  17. 不用爬虫也可以轻松获取 unsplash 图片
  18. int 和Interger的区别
  19. 小程序里显示店铺地址,可在地图上查看,可点击导航到店铺
  20. Simulink学习之Combinatorial Logic模块

热门文章

  1. Linux 查找最大文件
  2. 【AcWing】蓝桥杯C++ AB组辅导课
  3. android菜单(menu)用法
  4. RK3399Pro/AR9201对比
  5. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ‘menu_id‘ in ‘field list
  6. C++_vector操作
  7. Python+OpenCV相机摄像头标定,矫正畸变,实时输出正常视频流
  8. 用VB6.0编报表工资条的软件,结果失败。用EXCEL做反而更好。
  9. ios睡眠分析 卧床 睡眠_iOS 10 「就寝」功能的用法和思考
  10. CertUtil的一般渗透