Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly ARM部件矢量表定义-为什么矢量是这样定义的?_Assembly_Vector_Arm_Stm32 - Fatal编程技术网

Assembly ARM部件矢量表定义-为什么矢量是这样定义的?

Assembly ARM部件矢量表定义-为什么矢量是这样定义的?,assembly,vector,arm,stm32,Assembly,Vector,Arm,Stm32,我正在检查STM32F1的启动程序集代码,有些事情让我很困惑 这是代码 .syntax unified .arch armv7-m .thumb /* Initial vector table */ .section "vectors" .long _STACK_TOP /* Top of Stack */ .long _reset_Handler /* Reset Handler */ .long

我正在检查STM32F1的启动程序集代码,有些事情让我很困惑 这是代码

.syntax unified
.arch armv7-m 
.thumb 

/* Initial vector table */
        .section "vectors" 
    .long    _STACK_TOP             /* Top of Stack */
    .long    _reset_Handler        /* Reset Handler */
    .long    _NMI_Handler           /* NMI Handler */
    .long    _HardFault_Handler     /* Hard Fault Handler */
    .long    _MemManage_Handler    /* Reserved */
    .long    _BusFault_Handler     /* Reserved */
    .long    _UsageFault_Handler   /* Reserved */
    .long    0                     /* Reserved */
    .long    0                     /* Reserved */
    .long    0                     /* Reserved */
    .long    0                     /* Reserved */
    .long    _SVCall_Handler       /* SVCall Handler */
    .long    _DebugMonitor_Handler /* Reserved */
    .long    0                     /* Reserved */
    .long    _PendSV_Handler        /* PendSV Handler */
    .long    _SysTick_Handler       /* SysTick Handler */

# Some memory setup code

.macro                 def_rewritable_handler   handler 
    .thumb_func
    .weak    \handler
    .type    \handler, %function
    \handler:   b  . @@ Branch forever in default state
.endm

