cortex M4 Thumb组装功能地址

时间:2016-07-14 10:49:33

标签: assembly arm cortex-m

我目前正在尝试了解用于Cortex-M内核的ARM程序集。

我知道处于Thumb模式的功能(这是核心支持的唯一模式)由其地址调用,地址的LSB为高,表示目标是Thumb代码。

在汇编中,我在函数" Reset_Handler"前面写下面的内容。告诉汇编程序标签上的数据是可执行的/函数:

  .type  Reset_Handler, %function
  Reset_Handler: 
  MOV R0, R0 # just do something

如果我现在加载标签的地址

  LDR R0, =Reset_Handler

设置R0的LSB。

我是否必须将此.type指令放在我想用作间接调用函数的每个标签前面?

或者有没有办法让汇编程序自动决定正确的地址?

如果我想将函数的代码复制到RAM并加载此函数的地址,我必须自己清除LSB以获得" real"数据所在的地址,对不对?

在这种情况下,.type指令是否必要?我知道只要我想将地址放在向量表中就有必要,因为这需要设置LSB。

1 个答案:

答案 0 :(得分:2)

有两种类型的地址(标签)。一种类型是您要调用的地址,函数入口点的地址以及bx或pop需要lsbit集的拇指。另一个是数据项的地址,字符串的开头,数组的开头,等等,并且不希望lsbit损坏,因为这会导致对齐错误。因此,除非您希望在使用bx之前将代码添加到OR地址,否则您确实希望汇编程序在您定义标签或使用标签时都有解决方案。

因此对于gnu汇编程序,你需要在标签之前使用.thumb_func(以及可能的其他方法),对于汇编程序来说,你需要汇编程序需要它。