软件开发网站策划方案,wordpress 实时表单,外包人员,毕业设计做网站答辩会问什么要求#xff1a; 1、轮流将LED1、LED2、LED3及蜂鸣器点亮 2、基于STM32MP157AAA#xff0c;阅读原理图和STM32MP157芯片手册 3、ARM汇编指令点灯 1、运行效果 汇编点灯 2、通过查询原理图和芯片手册#xff0c;得到以下结论#xff1a; 3、汇编源码
.text
.global _start… 要求 1、轮流将LED1、LED2、LED3及蜂鸣器点亮 2、基于STM32MP157AAA阅读原理图和STM32MP157芯片手册 3、ARM汇编指令点灯 1、运行效果 汇编点灯 2、通过查询原理图和芯片手册得到以下结论 3、汇编源码
.text
.global _start
_start:
R0 存放寄存器在内存中的map地址
R1 存放寄存器的值1 配置RCC: LD1、LD2、LD3和蜂鸣器的使能
ldr R0, (0x500000000xA28)
ldr R1, [R0]
orr R1, R1, #0x32
str R1, [R0]2 配置MODER寄存器
2.1 配置LED1、LED3
ldr R0, 0x50006000
ldr R1, [R0]
bic R1, #(0x3316)
orr R1, #(0x1116)
str R1, [R0]
2.2 配置LED2
ldr R0, 0x50007000
ldr R1, [R0]
bic R1, #(0x320)
orr R1, #(0x120)
str R1, [R0]
2.3 配置蜂鸣器
ldr R0, 0x50003000
ldr R1, [R0]
bic R1, #(0x312)
orr R1, #(0x112)
str R1, [R0]3 配置OTYPER寄存器
3.1 配置LED1、LED3
ldr R0, (0x500060000x04)
ldr R1, [R0]
bic R1, #(0x58)
str R1, [R0]
3.2 配置LED2
ldr R0, (0x500070000x04)
ldr R1, [R0]
bic R1, #(0x110)
str R1, [R0]
3.3 配置蜂鸣器
ldr R0, (0x500030000x04)
ldr R1, [R0]
bic R1, #(0x16)
str R1, [R0]4 配置OSPEEDR寄存器
4.1 配置LED1、LED3
ldr R0, (0x500060000x08)
ldr R1, [R0]
bic R1, #(0x3316)
str R1, [R0]
4.2 配置LED2
ldr R0, (0x500070000x08)
ldr R1, [R0]
bic R1, #(0x320)
str R1, [R0]
4.3 配置蜂鸣器
ldr R0, (0x500030000x08)
ldr R1, [R0]
bic R1, #(0x312)
str R1, [R0]5 配置PUPDR寄存器
5.1 配置LED1、LED3
ldr R0, (0x500060000x0C)
ldr R1, [R0]
bic R1, #(0x3316)
str R1, [R0]
5.2 配置LED2
ldr R0, (0x500070000x0C)
ldr R1, [R0]
bic R1, #(0x320)
str R1, [R0]
5.3 配置蜂鸣器
ldr R0, (0x500030000x0C)
ldr R1, [R0]
bic R1, #(0x312)
str R1, [R0]死循环让
loop:bl bee_offbl led1_onbl delay bl led1_offbl led2_onbl delaybl led2_offbl led3_onbl delaybl led3_offbl bee_onbl delayb loopdelay:mov R10, #0x10000000
d2:sub R10, R10, #1cmp R10, #0bne d2mov PC, LRled1_on:
ldr R0, (0x500060000x14)
ldr R1, [R0]
orr R1, #(0x110)
str R1, [R0]
mov PC, LRled2_on:
ldr R0, (0x500070000x14)
ldr R1, [R0]
orr R1, #(0x110)
str R1, [R0]
mov PC, LRled3_on:
ldr R0, (0x500060000x14)
ldr R1, [R0]
orr R1, #(0x18)
str R1, [R0]
mov PC, LRbee_on:
ldr R0, (0x500030000x14)
ldr R1, [R0]
orr R1, #(0x16)
str R1, [R0]
mov PC, LRled1_off:
ldr R0, (0x500060000x14)
ldr R1, [R0]
bic R1, #(0x110)
str R1, [R0]
mov PC, LRled2_off:
ldr R0, (0x500070000x14)
ldr R1, [R0]
bic R1, #(0x110)
str R1, [R0]
mov PC, LRled3_off:
ldr R0, (0x500060000x14)
ldr R1, [R0]
bic R1, #(0x18)
str R1, [R0]
mov PC, LRbee_off:
ldr R0, (0x500030000x14)
ldr R1, [R0]
bic R1, #(0x16)
str R1, [R0]
mov PC, LR.end4、疑问
4.1 汇编代码优化 从源码中可以看出其实有大量的重复代码作为一名“资深”程序员很想抽成一个一个的函数。但是实际中这样做一定有大量的push/pop操作而且如果程序段跨度过大代码段的交替跳转有可能还会影响程序执行效率(CPU会将执行代码的前后一段调入到多级缓存中以提升执行效率)。 因此在编写汇编的时候应该遵循执行效率优先还是可读性和可复用性呢
4.2 一段反汇编代码 如图所示 (0x500000000xA28)被译成了[pc, #444] 不太理解。