def_rewritable_handler  _NMI_Handler             /* NMI HANDLER */
def_rewritable_handler  _HardFault_Handler       /* HARD FAULT Handler */
def_rewritable_handler  _MemManage_Handler    /* Reserved */
def_rewritable_handler  _BusFault_Handler     /* Reserved */
def_rewritable_handler  _UsageFault_Handler   /* Reserved */ 
def_rewritable_handler  _SVCall_Handler             /* SVCALL Handler */
def_rewritable_handler  _PendSV_Handler          /* PENDSV Handler */
def_rewritable_handler  _SysTick_Handler         /* SYSTICK Handler */ 
def_rewritable_handler  _DebugMonitor_Handler /* Reserved */ 
def_rewritable_handler  _WWDG_IRQHandler            /* WWDG_IRQHandler */
def_rewritable_handler  _PVD_IRQHandler             /* PVD_IRQHandler */
def_rewritable_handler  _TAMPER_IRQHandler          /* TAMPER_IRQHandler */
def_rewritable_handler  _RTC_IRQHandler             /* RTC_IRQHandler */
def_rewritable_handler  _FLASH_IRQHandler           /* FLASH_IRQHandler */
def_rewritable_handler  _RCC_IRQHandler             /* RCC_IRQHandler */
def_rewritable_handler  _EXTI0_IRQHandler           /* EXTI0_IRQHandler */
def_rewritable_handler  _EXTI1_IRQHandler           /* EXTI1_IRQHandler */
def_rewritable_handler  _EXTI2_IRQHandler           /* EXTI2_IRQHandler */
def_rewritable_handler  _EXTI3_IRQHandler           /* EXTI3_IRQHandler */
def_rewritable_handler  _EXTI4_IRQHandler           /* EXTI4_IRQHandler */
def_rewritable_handler  _DMA1_Channel1_IRQHandler   /* DMA1_Channel1_IRQHandler */
def_rewritable_handler  _DMA1_Channel2_IRQHandler   /* DMA1_Channel2_IRQHandler */
def_rewritable_handler  _DMA1_Channel3_IRQHandler   /* DMA1_Channel3_IRQHandler */
def_rewritable_handler  _DMA1_Channel4_IRQHandler   /* DMA1_Channel4_IRQHandler */
def_rewritable_handler  _DMA1_Channel5_IRQHandler   /* DMA1_Channel5_IRQHandler */
def_rewritable_handler  _DMA1_Channel6_IRQHandler   /* DMA1_Channel6_IRQHandler */
def_rewritable_handler  _DMA1_Channel7_IRQHandler   /* DMA1_Channel7_IRQHandler */
def_rewritable_handler  _ADC1_2_IRQHandler          /* ADC1_2_IRQHandler */
def_rewritable_handler  _USB_HP_CAN1_TX_IRQHandler  /* USB_HP_CAN1_TX_IRQHandler */
def_rewritable_handler  _USB_LP_CAN1_RX0_IRQHandler /* USB_LP_CAN1_RX0_IRQHandler */
def_rewritable_handler  _CAN1_RX1_IRQHandler        /* CAN1_RX1_IRQHandler */
def_rewritable_handler  _CAN1_SCE_IRQHandler        /* CAN1_SCE_IRQHandler */
def_rewritable_handler  _EXTI9_5_IRQHandler         /* EXTI9_5_IRQHandler */
def_rewritable_handler  _TIM1_BRK_IRQHandler        /* TIM1_BRK_IRQHandler */
def_rewritable_handler  _TIM1_UP_IRQHandler         /* TIM1_UP_IRQHandler */
def_rewritable_handler  _TIM1_TRG_COM_IRQHandler    /* TIM1_TRG_COM_IRQHandler */
def_rewritable_handler  _TIM1_CC_IRQHandler         /* TIM1_CC_IRQHandler */
def_rewritable_handler  _TIM2_IRQHandler            /* TIM2_IRQHandler */
def_rewritable_handler  _TIM3_IRQHandler            /* TIM3_IRQHandler */
def_rewritable_handler  _I2C1_EV_IRQHandler         /* I2C1_EV_IRQHandler */
def_rewritable_handler  _I2C1_ER_IRQHandler         /* I2C1_ER_IRQHandler */
def_rewritable_handler  _SPI1_IRQHandler            /* SPI1_IRQHandler */
def_rewritable_handler  _USART1_IRQHandler          /* USART1_IRQHandler */
def_rewritable_handler  _USART2_IRQHandler          /* USART2_IRQHandler */
def_rewritable_handler  _EXTI15_10_IRQHandler       /* EXTI15_10_IRQHandler */
def_rewritable_handler  _RTCAlarm_IRQHandler        /* RTCAlarm_IRQHandler */
def_rewritable_handler  _USBWakeUp_IRQHandler       /* USBWakeUp_IRQHandler */

        .end 
据我所知,.long分配一个4字节的内存,通常在它前面使用一个标签来标记它的内存位置。但是有一个标签之后,有些标签可以在这个文件中找到,有些没有
我试图在谷歌上搜索这种语法,但没有找到任何结果,请给我一些解释。长符号\u name发出4个字节,值=该符号的绝对地址。(正如@Erik在评论中解释的那样。)

这就像您编写
bl symbol
——它是对该符号的引用,而不是定义

e、 g.在C中,
intfoo=bar仅定义
foo
,不定义
bar


标签是当
名称:
是行上的第一件事,并且定义了一个符号(地址=标签的位置)

.long name
不是标签,只是对符号的引用(应该由其他地方的标签定义,或者只是在链接器脚本中设置)


x:.long y
将在包含值
y
的单词的起始地址放置一个标签
x
后面的标签是引用
.long
将创建一个数据项,该数据项的值用引用标签的地址初始化。您的意思是标签就是带有此标签的代码的地址,向量部分就是我们注册地址的地方,对吗?是的,这些是用(代码)地址初始化的指针声明Labels非常感谢你的回答:)我终于发现截面向量有点像一张表address@NguyenMinh:嗯,是的,这就是为什么它被称为向量。它将CPU指向各种事件的去向(处理程序地址)。