在學校,我們正在學習組裝。我試圖研究這段代碼
RES: .word 0
N: .word 5
NUM1: .word 3, -17, 27, -12, 322
LDR r1, N
ADR r2, NUM1
MOV r0, #0
LOOP: LDR r3, [r2]
ADD r0, r0, r3
ADD r2, r2, #4
SUB r1, r1, #1
CMP r1, #0
BGT LOOP
STR r0, RES
但我不明白這一行ADD r2, r2, #4,我們的老師告訴我們這是下一次迭代,但為什么不是ADD r2, r2, #1?
uj5u.com熱心網友回復:
ARM 系統,就像今天的大多數系統一樣,是位元組可尋址的。存盤在記憶體中的 32 位整數占用 4 個位元組。這 4 個位元組中的每一個都有自己的位元組地址。因此,在一個整數陣列中,第一個整數是在NUM1,第二個是在NUM1 4。我們只用一個地址來指代多位元組專案——其中最低的一個。這既適用于 4 位元組整數,也適用于整個陣列:我們通過其最低地址參考整個陣列。
僅添加 #1 將是一個邏輯錯誤,因為它不會到達陣列中的下一個整數。如果陣列有合適的 byte 或 char 元素。
陣列包含類似型別的專案,因此對于 4 位元組整數,即 4 所需的縮放比例A[i]是i乘以元素大小。
在一個不一定包含類似成員的結構中,我們將先前成員的大小(以位元組為單位)相加,加上元素之間的任何對齊填充,以達到給定結構成員的偏移量。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/498466.html
上一篇:如何在宏中參考資料部分的值?
下一篇:可變資料部分?
