STM32F10x的启动汇编分析

来源:互联网 发布:软件开发入门 编辑:程序博客网 时间:2024/06/08 14:29
;******************** (C) COPYRIGHT 2009 STMicroelectronics ******************** 
;* File Name          : startup_stm32f10x_cl.s 
;* Author             : MCD Application Team 
;* Version            : V3.1.0 
;* Date               : 06/19/2009 
;* Description        : STM32F10x Connectivity line devices vector table for RVMDK  
;*                      toolchain.  
;*                      This module performs: 
;*                      - Set the initial SP 
;*                      - Set the initial PC == Reset_Handler 
;*                      - Set the vector table entries with the exceptions ISR address 
;*                      - Branches to __main in the C library (which eventually 
;*                        calls main()). 
;*                      After Reset the CortexM3 processor is in Thread mode, 
;*                      priority is Privileged, and the Stack is set to Main. 
;* <<< Use Configuration Wizard in Context Menu >>>    
;******************************************************************************* 
; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 
; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 
; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 
; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 
; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 
; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 
;******************************************************************************* 

; Amount of memory (in bytes) allocated for Stack 
; Tailor this value to your application needs 
; <h> Stack Configuration 
;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> 
; </h> 
; 首先对栈和堆的大小进行定义,并在代码区的起始处建立中断向量表,其第一个表项是栈 
; 顶地址,第二个表项是复位中断服务入口地址。然后在复位中断服务程序中跳转C/C++标 
; 准实时库的__main函数。假设STM32被设置为从内部FLASH启动中断向量表起始地位为0x8000000, 
; 则栈顶地址存放于0x8000000处,而复位中断服务入口地址存放于0x8000004处。当STM32遇 
; 到复位信号后,则从0x80000004处取出复位中断服务入口地址继而执行复位中断服务程序, 
; 然后跳转__main函数,最后来到C的世界。 
  
; DCD指令:作用是开辟一段空间,其意义等价于C语言中的地址符“&”。开始建立的中断向量 
; 表则类似于使用C语.其每一个成员都是一个函数指针,分别指向各个中断服务函数 

;伪指令AREA,表示开辟一段大小为Stack_Size的内存空间作为栈,段名是STACK,可读可写。 
;NOINIT:指定此数据段仅仅保留了内存单元,而没有将各初始值写入内存单元,或者将各个内存单元值初始化为0 

;常见的数据定义伪指令有如下几种: 

;— DCB 用于分配一片连续的字节存储单元并用指定的数据初始化。 
;— DCW (DCWU) 用于分配一片连续的半字存储单元并用指定的数据初始化。 
;— DCD (DCDU) 用于分配一片连续的字存储单元并用指定的数据初始化。 
;— DCFD (DCFDU)用于为双精度的浮点数分配一片连续的字存储单元并用指 定的数据初始化。 
;— DCFS  DCFSU) 用于为单精度的浮点数分配一片连续的字存储单元并用指 定的数据初始化。 
;— DCQ  DCQU) 用于分配一片以 8 字节为单位的连续的存储单元并用指定 的数据初始化。 
;— SPACE 用于分配一片连续的存储单元 
;— MAP 用于定义一个结构化的内存表首地址 
;— FIELD 用于定义一个结构化的内存表的数据域 
;EXPORT伪指令用于在程序中声明一个全局的标号,该标号可在其他的文件中引用。EXPORT可用GLOBAL代替。标号在程序中区分大小写,[WEAK]选项声明其他的同名标号优先于该标号被引用。 

;;启动代码作用一般是: 
;;1)堆和栈的初始化; 
;2)向量表定义; 
;;3)地址重映射及中断向量表的转移; 
;;4)设置系统时钟频率; 
;;5)中断寄存器的初始化; 
;;6)进入C应用程序。 


