在C程序中聲明的全局變量可以被匯編程序通過地址間接訪問,具體訪問方法如下。
·使用IMPORT偽指令聲明該全局變量。
·使用LDR指令讀取該全局變量的內(nèi)存地址,通常該全局變量的內(nèi)存地址值存放在
程序的數(shù)據(jù)緩沖池中。
·根據(jù)該數(shù)據(jù)的類型,使用相應的LDR指令讀取該全局變量的值;使用相應的STR
指令修改該全局變量的值。
各數(shù)據(jù)類型及其對應的LDR/STR指令如下。
·對于無符號的char類型的變量通過指令LDRB/STRB來讀寫。
·對于無符號的short類型的變量通過指令LDRH/STRH來讀寫。
·對于int類型的變量通過指令LDR/STR來讀寫。
·對于有符號的char類型的變量通過指令LDRSB來讀取。
·對于有符號的char類型的變量通過指令STRB來寫入。
·對于有符號的short類型的變量通過指令LDRH來讀取。
·對于有符號的short類型的變量通過指令STRH來寫入。
·對于小于8個字的結(jié)構型變量,可以通過一條LDM/STM指令來讀/寫整個變量。
·對于結(jié)構型變量的數(shù)據(jù)成員,可以使用相應的LDR/STR指令來訪問,這時必須知道該數(shù)據(jù)成員相對于結(jié)構型變量開始地址的偏移量。
下面是一個在匯編程序中訪問C程序全局變量的例子。程序中變量globv1是在C程序中聲明的全局變量。在匯編程序中首先用IMPORT偽指令聲明該變量;再將其內(nèi)存地址讀入到寄存器RI中;然后將其值讀入到寄存器R0中;修改后再將寄存器R0的值賦予變量globv1。本例中的程序如下。
來源:ks990次