[an error occurred while processing this directive]
|
Мы имееем генерацию команд типа
XCH A,DPH (DPL)
в которых ассемблер не понимает, что такое DPL и DPH, т.к.
процессор имеет 2 DPTR, а компилятор генерит текст DPL и DPH.
А ассемблер понимает при этом только DP0L и DP0H или DP1L и DP1H
Пример:
00B0 1489 XCH A,DPH
*** ___________________________________________^
*** ERROR #A45 IN 1489 (main8kan.src, LINE 1489): UNDEFINED SYMBOL (PASS-2)
Но это пол-беды. Такая вот штука вылечит:
#pragma asm
$include dpl_dph.inc
#pragma endasm
Главная беда в том, что мы имеем некорректный *.OBJ на который жутко ругается линкер.
Пример:
...
*** ERROR L107: ADDRESS SPACE OVERFLOW
SPACE: DATA
SEGMENT: ?DT?_RASCHET_PID?MAIN8KAN
LENGTH: 000BH
*** ERROR L107: ADDRESS SPACE OVERFLOW
SPACE: DATA
SEGMENT: ?DT?_NUMTABLIC?MAIN8KAN
LENGTH: 0006H
*** ERROR L107: ADDRESS SPACE OVERFLOW
SPACE: DATA
SEGMENT: ?DT?_RASCHETIU?MAIN8KAN
LENGTH: 0006H
...
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: ?C?LSTKPDATA
MODULE: main8kan.obj (MAIN8KAN)
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: ?C?IMUL
MODULE: main8kan.obj (MAIN8KAN)
...
При этом без генерации SRC файла проект компилится и работает нормально.
Резюме - если задумал использовать "#pragma asm" то буть готов к головной боли при переводе программы на другие процессоры.
Самый проверенный временем прием ассемблерных вставок - подключение к проекту модуля *.A51, в котором как "public" объявляем любую функцию. Это годами проверенный способ еще с DOS-овских Keil-лов. Главное, при переходе на другую модель процессора - нет головняка, а код генерится обычный ассемблерный. Для 51-х с малым объемом памяти программ (51,52,53) очень рекомендую HT-TECH C51. Вот где раздолье ассемблиристу, только знай ставь где попало #asm ... #endasm или asm(...). Малость глючный HT-TECH, да и все небезгрешны.
Надеюсь, обьяснил причины нелюбви к "#pragma asm" и борьбу с этим. А если кого обидел так ПРОШУ ПРОЩЕНЬЯ. НЕ СО ЗЛА. Просто с этим "#pragma asm" попадал очень часто в неприятности. Ну и зуб на это имею!!!
E-mail: info@telesys.ru