一灯大师:一点就是好几年
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.反汇编结果
可见其中的地址、机器码和汇编码。
一灯大师:一点就是好几年相关推荐
- 树莓派绿灯闪了几下不闪了_城市猎人的树莓派笔记一灯大师
" 城市猎人的树莓派笔记" 06 一灯大师 VS2019新建一个.NET core控制台应用程序(不再重复放图了,之前有),并命名为DualColorLed 先引用模块原理图,两个 ...
- 武林外传—一灯大师与众弟子漫谈Api网关选型
南帝段王爷隐居桃源后,潜心研究,构筑了一套武林秘籍访问系统,系统是微服务部署的,拆分为多个模块,每个模块只做一件事情.系统刚上线的时候非常顺利,但随着访问量的增大,模块的增多,新问题越来越显现出来,他 ...
- 一灯大师,点亮ESP32的LED
零. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:ESP-IDF基本介绍,主要会涉及模组,芯片,开发板的介绍,环境搭建,程序编译下载,启动流程等一些基本的操作,让你对 ...
- 一灯大师之点亮OK6410开发板上4个LED裸机程序---嵌入式回归第十篇
接着上一篇关闭mmu和cache后,这一篇来点亮开发板上的一盏LED小灯,前面所作的初始化工作基本看不到效果,其实这一段也是最麻烦的!如果有问题调试很麻烦!点亮了LED之后就可以用LED来看程序是否如 ...
- 一灯大师,基于imx6ull点亮LED灯
一.imx6ull GPIO原理 1. STM32 GPIO回顾 我们一般拿到一款全新的芯片,第一个要做的事情的就是驱动其 GPIO,控制其 GPIO 输出高低电平,我们学习 I.MX6U 也一样的, ...
- GUI一灯大师,LVGL『LED控件』介绍
一. LVGL GUI LED控件的概念 LED 是矩形(或圆形)的对象.它的亮度可以调节.亮度降低时,LED 的颜色会变暗. 二. LVGL GUI LED小部件和样式 LED 只有一个主要部分,称 ...
- STM32 一灯大师——寄存器点亮流水灯
目录 1.配置端口输出数据寄存器(ODR) 2.配置低寄存器(CRL) 3.配置复位和时钟控制寄存器(RCC) 4.拓展:如何让PC2和PC3两个LED灯同时闪烁? 5.总结: GPIO功能框图和常用 ...
- stm32f103 GPIO—— 一灯大师之库函数版
在使用库函数之前,我们先来看GPIO寄存器的结构体 该结构体中的成员,包含了引脚,输出速度,输出模式.我们可以使用这个结构体来对I/O口进行配置. GPIO_InitTypeDef GPIO_Init ...
- 一灯大师--关于如何进行裸机开发的学习心得
今天!是万里长征第一步.在原子哥的资料自学下终于完成了在I.MX6ULL下的第一个裸机点灯.写这个是总结一下点灯的步骤(当然以后所有的裸机开发基本步骤都差不多). 在I.MX6ULL上点灯其实和STM ...
最新文章
- 如何通过代码连接SQL Server数据库
- BZOJ4327 : JSOI2012 玄武密码
- 如何将自己的站点与Ucenter整合——详解
- pyenv 让 python 版本完美切换
- mysql isam cache_Mysql性能优化基础篇
- 让皮肤变水嫩的15条小妙招 - 健康程序员,至尚生活!
- json session cookie介绍和使用
- 一些值得注意的算法题——队列、栈
- 中国天然石墨行业市场供需与战略研究报告
- 他:32岁,公司骨干技术,月薪1万,加班猝死
- linux 挂起后无法唤醒屏幕
- python批量转换数据类型_玩转python 各种数据类型的转换
- TTPlayer越来越靓了
- php.ini中设置session过期时间
- java缓存有几种_JAVA几种缓存技术介绍说明
- django 过滤器 、日期格式化参数
- 不用爬虫也可以轻松获取 unsplash 图片
- int 和Interger的区别
- 小程序里显示店铺地址,可在地图上查看,可点击导航到店铺
- Simulink学习之Combinatorial Logic模块
热门文章
- Linux 查找最大文件
- 【AcWing】蓝桥杯C++ AB组辅导课
- android菜单(menu)用法
- RK3399Pro/AR9201对比
- com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ‘menu_id‘ in ‘field list
- C++_vector操作
- Python+OpenCV相机摄像头标定,矫正畸变,实时输出正常视频流
- 用VB6.0编报表工资条的软件,结果失败。用EXCEL做反而更好。
- ios睡眠分析 卧床 睡眠_iOS 10 「就寝」功能的用法和思考
- CertUtil的一般渗透