2017-05-06 44 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