作者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/m.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