作者student23489 (云§淡)
看板ASM
标题[问题]ARM assembly 起始位置
时间Wed Jan 19 23:25:03 2022
最近在学习arm assembly,之前有写过8051,想询问arm要怎麽使用51的org伪指令功能
我参考了armKEIL官方的compiler reference guide:
https://reurl.cc/pW178e
但写了後,compiler都不会过,不晓得是不是小弟语法使用错误,请前辈纠正
程式码
https://imgur.com/kIEOnc5
https://imgur.com/WqPsL6N
只要加上org这行就会让编译产生错误
.org 1b + 0x55
LDR R0, = SystemInit
BLX R0
或是有没有其他方法可以指定初始位置?因为我看跳LABEL的地址都是由compiler赋予的
在这先谢谢各位前辈
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.226.98.225 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/ASM/M.1642605905.A.278.html
1F:→ Lipraxde: 没仔细看,不过你文件是 v6,compiler 似乎是 v5 的? 01/20 01:00
2F:推 breeze08: 你这看起来像是stm32?一般来说是不应该改startup档才对 01/20 01:37
3F:→ breeze08: 对,因为这都是固定流程,其中包括了进行C语言的runtim 01/20 01:38
4F:→ breeze08: e初始化,如果任意更改可能导致启动行为不正确。如果真 01/20 01:39
5F:→ breeze08: 的要更改的话首先你要确定你想改的是哪个地方,因此理 01/20 01:41
6F:→ breeze08: 解硬体上电後的动作是必要的,一般来说上电後会从vecto 01/20 01:42
7F:→ breeze08: r table中取出Reset handler地址来执行,假如你想更改 01/20 01:43
8F:推 breeze08: 的是执行你的程式,那你应该直接更改reset handler的内 01/20 01:50
9F:→ breeze08: 容而非去调整reset handler的地址 01/20 01:51
10F:→ breeze08: 那假如你现在是要启动後要跳去指定的地址执行放置在特 01/20 01:53
11F:推 breeze08: 定地址的程式码,也就是要直接设定Reset handler本身所 01/20 01:58
12F:→ breeze08: 在地址的话,那你要更改的应该是linker script的内容 01/20 01:59
13F:→ breeze08: 你提到的.org指令我没用过,但其目的应该跟更改linker 01/20 02:02
14F:→ breeze08: script是类似的 01/20 02:02
15F:→ descent: 如果你的 arm 是 stm32/cortex-m, 可以参考 01/20 08:59
17F:→ student23489: 原来这是V6的compiler!没注意到这一点,谢谢提醒! 01/20 22:39
18F:→ student23489: 这颗是公司拿中国那边开的来给我,不是stm32,但底 01/20 22:40
19F:→ student23489: 是cortex-M0的架构,查了stm32,开机程式真的超像的 01/20 22:41
20F:→ student23489: 是否ARM的startup都差不多这样? 01/20 22:41
21F:→ student23489: 会选择在Reset handler这边侧是改地址是因为我习惯 01/20 22:42
22F:→ student23489: 先跑keil的simulator,看他R0这些暂存器行为跟值 01/20 22:42
23F:→ student23489: 但常常simulator跑完就直接上机,却忽略了改这些可 01/20 22:43
24F:→ student23489: 能会导致启动问题,感谢breeze大的说明 01/20 22:44
25F:→ student23489: 也感谢descent大,参考网址内资料後,也让我找到C可 01/20 22:44
26F:→ student23489: 以直接用__attribute__((section(.arm.at addres))) 01/20 22:45
27F:→ student23489: 来定址 01/20 22:45
28F:→ descent: 不是, arm 有不同系列,startup 都存在一些差异。 01/20 23:23
29F:推 easypro: 大概是仿stm32的mcu吧。如果是仿的就会很像 主要是记忆 01/23 19:21
30F:→ easypro: 体起始位置会有差异 01/23 19:21
31F:推 sorcerer1973: 伪指令?不就给编译器看的,别学好了。 04/21 16:50