2013-05-17 7 views
2

Учитывая следующий код CA65:CA65: 'Диапазон ошибок' от 16-битного вычисленного адреса

foo = $82 

.scope 
     LDA #$ff 
     STA foo*$40 
.endscope 

Я получаю сообщение об ошибке:

foo.s(5): Error: Range error (8320 not in [0..255]) 

Интересно, что следующая версия работает, как ожидалось:

foo = $82 

     LDA #$ff 
     STA foo*$40 

Как я могу получить эту работу внутри .scope?

ответ

4

Если вы имеете в виду глобальный символ изнутри .scope или .proc, иногда вам нужно явно указать, что символ находится в глобальной области видимости, а не внутренней области. Вы делаете это, добавляя оператор «paamayim nekudotayim» (пара колонов) перед символом: ::spam. Я заметил это в основном с такими вещами, как .if.

следующие компилирует в CA65:

foo = $82 

.scope 
     LDA #$ff 
     STA ::foo*$40 
.endscope 
3

Я не знаю, почему scope вызывает проблему, но похоже, что вы должны сказать ассемблеру, что STA является абсолютным, а не нулевой страницы ссылаются он выводя:

foo = $82 

.scope 
     LDA #$ff 
     STA a:foo*$40 
.endscope 
+0

Спасибо за downvote причины. О, подождите ... –

 Смежные вопросы

  • Нет связанных вопросов^_^