Re: [問題] 系統程式裡的組語
※ 引述《denille (阿丹)》之銘言:
: 這是系統程式書裡,其中一章在介紹組語的,是在介紹多層次的副程式呼叫
: 順便附上我的想法...不知道對不對...
: 程式碼:
: LD R2, x 將x值載入R2暫存器
: PUSH R2 將R2推入堆疊
: CALL f1 呼叫副程式f1
: ST R1, y 將R1暫存器的內容存到y裡(雖然我不知道存了什麼...)
: RET
: x: WORD 1 x有一個字組的空間
: y: RESW 1 y保留了一個字組空間 (x和y差在哪?)
: f1:
: POP R2 將R2推出來
: PUSH LR 將LR推入以返回位址
: ST R2, t 將R2暫存器的值存到t裡
: LD R3, pt 將pt載入R3,因為pt就是t,所以R3的值現在是x?不懂幹麻要分pt跟t?
: PUSH R3 將R3推入
: CALL f2 呼叫f2
: ST R1, b 把R1暫存器的值存到b裡
: ADD R1, R1, R1 把R1的值變成二倍
: POP LR 將LR推出
: RET
: t:RESW 1
: b:RESW 1
: pt:WORD t
: f2:
: POP R2 將R2推出,但剛剛在f1不是推出來了?可以再推一次?
POP的定義是把堆疊中最上面的拿出來,放到你所指定的記憶體位置
這邊你是用R2暫存器來存。
而根據你之前的程式來看,call f2前有先PUSH R3,
所以這段應該是把之前的R3放到R2。
那為何要如此做呢?這邊我記不太清楚,好像是呼叫時暫存器要存入你起始位置
當程式看到RET就會回到你原來的位置。
: LD R3, [R2] 將R2記憶體值裡的內容載入到R3,但剛剛R2的值不是存到t裡了?
: 現在R2裡還有資料?
接著把R2的內容在放到R3,所以這邊這可以取回呼叫前R3的值。
: LDI R4, 5 將數值5載入R4
: ADD R1, R3, R4 R3和R4值相加,載入R1
: ST R1, r 將R1的值存入r
: RET
: r:RESW 1
: 另外,為什麼要pt: WORD t 再 t: RESW 1呢?
: pt: WORD t 代表pt的初始值為t,t也是一個變數,有1個字組的空間?
: 那為什麼在f1裡,ST R2, t 不寫成 ST R2, t 呢?
: LD R3, pt LD R3, t
: 好像pt跟t都各是獨立的空間?
我猜是只任意兩個不同記憶體區間
: 請大家教教小弟吧!
我直接回覆在上面了,其他地方我沒細看,也不知你在說什麼?
另外你貼這種程式一般很難看懂吧,
首先你要先說你哪些是暫存器(R)、哪些是副程式(f)、哪些是記憶體位置
要不然別人光看程式就頭大,然後懶得看了。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 49.158.23.163
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
ASM 近期熱門文章
PTT數位生活區 即時熱門文章