В настоящее время я работаю с 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 с помощью var_ptr?
РЕДАКТИРОВАТЬ: отличное объяснение режимов адресации можно найти здесь.