;1)堆和栈的初始化 
Stack_Size      EQU     0x00000400 ;栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈 
  ;SPACE用来分配一片连续的存储区域并初始化为0. 
                AREA    STACK, NOINIT, READWRITE, ALIGN=3     ;AREA 伪指令用于定义一个代码段或数据,;定义栈,可初始为0,8字节对齐2*2*2,2的3次方 
  ;NOINIT:指定此数据段仅仅保留了内存单元, 
  ;READWRITE属性:指定本段为可读可写,数据段的默认属性为READWRITE。 
  ;STACK 段名 
  ;ALIGN属性:使用方式为ALIGN 表达式。在默认时,ELF(可执行连接文件)的代码段和数据段是按字对齐的,表达式的取值范围为0~31,相应的对齐方式为2表达式次方。 
Stack_Mem       SPACE   Stack_Size    ;;分配0x400个连续字节,并初始化为0 
__initial_sp   ;标号__initial_sp,表示栈空间顶地址。   ;汇编代码地址标号 


; <h> Heap Configuration 
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> 
; </h> 

Heap_Size       EQU     0x00000200 ;堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表 

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3    ;ALIGN用来指定对齐方式, 8字节对齐 
__heap_base     ;表示堆空间起始地址 

Heap_Mem        SPACE   Heap_Size 
__heap_limit  ;表示堆空间结束地址 

                PRESERVE8 ;PRESERVE8 指令指定当前文件保持堆栈八字节对齐 
                THUMB ; 告诉汇编器下面是32位的Thumb指令,如果需要汇编器将插入位以保证对齐 

;2)中断向量表定义 
; Vector Table Mapped to Address 0 at Reset   ;实际上是在CODE区(假设STM32从FLASH启动,则此中断向量表起始地址即为0x8000000) 

                AREA    RESET, DATA, READONLY ;定义一块数据段,只可读,段名字是RESET 
;DATA属性:用于定义数据段,默认为READWRITE。指定本段为可读可写 
                EXPORT  __Vectors     ;EXPORT:在程序中声明一个全局的标号__Vectors,该标号可在其他的文件中引用 
                EXPORT  __Vectors_End ;在程序中声明一个全局的标号__Vectors_End 
                EXPORT  __Vectors_Size ;在程序中声明一个全局的标号__Vectors_Size 

__Vectors       DCD     __initial_sp              ; Top of Stack 第一个表项是栈顶地址 
;该处物理地址值即为 __Vetors 标号所表示的值, 
                                        ;该地址中存储__initial_sp所表示的地址值, 
;大小为一个字(32bit) 
                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 执行系统服务调用指令(SVC)引发的异常 
                DCD     DebugMon_Handler          ; Debug Monitor Handler 调试监视器(断点,数据观察点,或者是外部调试请求  
                DCD     0                         ; Reserved 
                DCD     PendSV_Handler            ; PendSV Handler 为系统设备而设的“可悬挂请求” (pendable request) 
                DCD     SysTick_Handler           ; SysTick Handler  系统滴答定时器 

                ; External Interrupts 外设中断 
                DCD     WWDG_IRQHandler            ; Window Watchdog   窗口看门狗 
                DCD     PVD_IRQHandler             ; PVD through EXTI Line detect 电源电压检测(PVD)中断  
                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 and ADC2 
                DCD     CAN1_TX_IRQHandler         ; CAN1 TX 
                DCD     CAN1_RX0_IRQHandler        ; 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         ; I2C1 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     OTG_FS_WKUP_IRQHandler     ; USB OTG FS Wakeup through EXTI line 
                DCD     0                          ; Reserved 
                DCD     0                          ; Reserved 
                DCD     0                          ; Reserved 
                DCD     0                          ; Reserved 
                DCD     0                          ; Reserved 
                DCD     0                          ; Reserved 
                DCD     0                          ; Reserved 
                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_IRQHandler   ; DMA2 Channel4 
                DCD     DMA2_Channel5_IRQHandler   ; DMA2 Channel5 
                DCD     ETH_IRQHandler             ; Ethernet 
                DCD     ETH_WKUP_IRQHandler        ; Ethernet Wakeup through EXTI line 
                DCD     CAN2_TX_IRQHandler         ; CAN2 TX 
                DCD     CAN2_RX0_IRQHandler        ; CAN2 RX0 
                DCD     CAN2_RX1_IRQHandler        ; CAN2 RX1 
                DCD     CAN2_SCE_IRQHandler        ; CAN2 SCE 
                DCD     OTG_FS_IRQHandler          ; USB OTG FS 
__Vectors_End   ; 结束 

__Vectors_Size  EQU  __Vectors_End - __Vectors  ;得到向量表的大小,304个字节也就是0x130个字节 
;3)地址重映射及中断向量表的转移; 
                AREA    |.text|, CODE, READONLY   ;定义一个代码段,可读,段名字是.text  段名若以数字开头,则该段名需用"|"括起来,如|1_test|。 
