從匯編程序中訪問C程序變量
發布時間:2008/12/23 0:00:00 訪問次數:1270
在c程序中聲明的全局變量可以被匯編程序通過地址間接訪問,具體訪問方法如下。
·使用import偽指令聲明該全局變量。
·使用ldr指令讀取該全局變量的內存地址,通常該全局變量的內存地址值存放在
程序的數據緩沖池中。
·根據該數據的類型,使用相應的ldr指令讀取該全局變量的值;使用相應的str
指令修改該全局變量的值。
各數據類型及其對應的ldr/str指令如下。
·對于無符號的char類型的變量通過指令ldrb/strb來讀寫。
·對于無符號的short類型的變量通過指令ldrh/strh來讀寫。
·對于int類型的變量通過指令ldr/str來讀寫。
·對于有符號的char類型的變量通過指令ldrsb來讀取。
·對于有符號的char類型的變量通過指令strb來寫入。
·對于有符號的short類型的變量通過指令ldrh來讀取。
·對于有符號的short類型的變量通過指令strh來寫入。
·對于小于8個字的結構型變量,可以通過一條ldm/stm指令來讀/寫整個變量。
·對于結構型變量的數據成員,可以使用相應的ldr/str指令來訪問,這時必須知道該數據成員相對于結構型變量開始地址的偏移量。
下面是一個在匯編程序中訪問c程序全局變量的例子。程序中變量globv1是在c程序中聲明的全局變量。在匯編程序中首先用import偽指令聲明該變量;再將其內存地址讀入到寄存器ri中;然后將其值讀入到寄存器r0中;修改后再將寄存器r0的值賦予變量globv1。本例中的程序如下。
歡迎轉載,信息來自維庫電子市場網(www.dzsc.com)
在c程序中聲明的全局變量可以被匯編程序通過地址間接訪問,具體訪問方法如下。
·使用import偽指令聲明該全局變量。
·使用ldr指令讀取該全局變量的內存地址,通常該全局變量的內存地址值存放在
程序的數據緩沖池中。
·根據該數據的類型,使用相應的ldr指令讀取該全局變量的值;使用相應的str
指令修改該全局變量的值。
各數據類型及其對應的ldr/str指令如下。
·對于無符號的char類型的變量通過指令ldrb/strb來讀寫。
·對于無符號的short類型的變量通過指令ldrh/strh來讀寫。
·對于int類型的變量通過指令ldr/str來讀寫。
·對于有符號的char類型的變量通過指令ldrsb來讀取。
·對于有符號的char類型的變量通過指令strb來寫入。
·對于有符號的short類型的變量通過指令ldrh來讀取。
·對于有符號的short類型的變量通過指令strh來寫入。
·對于小于8個字的結構型變量,可以通過一條ldm/stm指令來讀/寫整個變量。
·對于結構型變量的數據成員,可以使用相應的ldr/str指令來訪問,這時必須知道該數據成員相對于結構型變量開始地址的偏移量。
下面是一個在匯編程序中訪問c程序全局變量的例子。程序中變量globv1是在c程序中聲明的全局變量。在匯編程序中首先用import偽指令聲明該變量;再將其內存地址讀入到寄存器ri中;然后將其值讀入到寄存器r0中;修改后再將寄存器r0的值賦予變量globv1。本例中的程序如下。
歡迎轉載,信息來自維庫電子市場網(www.dzsc.com)
上一篇:在c/c++代碼中嵌入匯編指令