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

相关推荐
kyle~19 小时前
x86 汇编LOCK前缀 --- 硬件架构向软件提供的核心同步原语
汇编·c++·性能优化·硬件架构·实时系统
典典分享指南1 天前
飞书 + 企业微信 + 微信文档多端协同实践指南
汇编·flask·intellij-idea·fastapi
极客互动API6 天前
企业微信 iPad 协议服务搭建与 AI 回调实战
网络·汇编·人工智能·微信·企业微信·ipad
wechatbot88812 天前
极客互动企业微信 SCRM 私域运营实战效果全景
大数据·汇编·微信·自动化·企业微信·rpa
祈禾17 天前
计算机组成原理之编译、汇编、链接、解释
开发语言·汇编·笔记·学习
水饺编程18 天前
AT&T 汇编语言学习笔记开篇语
c语言·汇编·c++
iCxhust19 天前
8088单板机VScode集成开发环境使用方法二(汇编版)
汇编·单片机·微机原理·8088单板机
·薯条大王19 天前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
txg66620 天前
VULOC:基于汇编切片的漏洞定位框架,精准锁定二进制中的危险代码
汇编·人工智能·深度学习·安全·网络安全
sunburn-21 天前
Java 队列全面详解:从入门到面试实战
java·开发语言·汇编·ide·idea