混合使用C、C++和匯編語(yǔ)之:從匯編代碼訪(fǎng)問(wèn) C 全局變量
12.2從匯編代碼訪(fǎng)問(wèn)C全局變量
在匯編代碼中訪(fǎng)問(wèn)C全局變量,只能通過(guò)地址間接訪(fǎng)問(wèn)全局變量。要訪(fǎng)問(wèn)全局變量,必須在匯編中使用IMPORT偽操作輸入全局變量,然后將地址載入寄存器??梢愿鶕兞康念?lèi)型使用載入和存儲指令訪(fǎng)問(wèn)該變量。
本文引用地址:http://dyxdggzs.com/article/257033.htm對于無(wú)符號變量,使用:
·LDRB/STRB:用于char型;
·LDRH/STRH:用于short型(對于ARM體系結構v3,使用兩個(gè)LDRB/STRB指令);
·LDR/STR:用于int型。
對于有符號變量,請使用等效的有符號數的Load/Store指令,如LDRSB和LDRSH。
對于少于8個(gè)字的小結構體可以用LDM和STM指令將其作為整體訪(fǎng)問(wèn)。同時(shí)也可以用適當類(lèi)型的Load/Store指令訪(fǎng)問(wèn)結構的單個(gè)成員。為了訪(fǎng)問(wèn)成員,必須了解該成員地址相對于結構體開(kāi)始處的偏移量。
下面的例子將整型全局變量globvar的地址載入r1、將該地址中包含的值載入r0、將它與2相加,然后將新值存回globvar中。
PRESERVE8
AREAglobals,CODE,READONLY
EXPORTasmsubroutine
IMPORTglobvar
asmsubroutine
LDRr1,=globvar;readaddressofglobvarinto
;r1fromliteralpool從內存池中讀取globvar變量的地址,加載到r1中
LDRr0,[r1]
ADDr0,r0,#2
STRr0,[r1]
MOVpc,lr
END
c++相關(guān)文章:c++教程
評論