2017-05-06 52 views
0

我目前正在使用TI MSP430并编写如下所示的汇编代码。我想将值'1'写入变量var,但是通过var_ptr间接地写入,var_ptr保存var的地址。在阅读了用户指南中的寻址模式后,我认为这应该在指针变量前面使用&。如何在msp430上的汇编程序中写入外部变量

///< For testing 
.extern var; 
.extern var_ptr; 

///< A function for testing different commands 
.global testfunc 
    .type testfunc, @function 
testfunc: 
    mov #1, &var_ptr 

    ret 

这两个外部变量是在另一个c文件中定义的。

uint16_t var = 0; 
uint16_t* var_ptr = 0; 

我在函数调用前后打印两个值的内容。

var_ptr = &var; 
DEBUG_PRINT(("var: %u, var_ptr: %u\n", var, var_ptr)); 
testfunc(); 
DEBUG_PRINT(("var: %u, var_ptr: %u\n", var, var_ptr)); 

结果:

mov #1, &var_ptr 

var: 0, var_ptr: 9630<\n> 
var: 0, var_ptr: 1<\n> 
------------------------------------------- 
mov #1, var_ptr 

var: 0, var_ptr: 9630<\n> 
var: 0, var_ptr: 1<\n> 

独立使用&的,值 '1' 总是直接写入到可变var_ptr,但不变种使用var_ptr写入变量var的正确方法是什么?

编辑: 关于寻址模式的一个很好的解释可以找到here

回答

2

在MSP430汇编语法中,&ADDRADDR的区别仅在于前者指定了PC相对地址,而后者指定了绝对地址。差异主要与位置独立代码有关。要实现你想要的,你需要执行两个步骤:

mov var_ptr, r4 // load content of var_ptr into r4 
mov #1, @r4  // write #1 to where r4 points