Keil_5汇编循环实现求和

Keil_5汇编循环实现求和
汇编语⾔循环结构实例:
实现1+2+…+100(两种算法:加法和减法)
1、加法
AREA MYDATA, DATA  ;定义⼀个数据段,也可以不定义
AREA MYCODE, CODE  ;定义⼀个代码段,⾄少定义⼀个,AREA不能顶格
ENTRY    ;⼊⼝
EXPORT __main    ;声明全局标号,如果没有会报错,提⽰标号未声明
__main
MOV R0,#1  ;赋值,i=1
MOV R1,#0  ;s=0
LOOP    ; 循环体
ADD R1,R1,R0  ;s=s+1
ADDS R0,R0,#1  ;i++
CMP R0,#101  ;⽐较i和101,如果是100会少加100
BNE LOOP      ;不相等就重复循环
LDR R2,=HE  ;把HE表⽰的值加载到寄存器中,名称HE可⾃⾏定义
STR R1,[R2]  ;把s写⼊以R2为地址的寄存器中,最后的结果保存在R2中
水稻田HE    ;
DCD 0    ;分配连续的存储空间并初始化为0
DEADLOOP    ;
B DEADLOOP    ;死循环,⽬的在于观察结果
END  ;
2、减法
AREA MYDATA, DATA
AREA MYCODE, CODE
ENTRY
EXPORT __main
__main
MOV R0,#100
MOV R1,#0
LOOP
ADD R1,R1,R0
SUBS R0,R0,#1
CMP R0,#0
BNE LOOP
LDR R2,=HE
STR R1,[R2]
HE
DCD 0
DEADLOOP
B DEADLOOP
END
3、这⾥提供⼀种使⽤⾃定义简单启动代码实现求和的操作:
建⼯程的时候由于是⾃⼰写启动代码,不⽤把库⾥的启动函数包含进来,不然会报错,就是多个启动函数造成的。
STACK_TOP EQU 0x00002000
AREA    reset,CODE
DCD      STACK_TOP
DCD      Start
ENTRY
Start
MOV      r0,  #100
MOV      r1,  #0
loop
ADD      r1,  r0
SUBS    r0,    #1
BNE      loop
deadloop
B deadloop
END
4、下⾯这是直接使⽤系统中的启动函数:
STACK_TOP EQU 0X20002000
;堆栈初始化
Stack_Size      EQU    0x00000400
AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem      SPACE  Stack_Size
__initial_sp
Heap_Size      EQU    0x00000200
AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE  Heap_Size
__heap_limit
;堆栈8字节对齐
PRESERVE8
;使⽤THUMB指令
THUMB
;复位向量
AREA RESET,CODE,READONLY
__Vectors      DCD    __initial_sp              ; Top of Stack
DCD    Reset_Handler              ; Reset Handler
DCD    NMI_Handler                ; NMI Handler
DCD    HardFault_Handler          ; Hard Fault Handler
DCD    MemManage_Handler          ; MPU Fault Handler
DCD    BusFault_Handler          ; Bus Fault Handler
DCD    UsageFault_Handler        ; Usage Fault Handler
DCD    0                          ; Reserved
DCD    0                          ; Reserved
DCD    0                          ; Reserved
DCD    0                          ; Reserved
DCD    SVC_Handler                ; SVCall Handler
DCD    DebugMon_Handler          ; Debug Monitor Handler
DCD    0                          ; Reserved
DCD    PendSV_Handler            ; PendSV Handler
DCD    SysTick_Handler            ; SysTick Handler
; External Interrupts
DCD    WWDG_IRQHandler            ; Window Watchdog
DCD    PVD_IRQHandler            ; PVD through EXTI Line detect                DCD    TAMPER_IRQHandler          ; Tamper
DCD    RTC_IRQHandler            ; RTC
DCD    FLASH_IRQHandler          ; Flash
DCD    RCC_IRQHandler            ; RCC
DCD    EXTI0_IRQHandler          ; EXTI Line 0
DCD    EXTI1_IRQHandler          ; EXTI Line 1
DCD    EXTI2_IRQHandler          ; EXTI Line 2
DCD    EXTI3_IRQHandler          ; EXTI Line 3
DCD    EXTI4_IRQHandler          ; EXTI Line 4
DCD    DMA1_Channel1_IRQHandler  ; DMA1 Channel 1
DCD    DMA1_Channel2_IRQHandler  ; DMA1 Channel 2
DCD    DMA1_Channel3_IRQHandler  ; DMA1 Channel 3
聚氨酯生产工艺DCD    DMA1_Channel4_IRQHandler  ; DMA1 Channel 4
DCD    DMA1_Channel5_IRQHandler  ; DMA1 Channel 5
DCD    DMA1_Channel6_IRQHandler  ; DMA1 Channel 6
DCD    DMA1_Channel7_IRQHandler  ; DMA1 Channel 7
DCD    ADC1_2_IRQHandler          ; ADC1 & ADC2
DCD    USB_HP_CAN1_TX_IRQHandler  ; USB High Priority or CAN1 TX                DCD    USB_LP_CAN1_RX0_IRQHandler ; USB Low  Priority or CAN1 RX0                DCD    CAN1_RX1_IRQHandler        ; CAN1 RX1
DCD    CAN1_SCE_IRQHandler        ; CAN1 SCE
DCD    EXTI9_5_IRQHandler        ; EXTI Line 9..5
DCD    TIM1_BRK_IRQHandler        ; TIM1 Break
DCD    TIM1_UP_IRQHandler        ; TIM1 Update
DCD    TIM1_TRG_COM_IRQHandler    ; TIM1 Trigger and Commutation                DCD    TIM1_CC_IRQHandler        ; TIM1 Capture Compare
DCD    TIM2_IRQHandler            ; TIM2
DCD    TIM3_IRQHandler            ; TIM3
DCD    TIM4_IRQHandler            ; TIM4
投票箱制作
DCD    I2C1_EV_IRQHandler        ; I2C1 Event
DCD    I2C1_ER_IRQHandler        ; I2C1 Error
DCD    I2C2_EV_IRQHandler        ; I2C2 Event
DCD    I2C2_ER_IRQHandler        ; I2C2 Error
DCD    SPI1_IRQHandler            ; SPI1
DCD    SPI2_IRQHandler            ; SPI2
DCD    USART1_IRQHandler          ; USART1
DCD    USART2_IRQHandler          ; USART2
DCD    USART3_IRQHandler          ; USART3
DCD    EXTI15_10_IRQHandler      ; EXTI Line 15..10
DCD    RTCAlarm_IRQHandler        ; RTC Alarm through EXTI Line
DCD    USBWakeUp_IRQHandler      ; USB Wakeup from suspend
DCD    TIM8_BRK_IRQHandler        ; TIM8 Break
DCD    TIM8_UP_IRQHandler        ; TIM8 Update
DCD    TIM8_TRG_COM_IRQHandler    ; TIM8 Trigger and Commutation                DCD    TIM8_CC_IRQHandler        ; TIM8 Capture Compare
DCD    ADC3_IRQHandler            ; ADC3
DCD    FSMC_IRQHandler            ; FSMC
DCD    SDIO_IRQHandler            ; SDIO
DCD    TIM5_IRQHandler            ; TIM5
DCD    SPI3_IRQHandler            ; SPI3
DCD    UART4_IRQHandler          ; UART4
DCD    UART5_IRQHandler          ; UART5
DCD    TIM6_IRQHandler            ; TIM6
DCD    TIM7_IRQHandler            ; TIM7
DCD    DMA2_Channel1_IRQHandler  ; DMA2 Channel1
DCD    DMA2_Channel2_IRQHandler  ; DMA2 Channel2
DCD    DMA2_Channel3_IRQHandler  ; DMA2 Channel3
DCD    DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5
__Vectors_End
AREA    |.text|, CODE, READONLY
ENTRY        ;指⽰开始执⾏
Reset_Handler
; 初始化寄存器
MOV      r0,  #100        ; 加载循环变量的初值
MOV      r1,  #0          ; 初始化运算结果的值
; 计算 10+9+8+...+1
loop
ADD      r1,  r0          ; R1 += R0
SUBS    r0,    #1        ; R0⾃减,并且根据结果更新标志(有”S”后缀)
BNE      loop        ; if (R0!=0) goto loop; B+标志位NE
; 现在,运算结果在R1中
deadloop
B deadloop                ; ⼯作完成后,进⼊⽆穷循环
;异常
NMI_Handler    PROC
EXPORT  NMI_Handler                [WEAK]
B      .
ENDP
HardFault_Handler      PROC
EXPORT  HardFault_Handler          [WEAK]
B      .
ENDP
MemManage_Handler      PROC
EXPORT  MemManage_Handler          [WEAK]
B      .
ENDP
BusFault_Handler        PROC
EXPORT  BusFault_Handler          [WEAK]
B      .
ENDP
UsageFault_Handler      PROC
EXPORT  UsageFault_Handler        [WEAK]
B      .
ENDP
SVC_Handler    PROC
EXPORT  SVC_Handler                [WEAK]
B      .
ENDP
DebugMon_Handler        PROC
EXPORT  DebugMon_Handler          [WEAK]
B      .
ENDP
PendSV_Handler    PROC
EXPORT  PendSV_Handler            [WEAK]
B      .
ENDP
SysTick_Handler    PROC
EXPORT  SysTick_Handler            [WEAK]
B      .
ENDP
;中断
Default_Handler  PROC
EXPORT  WWDG_IRQHandler            [WEAK]
EXPORT  PVD_IRQHandler            [WEAK]
EXPORT  TAMPER_IRQHandler          [WEAK]
EXPORT  RTC_IRQHandler            [WEAK]
EXPORT  FLASH_IRQHandler          [WEAK]
EXPORT  RCC_IRQHandler            [WEAK]
EXPORT  EXTI0_IRQHandler          [WEAK]
EXPORT  EXTI1_IRQHandler          [WEAK]
EXPORT  EXTI2_IRQHandler          [WEAK]
EXPORT  EXTI3_IRQHandler          [WEAK]
EXPORT  EXTI4_IRQHandler          [WEAK]
EXPORT  DMA1_Channel1_IRQHandler  [WEAK]                EXPORT  DMA1_Channel2_IRQHandler  [WEAK]                EXPORT  DMA1_Channel3_IRQHandler  [WEAK]                EXPORT  DMA1_Channel4_IRQHandler  [WEAK]                EXPORT  DMA1_Channel5_IRQHandler  [WEAK]                EXPORT  DMA1_Channel6_IRQHandler  [WEAK] 
              EXPORT  DMA1_Channel7_IRQHandler  [WEAK]                EXPORT  ADC1_2_IRQHandler          [WEAK]
