Assembly cortex M4拇指总成功能地址

Assembly cortex M4拇指总成功能地址,assembly,arm,cortex-m,Assembly,Arm,Cortex M,我目前正试图了解Cortex-m内核的ARM组装 我知道处于Thumb模式(这是核心支持的唯一模式)的函数是通过其地址调用的,并且地址的LSB是高的,以指示目标是Thumb代码 在assembly中,我在函数“Reset_Handler”前面写下以下内容,告诉汇编程序标签上的数据是可执行的/a函数: .type Reset_Handler, %function Reset_Handler: MOV R0, R0 # just do something 如果我现在加载标签的地址

我目前正试图了解Cortex-m内核的ARM组装

我知道处于Thumb模式(这是核心支持的唯一模式)的函数是通过其地址调用的,并且地址的LSB是高的,以指示目标是Thumb代码

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

  .type  Reset_Handler, %function
  Reset_Handler: 
  MOV R0, R0 # just do something
如果我现在加载标签的地址

  LDR R0, =Reset_Handler
设置了R0的LSB

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

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

如果我想将函数的代码复制到RAM并加载该函数的地址,我必须自己清除LSB以获得数据所在的“真实”地址,对吗


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

有两种类型的地址(标签)。一种类型是您要调用的地址、函数入口点的地址,对于thumb,bx或pop需要设置lsbit。另一个是数据项的地址、字符串的开头、数组的开头等等,它不希望lsbit损坏,因为这会导致对齐错误。因此,除非您想在使用bx之前向地址添加代码或一个地址,否则您真的希望在定义标签或使用标签时汇编程序有一个解决方案


因此,对于gnu汇编器,您需要在标签之前添加.thumb_func(可能还有其他方法),对于汇编器,您似乎需要汇编器所需的地址。

有两种类型的地址(标签)。一种类型是您要调用的地址、函数入口点的地址,对于thumb,bx或pop需要设置lsbit。另一个是数据项的地址、字符串的开头、数组的开头等等,它不希望lsbit损坏,因为这会导致对齐错误。因此,除非您想在使用bx之前向地址添加代码或一个地址,否则您真的希望在定义标签或使用标签时汇编程序有一个解决方案

因此,对于gnu汇编器,您需要在标签之前添加thumb_func(可能还有其他方法),对于汇编器,您似乎需要汇编器所需的内容。

您使用的汇编器是什么(汇编语言由汇编器定义,通常不通用)您使用的汇编器是什么(汇编语言是由汇编程序定义的,它通常不是通用的)