;定义只读数据段,实际上是在CODE区,如果在FLASH区起动,则 中断向量起始地址为0X8000000 
;;CODE属性:用于定义代码段,默认为READONLY 
; Reset handler routine 
Reset_Handler    PROC ;;标记一个函数的开始;利用PROC、ENDP这一对伪指令把程序段分为若干个过程,使程序的结构加清晰 
                 EXPORT  Reset_Handler             [WEAK]  ;在外部没有定义该符号时导出该符号Reset_Handler   
 ;EXPORT伪指令用于在程序中声明一个全局的标号 
          IMPORT  __main   ;IMPORT:伪指令用于通知编译器要使用的标号在其他的源文件中定义 
                 LDR     R0, =__main ;__main为运行时库提供的函数;完成堆栈,堆的初始化等工作,会调用下面定义的__user_initial_stackheap 
                 BX      R0   ;跳到__main,进入C的世界    
                 ENDP 

; Dummy Exception Handlers (infinite loops which can be modified) 
;虚拟异常处理器(无限循环可以修改了) 

NMI_Handler     PROC ;PROC表示汇编函数的开始 
                EXPORT  NMI_Handler                [WEAK]   ;WEAK声明其他的同名标号优先于该标号被引用,就是说如果外面声明了的话, 
                B       .  ;会调用外面的 
                ENDP 
HardFault_Handler\ 
                PROC  ;PROC表示汇编函数的开始 
                EXPORT  HardFault_Handler          [WEAK]  ;\换行的意思 
                B       . 
                ENDP 
MemManage_Handler\ 
                PROC ;PROC表示汇编函数的开始 
                EXPORT  MemManage_Handler          [WEAK] 
                B       . 
                ENDP 
BusFault_Handler\ 
                PROC   ;PROC表示汇编函数的开始 
                EXPORT  BusFault_Handler           [WEAK] 
                B       . 
                ENDP 
UsageFault_Handler\ 
                PROC 
                EXPORT  UsageFault_Handler         [WEAK] 
                B       . 
                ENDP 
SVC_Handler     PROC    ;PROC表示汇编函数的开始 
                EXPORT  SVC_Handler                [WEAK] 
                B       . 
                ENDP 
DebugMon_Handler\ 
                PROC ;PROC表示汇编函数的开始 
                EXPORT  DebugMon_Handler           [WEAK] 
                B       . 
                ENDP 
PendSV_Handler  PROC 
                EXPORT  PendSV_Handler             [WEAK] 
                B       . 
                ENDP 
SysTick_Handler PROC   ;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  CAN1_TX_IRQHandler         [WEAK] 
                EXPORT  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_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  OTG_FS_WKUP_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_IRQHandler   [WEAK] 
                EXPORT  DMA2_Channel5_IRQHandler   [WEAK] 
                EXPORT  ETH_IRQHandler             [WEAK] 
                EXPORT  ETH_WKUP_IRQHandler        [WEAK] 
                EXPORT  CAN2_TX_IRQHandler         [WEAK] 
                EXPORT  CAN2_RX0_IRQHandler        [WEAK] 
                EXPORT  CAN2_RX1_IRQHandler        [WEAK] 
                EXPORT  CAN2_SCE_IRQHandler        [WEAK] 
                EXPORT  OTG_FS_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 
