12.2 從匯編代碼訪問 C 全局變量
在匯編代碼中訪問C全局變量,只能通過地址間接訪問全局變量。要訪問全局變量,必須在匯編中使用 IMPORT 偽操作輸入全局變量,然后將地址載入寄存器??梢愿鶕兞康念愋褪褂幂d入和存儲指令訪問該變量。
對于無符號變量,使用:
· LDRB/STRB:用于char型;
· LDRH/STRH:用于short型(對于ARM體系結構v3,使用兩個 LDRB/STRB指令);
· LDR/STR:用于int型。
對于有符號變量,請使用等效的有符號數的Load/Store指令,如LDRSB和LDRSH。
對于少于8個字的小結構體可以用LDM和STM指令將其作為整體訪問。同時也可以用適當類型的Load/Store指令訪問結構的單個成員。為了訪問成員,必須了解該成員地址相對于結構體開始處的偏移量。
下面的例子將整型全局變量globvar的地址載入r1、將該地址中包含的值載入r0、將它與2相加,然后將新值存回globvar中。
PRESERVE8
AREA globals,CODE,READONLY
EXPORT asmsubroutine
IMPORT globvar
asmsubroutine
LDR r1, =globvar ;read address of globvar into
;r1 from literal pool從內存池中讀取globvar變量的地址,加載到r1中
LDR r0, [r1]
ADD r0, r0, #2
STR r0, [r1]
MOV pc, lr
END