【问题标题】:How to write to external variable in assembler on the msp430如何在 msp430 上的汇编程序中写入外部变量
【发布时间】:2017-05-06 15:50:00
【问题描述】:

我目前正在使用 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>

与使用 & 无关,值 '1' 总是直接写入变量 var_ptr,而不是 var。使用 var_ptr 写入变量 var 的正确方法是什么?

编辑: 可以在here 找到有关寻址模式的精彩解释。

【问题讨论】:

    标签: assembly msp430


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-05-03
      • 2020-03-13
      • 2010-11-27
      • 1970-01-01
      • 2017-01-18
      • 2015-06-15
      • 2020-02-03
      • 1970-01-01
      • 2017-03-11
      相关资源
      最近更新 更多