CAN1_TX_IRQHandler 
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 
TIM4_IRQHandler 
I2C1_EV_IRQHandler 
I2C1_ER_IRQHandler 
I2C2_EV_IRQHandler 
I2C2_ER_IRQHandler 
SPI1_IRQHandler 
SPI2_IRQHandler 
USART1_IRQHandler 
USART2_IRQHandler 
USART3_IRQHandler 
EXTI15_10_IRQHandler 
RTCAlarm_IRQHandler 
OTG_FS_WKUP_IRQHandler 
TIM5_IRQHandler 
SPI3_IRQHandler 
UART4_IRQHandler 
UART5_IRQHandler 
TIM6_IRQHandler 
TIM7_IRQHandler 
DMA2_Channel1_IRQHandler 
DMA2_Channel2_IRQHandler 
DMA2_Channel3_IRQHandler 
DMA2_Channel4_IRQHandler 
DMA2_Channel5_IRQHandler 
ETH_IRQHandler 
ETH_WKUP_IRQHandler 
CAN2_TX_IRQHandler 
CAN2_RX0_IRQHandler 
CAN2_RX1_IRQHandler 
CAN2_SCE_IRQHandler 
OTG_FS_IRQHandler 

                B       . 

                ENDP 

                ALIGN 

;******************************************************************************* 
; User Stack and Heap initialization(4)堆和栈的初始化 
;******************************************************************************* 
                 IF      :DEF:__MICROLIB  ;判断是否使用DEF:__MICROLIB(micro lib) 
                 
                 EXPORT  __initial_sp      ;使用的话则将栈顶地址,堆始末地址赋予全局属 
                 EXPORT  __heap_base  ;使外部程序可以使用 

                 EXPORT  __heap_limit 
                 
                 ELSE    ;如果使用默认C库运行时 
                 
                 IMPORT  __use_two_region_memory  ;定义全局标号__use_two_region_memory 
                 EXPORT  __user_initial_stackheap   ;声明全局标号__user_initial_stackheap,这样外程序也可调用此标号 
                    ;则进行堆栈和堆的赋值,在__main函数执行过程中调用 

__user_initial_stackheap   ;标号__user_initial_stackheap,表示用户堆栈初始化程序入口 

                 LDR     R0, =  Heap_Mem     ;保存堆始地址 
                 LDR     R1, =(Stack_Mem + Stack_Size) ;保存栈的大小 
                 LDR     R2, = (Heap_Mem +  Heap_Size) ;保存堆的大小 
                 LDR     R3, = Stack_Mem  ;保存栈顶指针 
                 BX      LR 

                 ALIGN   ;ALIGN属性:使用方式为ALIGN 表达式。在默认时,ELF(可执行连接文件)的代码段和数据段是按字对齐的,表达式的取值范围为0~31,相应的对齐方式为2表达式次方 

                 ENDIF 

                 END 

;******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE***** 
参考链接: http://www.openedv.com/posts/list/1899.htm 

原文链接:http://blog.csdn.net/flydream0/article/details/8146683
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 住房公积金电话 沧州住房公积金 北京住房公积金管理中心 四川住房和城乡建设厅 佛山市住房公积金管理中心 住房公积金查询个人账户 19住房商业贷款利率 四川省住房和城乡建设厅首页 住房商业贷款利率 佛山住房公积金管理中心 四川住房城乡建设厅 西安住房公积金管理中心 住房公积金贷款额度 沧州住房公积金查询 个人住房公积金查询入口 银行住房贷款利率计算器 合肥市住房公积金管理中心 山东省住房和城乡建设厅 2019商业住房贷款利率 住房和城乡建设部 长春住房公积金 四川省住房城乡建设厅首页 新乡市住房公积金管理中心 住房贷款利率计算器 邵阳市住房公积金管理中心 邵阳住房公积金 商业住房贷款利率 陕西省住房公积金管理中心 合肥住房公积金管理中心 长春市住房公积金 山东省住房城乡建设厅 2019各银行住房商贷利率一览表 住房公积金查询入口 陕西省住房和城乡建设厅网 沧州住房公积金个人查询入口 包头市住房公积金管理中心 佛山住房公积金中心 个人住房商业性贷款 住房公积金装修贷款能贷多少 邵阳住房公积金管理中心 工资4000住房公积金一般交多少