[問題]ARM assembly 起始位置

看板ASM (組合語言)作者 (雲§淡)時間2年前 (2022/01/19 23:25), 編輯推噓5(5026)
留言31則, 6人參與, 2年前最新討論串1/1
最近在學習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://www.ptt.cc/bbs/ASM/M.1642605905.A.278.html

01/20 01:00, 2年前 , 1F
沒仔細看,不過你文件是 v6,compiler 似乎是 v5 的?
01/20 01:00, 1F

01/20 01:37, 2年前 , 2F
你這看起來像是stm32?一般來說是不應該改startup檔才對
01/20 01:37, 2F

01/20 01:38, 2年前 , 3F
對,因為這都是固定流程,其中包括了進行C語言的runtim
01/20 01:38, 3F

01/20 01:39, 2年前 , 4F
e初始化,如果任意更改可能導致啟動行為不正確。如果真
01/20 01:39, 4F

01/20 01:41, 2年前 , 5F
的要更改的話首先你要確定你想改的是哪個地方,因此理
01/20 01:41, 5F

01/20 01:42, 2年前 , 6F
解硬體上電後的動作是必要的,一般來說上電後會從vecto
01/20 01:42, 6F

01/20 01:43, 2年前 , 7F
r table中取出Reset handler地址來執行,假如你想更改
01/20 01:43, 7F

01/20 01:50, 2年前 , 8F
的是執行你的程式,那你應該直接更改reset handler的內
01/20 01:50, 8F

01/20 01:51, 2年前 , 9F
容而非去調整reset handler的地址
01/20 01:51, 9F

01/20 01:53, 2年前 , 10F
那假如你現在是要啟動後要跳去指定的地址執行放置在特
01/20 01:53, 10F

01/20 01:58, 2年前 , 11F
定地址的程式碼,也就是要直接設定Reset handler本身所
01/20 01:58, 11F

01/20 01:59, 2年前 , 12F
在地址的話,那你要更改的應該是linker script的內容
01/20 01:59, 12F

01/20 02:02, 2年前 , 13F
你提到的.org指令我沒用過,但其目的應該跟更改linker
01/20 02:02, 13F

01/20 02:02, 2年前 , 14F
script是類似的
01/20 02:02, 14F

01/20 08:59, 2年前 , 15F
如果你的 arm 是 stm32/cortex-m, 可以參考
01/20 08:59, 15F

01/20 09:00, 2年前 , 16F
01/20 09:00, 16F

01/20 22:39, 2年前 , 17F
原來這是V6的compiler!沒注意到這一點,謝謝提醒!
01/20 22:39, 17F

01/20 22:40, 2年前 , 18F
這顆是公司拿中國那邊開的來給我,不是stm32,但底
01/20 22:40, 18F

01/20 22:41, 2年前 , 19F
是cortex-M0的架構,查了stm32,開機程式真的超像的
01/20 22:41, 19F

01/20 22:41, 2年前 , 20F
是否ARM的startup都差不多這樣?
01/20 22:41, 20F

01/20 22:42, 2年前 , 21F
會選擇在Reset handler這邊側是改地址是因為我習慣
01/20 22:42, 21F

01/20 22:42, 2年前 , 22F
先跑keil的simulator,看他R0這些暫存器行為跟值
01/20 22:42, 22F

01/20 22:43, 2年前 , 23F
但常常simulator跑完就直接上機,卻忽略了改這些可
01/20 22:43, 23F

01/20 22:44, 2年前 , 24F
能會導致啟動問題,感謝breeze大的說明
01/20 22:44, 24F

01/20 22:44, 2年前 , 25F
也感謝descent大,參考網址內資料後,也讓我找到C可
01/20 22:44, 25F

01/20 22:45, 2年前 , 26F
以直接用__attribute__((section(.arm.at addres)))
01/20 22:45, 26F

01/20 22:45, 2年前 , 27F
來定址
01/20 22:45, 27F

01/20 23:23, 2年前 , 28F
不是, arm 有不同系列,startup 都存在一些差異。
01/20 23:23, 28F

01/23 19:21, 2年前 , 29F
大概是仿stm32的mcu吧。如果是仿的就會很像 主要是記憶
01/23 19:21, 29F

01/23 19:21, 2年前 , 30F
體起始位置會有差異
01/23 19:21, 30F

04/21 16:50, 2年前 , 31F
偽指令?不就給編譯器看的,別學好了。
04/21 16:50, 31F
文章代碼(AID): #1Xw2rH9u (ASM)
文章代碼(AID): #1Xw2rH9u (ASM)