ARM Day4

汇编实现三个灯的闪烁

.text

.global _start

_start:

@使能GPIOE的外设时钟

LDR R0,=0x50000A28 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

ORR R1,R1, #(0x3<<4) @4设置为1

STR R1,R0 @将修改之后的值写回去

@设置PE10为输出

LDR R0,=0x50006000 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x3<<20) @21:20设置为00

ORR R1,R1,#(0x1<<20) @21:20设置为01

STR R1,R0 @将修改之后的值写回去

@设置PF10为输出

LDR R0,=0x50007000 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x3<<20) @21:20设置为00

ORR R1,R1,#(0x1<<20) @21:20设置为01

STR R1,R0 @将修改之后的值写回去

@设置PE8为输出

LDR R0,=0x50006000 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x3<<16) @17:16设置为00

ORR R1,R1,#(0x1<<16) @17:16设置为01

STR R1,R0 @将修改之后的值写回去

@设置PE10为推挽输出

LDR R0,=0x50006004 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x1<<10) @10设置为0

STR R1,R0 @将修改之后的值写回去

@设置PF10为推挽输出

LDR R0,=0x50007004 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x1<<10) @10设置为0

STR R1,R0 @将修改之后的值写回去

@设置PE8为推挽输出

LDR R0,=0x50006004 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x1<<8) @8设置为0

STR R1,R0 @将修改之后的值写回去

@设置PE10低速输出

LDR R0,=0x50006008 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x3<<20) @21:20设置为0

STR R1,R0 @将修改之后的值写回去

@设置PF10低速输出

LDR R0,=0x50007008 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x3<<20) @21:20设置为0

STR R1,R0 @将修改之后的值写回去

@设置PE8低速输出

LDR R0,=0x50006008 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x3<<16) @17:16设置为0

STR R1,R0 @将修改之后的值写回去

@设置PE10无上拉下拉电阻

LDR R0,=0x5000600C @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x3<<20) @21:20设置为0

STR R1,R0 @将修改之后的值写回去

@设置PF10无上拉下拉电阻

LDR R0,=0x5000700C @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x3<<20) @21:20设置为0

STR R1,R0 @将修改之后的值写回去

@设置PE8无上拉下拉电阻

LDR R0,=0x5000600C @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x3<<16) @17:16设置为0

STR R1,R0 @将修改之后的值写回去

LOOP: @B不让程序结束

bl LED1_ON

bl LED2_ON

bl LED3_ON

bl DELAY

bl LED1_OFF

bl LED2_OFF

bl LED3_OFF

bl DELAY

B LOOP

@亮灯

LED1_ON:

@点灯 GPIO_ODR10->1

LDR R0,=0x50006014 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

ORR R1,R1,#(0x1<<10) @10设置为0

STR R1,R0 @将修改之后的值写回去

mov PC,LR @程序返回

LED2_ON:

@点灯 GPIO_ODR10->1

LDR R0,=0x50007014 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

ORR R1,R1,#(0x1<<10) @10设置为0

STR R1,R0 @将修改之后的值写回去

mov PC,LR @程序返回

LED3_ON:

@点灯 GPIO_ODR10->1

LDR R0,=0x50006014 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

ORR R1,R1,#(0x1<<8) @8设置为0

STR R1,R0 @将修改之后的值写回去

mov PC,LR @程序返回

@灭灯

LED1_OFF:

@灭灯 GPIO_ODR10->0

LDR R0,=0x50006014 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x1<<10) @10设置为0

STR R1,R0 @将修改之后的值写回去

mov PC,LR @程序返回

LED2_OFF:

@灭灯 GPIO_ODR10->0

LDR R0,=0x50007014 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x1<<10) @10设置为0

STR R1,R0 @将修改之后的值写回去

mov PC,LR @程序返回

LED3_OFF:

@灭灯 GPIO_ODR10->0

LDR R0,=0x50006014 @指定基地址

LDR R1,R0 @将寄存器数据读取出来保存到R1中

BIC R1,R1,#(0x1<<8) @8设置为0

STR R1,R0 @将修改之后的值写回去

mov PC,LR @程序返回

@延时函数

DELAY:

LDR R3,=0x10000000

MM:

CMP R3,#0

SUBNE R3,R3,#1

BNE MM

MOV PC,LR @程序返回

.end

相关推荐
是星辰吖~18 小时前
函数战争:内存领地的争夺与撤退
汇编
止观止19 小时前
在 WSL2 上从零搭建 ARM 混合编程环境
汇编·arm开发·嵌入式开发·混合编程
say_fall2 天前
8086汇编程序设计_从基础到实战
开发语言·汇编·8086
浩浩测试一下2 天前
LoadPE &&& 原理以及作用 (ASM汇编版本)>>01
汇编·免杀·pe结构·windows编程·二进制逆向·系统loadpe
ThornArmor3 天前
【控制篇】斩断无休止空转:4-bit 指令集里的跳转律令与时序状态机
c语言·汇编·c++·单片机·嵌入式硬件
大阳1233 天前
ARM4.(通过汇编,c语言,固件库点亮LED)
c语言·开发语言·汇编
iCxhust3 天前
8086 汇编 TINY 和 SMALL 编程MODEL区别
汇编·单片机·嵌入式硬件·操作系统·微机原理·8088单板机
say_fall4 天前
从零开始学x86汇编_16位指令系统完全指南
开发语言·汇编·计算机组成·微机原理
txg6665 天前
编译无关的漏洞检测:基于 Transformer 的 LLVM-IR 与汇编鲁棒建模
汇编·深度学习·安全·transformer
浩浩测试一下6 天前
汇编 16位32位64位通用寄存器(逆向分析)
汇编·windows·stm32·单片机·嵌入式硬件·逆向·二进制