如何在msp430上的汇编程序中写入外部变量

时间:2017-05-06 15:50:01

标签: assembly msp430

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

///< 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>

独立于使用&amp;,值&#39; 1&#39;始终直接写入变量var_ptr,但不写入var。使用var_ptr写入变量var的正确方法是什么?

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

1 个答案:

答案 0 :(得分:2)

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

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