从汇编程序中访问C程序变量
发布时间:2008/12/23 0:00:00 访问次数:1277
在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++代码中嵌入汇编指令