2024年5月29日 星期三

[ARM bootloader] 問題解說

 1. 組合語言和指令集是一樣的東西嗎? 網路上看到的一般在說x86或ARM的assembly好像就是在說指令集,但圖Assembly和Instruction set又是分開的,所以還是有差別?


關係像是這樣

Assembly Language -------------------Assembler----------> CPU Instruction set  







2. 講義.text section裡的有一行rodata.str1.4是什麼意思?

   .rodata.xxxx  區段也是 read only data, 但存的是程式中的常數 "字串" 
2.JPG


3. LMA load memory address我不太懂什麼時候會用到,應該是說不太知道10-118頁的ROM和RAM各是什麼角色,一般所謂的「load進memory」的memory都是指RAM嗎?

(1)ROM 存放程式的地方, RAM 執行程式的地方
但ROM這個硬體是CPU可以隨機定址的, 所以其實程式也可以在ROM上跑, 只要將程式中的變數copy 到RAM即可,但要將. text, .rodata 等也都copy到RAM也是可以的. 

(2)若VMA==LMA 則不用copy , 但VMA和LMA不同, 則要將 LMA (來源) copy 到 VMA(目的地)  
底下圖 就是VMA和LMA不同, 所以會有copy的動作
.
(3) load進memory==> memory是指RAM 




4. Linker startup code, boot.o負責copy和BSS清成0是否口誤,因為下一頁boot.o只有負責copy,start.o才是zero BSS,兩個是分開的

對, boot.o 的程式只負責copy而已