编写第1个程序点亮LED汇编程序
来源:互联网 发布:农村淘宝接受哪些快递 编辑:程序博客网 时间:2024/06/04 20:06
汇编指令:
1) ldr(load):读内存命令
例:ldr r0, [r1]
假设r1的值是X,读取地址X上的数据(4字节),保存到r0中
2) str(store):写内存命令
例:str r0, [r1]
假设r1的值是X,把r0的值写到地址X中
3) mov(move):
例:move r0, r1
把r1的值赋值给r0,r0=r1
例:move r0, #0x100
r0=0x100
4) mov r0, #0x12345678
1) ldr(load):读内存命令
例:ldr r0, [r1]
假设r1的值是X,读取地址X上的数据(4字节),保存到r0中
2) str(store):写内存命令
例:str r0, [r1]
假设r1的值是X,把r0的值写到地址X中
3) mov(move):
例:move r0, r1
把r1的值赋值给r0,r0=r1
例:move r0, #0x100
r0=0x100
4) mov r0, #0x12345678
该条指令为错误指令,因为ARM指令32位,某些位表示mov指令,
某些位表示r0,剩下的位不足以表示任意值,比如0x12345678
所以要引入伪指令如下:ldr r0, =0x12345678 即r0=0x12345678
该条指令为伪指令,它会被拆分为几条正真的ARM指令
5) b:跳转指令,跳到指定的地址处执行
点亮LED的汇编代码:
/* * 点亮LED1: gpf4 */.text.global _start_start:/* 配置GPF4为输出引脚 * 把0x100写到地址0x56000050 */ldr r1, =0x56000050ldr r0, =0x100/* mov r0, #0x100 */str r0, [r1]/* 设置GPF4输出高电平 * 把0写到地址0x56000054 */ldr r1, =0x56000054ldr r0, =0/* mov r0, #0 */str r0, [r1]/* 死循环 */halt:b halt
Makefile:
all:
arm-linux-gcc -c -o led_on.o led_on.S
arm-linux-ld -Ttext 0 led_on.o -o led_on.elf
arm-linux-objcopy -O binary -S led_on.elf led_on.bin
arm-linux-objdump -D led_on.elf > led_on.dis
clean:
rm *.bin *.o *.elf
得到的led_on.dis反汇编:
led_on.elf: file format elf32-littlearmDisassembly of section .text:00000000 <_start>: 0:e59f1014 ldrr1, [pc, #20]; 1c <.text+0x1c> 4:e3a00c01 movr0, #256; 0x100 8:e5810000 strr0, [r1] c:e59f100c ldrr1, [pc, #12]; 20 <.text+0x20> 10:e3a00000 movr0, #0; 0x0 14:e5810000 strr0, [r1]00000018 <halt>: 18:eafffffe b18 <halt> 1c:56000050 undefined 20:56000054 undefined
pc(program counter)=当前执行指令地址+8
ARM架构CPU是按流水线进行执行的:
当前执行地址A的地址
已经在对地址A+4的指令进行译码
已经在读取地址A+8的指令
得到的led_on.bin文件用UtraEdit打开:
bin文件中含有机器码
阅读全文
0 0
- 编写第1个程序点亮LED汇编程序
- 1.点亮1个led程序分析(汇编)
- 1.点亮1个led程序分析(C语言)
- S3C2440按键查询方式点亮LED汇编程序
- 51汇编程序之点亮全部led
- STM32F103C8T6-LED点亮程序
- mini2440之首个C程序点亮LED分析
- 【记录】STM32学习之第一个程序(点亮LED)
- 第一个裸机程序---点亮led小灯
- MSP430F1612 第一个程序,点亮一个LED灯
- stm8 点亮第一个LED
- 点亮多个LED灯
- ARM9 S3C2440按键中断方式点亮LED的汇编程序
- 【OK6410裸机程序】点亮LED
- 点亮LED C语言程序
- 1-IO输出-点亮1个LED灯方法1
- 51单片机 学习之旅[1] 点亮第一个LED
- 2-IO输出-点亮1个LED灯方法2
- hiho 1654
- XML语言基础
- 设备方式实现共享sicsi
- 如何成为架构师?7 个关键的思考、习惯和经验
- Js中的上下文调用,apply与call
- 编写第1个程序点亮LED汇编程序
- js判断输入字符串是否为空、空格、null的方法总结
- CDN 优化策略
- 莫比乌斯反演入门
- Entity Framework(3)新增
- Bootstrap(十三)
- 不合格高校教师的自我总结(2016-2017年机器人大纲和课程考核小结)
- OpenGL学习笔记(六):创建第一个VS2015 OpenGL工程模板(与平台无关)
- 梯度下降算法