EXPORT  USB_HP_CAN1_TX_IRQHandler  [WEAK]                EXPORT  USB_LP_CAN1_RX0_IRQHandler [WEAK]                EXPORT  CAN1_RX1_IRQHandler        [WEAK]
EXPORT  CAN1_SCE_IRQHandler        [WEAK]
EXPORT  EXTI9_5_IRQHandler        [WEAK]
EXPORT  TIM1_BRK_IRQHandler        [WEAK]
EXPORT  TIM1_UP_IRQHandler        [WEAK]
EXPORT  TIM1_UP_IRQHandler        [WEAK]
EXPORT  TIM1_TRG_COM_IRQHandler    [WEAK]                EXPORT  TIM1_CC_IRQHandler        [WEAK]
EXPORT  TIM2_IRQHandler            [WEAK]
EXPORT  TIM3_IRQHandler            [WEAK]
EXPORT  TIM4_IRQHandler            [WEAK]
EXPORT  I2C1_EV_IRQHandler        [WEAK]
EXPORT  I2C1_ER_IRQHandler        [WEAK]
EXPORT  I2C2_EV_IRQHandler        [WEAK]
EXPORT  I2C2_ER_IRQHandler        [WEAK]
EXPORT  SPI1_IRQHandler            [WEAK]
EXPORT  SPI2_IRQHandler            [WEAK]
EXPORT  USART1_IRQHandler          [WEAK]
EXPORT  USART2_IRQHandler          [WEAK]
EXPORT  USART3_IRQHandler          [WEAK]
EXPORT  EXTI15_10_IRQHandler      [WEAK]
EXPORT  RTCAlarm_IRQHandler        [WEAK]
EXPORT  USBWakeUp_IRQHandler      [WEAK]                EXPORT  TIM8_BRK_IRQHandler        [WEAK]
EXPORT  TIM8_UP_IRQHandler        [WEAK]
EXPORT  TIM8_TRG_COM_IRQHandler    [WEAK]                EXPORT  TIM8_CC_IRQHandler        [WEAK]
EXPORT  ADC3_IRQHandler            [WEAK]
EXPORT  FSMC_IRQHandler            [WEAK]
EXPORT  SDIO_IRQHandler            [WEAK]
EXPORT  TIM5_IRQHandler            [WEAK]
EXPORT  SPI3_IRQHandler            [WEAK]
EXPORT  UART4_IRQHandler          [WEAK]
EXPORT  UART5_IRQHandler          [WEAK]
EXPORT  TIM6_IRQHandler            [WEAK]
EXPORT  TIM7_IRQHandler            [WEAK]
EXPORT  DMA2_Channel1_IRQHandler  [WEAK]                EXPORT  DMA2_Channel2_IRQHandler  [WEAK]                EXPORT  DMA2_Channel3_IRQHandler  [WEAK]                EXPORT  DMA2_Channel4_5_IRQHandler [WEAK]
WWDG_IRQHandler
PVD_IRQHandler
TAMPER_IRQHandler
RTC_IRQHandler
FLASH_IRQHandler废棉
RCC_IRQHandler
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
DMA1_Channel1_IRQHandler
DMA1_Channel2_IRQHandler
DMA1_Channel3_IRQHandler
DMA1_Channel4_IRQHandler
DMA1_Channel5_IRQHandler
DMA1_Channel6_IRQHandler
DMA1_Channel7_IRQHandler
ADC1_2_IRQHandler
USB_HP_CAN1_TX_IRQHandler
USB_LP_CAN1_RX0_IRQHandler
CAN1_RX1_IRQHandler
CAN1_SCE_IRQHandler
EXTI9_5_IRQHandler
TIM1_BRK_IRQHandler
TIM1_UP_IRQHandler
TIM1_TRG_COM_IRQHandler
眼镜显示器
TIM1_CC_IRQHandler
TIM2_IRQHandler
TIM3_IRQHandler

本文发布于:2024-09-22 04:18:04,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/101831.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:启动   结果   循环   实现   函数
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议